-
Notifications
You must be signed in to change notification settings - Fork 2
/
_altCommands.py
119 lines (98 loc) · 3.28 KB
/
_altCommands.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
"""
Alternative ways to issue commands
"""
print "importing " + __file__
from dragonfly import *
import Base
from decorators import ActiveGrammarRule
import pyHook # http://sourceforge.net/projects/pyhook/
grammar = Base.ContinuousGrammar("alternate commands grammar")
pyHookManager = pyHook.HookManager()
byKeysCommandBuffer = ""
NamedStrings = {}
namedStringBuffer = ""
currentStringName = ""
isShifted = False
def OnKeyDown_ByKeys(event):
global byKeysCommandBuffer
if len(event.Key) == 1:
byKeysCommandBuffer += event.Key
elif event.Key == "Space":
byKeysCommandBuffer += " "
elif event.Key == "Return":
pyHookManager.UnhookKeyboard()
words = byKeysCommandBuffer.lower().split()
byKeysCommandBuffer = ""
Mimic(*words).execute()
return False
def OnKeyDown_NamedString(event):
global namedStringBuffer
global currentStringName
global isShifted
if len(event.Key) == 1:
character = chr(event.Ascii)
if isShifted:
character = character.upper()
namedStringBuffer += character
elif event.Key == "Space":
namedStringBuffer += " "
elif event.Key in ["Lshift", "Rshift"]:
isShifted = True
elif event.Key == "Return":
pyHookManager.UnhookKeyboard()
pyHookManager.KeyDown = None
pyHookManager.KeyUp = None
NamedStrings[currentStringName] = namedStringBuffer
# set clean initial state
isShifted = False
currentStringName = ""
namedStringBuffer = ""
return False
def OnKeyUp_NamedString(event):
global isShifted
if event.Key in ["Lshift", "Rshift"]:
isShifted = False
return False
def startByKeysCommandHook():
pyHookManager.KeyDown = OnKeyDown_ByKeys
pyHookManager.Keyup = None
pyHookManager.HookKeyboard()
def startNamedStringsHook(stringName):
global currentStringName
currentStringName = stringName
pyHookManager.KeyDown = OnKeyDown_NamedString
pyHookManager.Keyup = OnKeyUp_NamedString
pyHookManager.HookKeyboard()
@ActiveGrammarRule(grammar)
class ByKeysRule(Base.ContinuousRule):
spec = "by keys"
def _process_recognition(self, node, extras):
Function(startByKeysCommandHook).execute()
@ActiveGrammarRule(grammar)
class CreateNamedString(Base.CorrectableRule):
spec = "remember string [as] <NamedString>"
extras = Dictation("NamedString"),
def _process_recognition(self, node, extras):
stringName = " ".join(extras["NamedString"].words)
Function(startNamedStringsHook).execute({"stringName": stringName})
@ActiveGrammarRule(grammar)
class RetrieveNamedString(Base.CorrectableRule):
spec = "by name <NamedString>"
extras = Dictation("NamedString"),
def _process_recognition(self, node, extras):
stringName = " ".join(extras["NamedString"].words)
try:
Text(NamedStrings[stringName]).execute()
except:
print "No string named " + stringName
@ActiveGrammarRule(grammar)
class ClearNamedString(Base.CorrectableRule):
spec = "clear named strings"
def _process_recognition(self, node, extras):
NamedStrings = {}
grammar.load()
def unload():
global grammar
if grammar:
grammar.unload()
grammar = None