-
Notifications
You must be signed in to change notification settings - Fork 0
/
putty.JSS
205 lines (181 loc) · 5.04 KB
/
putty.JSS
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
;JAWS PuTTY scripts
;Written by Munawar Bijani
;Updated 01/16/2017
include "hjconst.jsh";
include "common.jsm";
globals
int spell,
int value,
int numberOfCalls,
string prompt,
string lastText;
Void function AutoStartEvent()
AddHook (HK_SCRIPT, "speakPhoneticAndValueHook");
EndFunction
Void function AutoFinishEvent()
RemoveHook(HK_SCRIPT, "speakPhoneticAndValueHook");
EndFunction
Void function monitorForLineChange(string currentPrompt)
prompt = currentPrompt;
numberOfCalls = 0;
ScheduleFunction("readCurrentLine", 1);
EndFunction
Void function readCurrentLine()
var string newText = getLine();
if (prompt != newText) then
if (StringStripAllBlanks(newText) == "") then
SayString("blank");
else
SayString(StringSegment(newText, "$", -1));
EndIf
else
numberOfCalls = numberOfCalls + 1;
if (numberOfCalls > 2) then
numberOfCalls = 0;
if (StringStripAllBlanks(prompt) == "") then
SayString("blank");
else
SayString(StringSegment(prompt, "$", -1));
EndIf
else
ScheduleFunction("readCurrentLine", 1);
EndIf
EndIf
EndFunction
Void function ScreenStabilizedEvent (handle hwnd)
if (getWindowClass(getFocus()) != "PuTTY") then
ScreenStabilizedEvent(hwnd);
return;
EndIf
readNewText();
ScreenStabilizedEvent(hwnd);
EndFunction
Void Function readNewText ()
var string text = GetTextInWindow (getFocus());
var int pointer = -1;
if (lastText != text) then
while (abs (pointer) <= StringSegmentCount(text, "\n") && StringSegment(text, "\n", pointer) != StringSegment(lastText, "\n", -2))
pointer = pointer - 1;
EndWhile
if (pointer == 1) then
pointer = -1;
else
pointer = pointer + 2;
EndIf
var int i;
for i = pointer to -1
SayString(StringSegment(text, "\n", i));
EndFor
lastText = StringTrimTrailingBlanks(text);
EndIf
EndFunction
Script SayPriorLine ()
if (!IsPCCursor() || getWindowClass(getFocus()) != "PuTTY") then
PerformScript SayPriorLine();
return;
EndIf
PriorLine();
monitorForLineChange(GetLine());
EndScript
Script SayNextLine ()
if (!IsPCCursor() || getWindowClass(getFocus()) != "PuTTY") then
PerformScript SayNextLine();
return;
EndIf
NextLine();
monitorForLineChange(GetLine());
EndScript
Script SayCharacter ()
if (!IsPCCursor() || getWindowClass(getFocus()) != "PuTTY") then
PerformScript SayCharacter();
return;
EndIf
var int r = GetCursorCol ();
var int l = r - GetCharacterWidth();
var int t = GetCursorRow() - 1;
var int b = t + GetCharacterWidth() + 2;
var string s = GetTextInRect (l, t, r, b, 0);
if (!IsSameScript()) then
spell = false;
value = false;
elif (IsSameScript() == 1) then
spell = true;
else
spell = false;
value = true;
EndIf
sayAccordingToHook(s);
EndScript
Script SayPriorCharacter ()
if (!IsPCCursor() || getWindowClass(getFocus()) != "PuTTY") then
PerformScript SayPriorCharacter();
return;
EndIf
var int cursorCol = GetCursorCol();
var int startTime = GetTickCount();
PriorCharacter();
while (cursorCol == GetCursorCol() && GetTickCount() - startTime < 300)
;We need to wait here because it will take PuTTY time to move the cursor...
EndWhile
var int r = GetCursorCol ();
var int l = r - GetCharacterWidth();
var int t = GetCursorRow() - 1;
var int b = t + GetCharacterWidth() + 2;
sayAccordingToHook(GetTextInRect (l, t, r, b, 0));
EndScript
Script SayNextCharacter ()
if (!IsPCCursor() || getWindowClass(getFocus()) != "PuTTY") then
PerformScript SayNextCharacter();
return;
EndIf
var int cursorCol = GetCursorCol();
var int startTime = GetTickCount();
NextCharacter();
while (cursorCol == GetCursorCol() && GetTickCount() - startTime < 300)
;We need to wait here because it will take PuTTY time to move the cursor...
EndWhile
var int r = GetCursorCol ();
var int l = r - GetCharacterWidth();
var int t = GetCursorRow() - 1;
var int b = t + GetCharacterWidth() + 2;
sayAccordingToHook(GetTextInRect (l, t, r, b, 0));
EndScript
Script JAWSBackspace ()
if (GetWindowClass(GetFocus()) != "PuTTY") then
PerformScript JAWSBackspace();
return;
EndIf
var int r = GetCursorCol () - GetCharacterWidth();
var int l = r - GetCharacterWidth();
var int t = GetCursorRow() - 1;
var int b = t + GetCharacterWidth() + 2;
sayAccordingToHook(GetTextInRect (l, t, r, b, 0));
TypeKey (cksBackspace);
EndScript
Function SpeakPhoneticAndValueHook (string scriptName)
if (scriptName != "SayCharacter" && scriptName != "SayNextCharacter" && scriptName != "SayPriorCharacter") then
spell = false;
value = false;
EndIf
return true;
EndFunction
Void Function sayAccordingToHook (string s)
if (s == "") then
s = " ";
EndIf
if (spell) then
if (s == " ") then
SayString("space");
else
SayString(GetCharacterByExample(s));
EndIf
elif (value) then
SayString(GetCharacterValueString (s, cvfWantValueOfWideChar));
else
if (s == " ") then
SayString("space");
else
SayString(s);
EndIf
EndIf
EndFunction