forked from S3rLoG/CapsLock_Menu
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCapsLock_Menu.ahk
More file actions
327 lines (301 loc) · 8.85 KB
/
CapsLock_Menu.ahk
File metadata and controls
327 lines (301 loc) · 8.85 KB
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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#SingleInstance Force ; Replaces the old instance automatically.
SetBatchLines -1 ; Run the script at maximum speed.
Menu, Tray, Tip, S3rLoG's CapsLock_Menu.
CapsLockMenu()
{
Menu, CapsLockMenu, Add
Menu, CapsLockMenu, Delete
Menu, CapsLockMenu, Add, CapsLock ON, CapsLockOn
Menu, CapsLockMenu, Add, CapsLock off, CapsLockOff
Menu, CapsLockMenu, Add
Menu, CapsLockMenu, Add, Paste as Plain Text, PastePlain
Menu, CapsLockMenu, Add
Menu, ConvertCaseMenu, Add, Title Case, Title
Menu, ConvertCaseMenu, Add, Capital Case, Capital
Menu, ConvertCaseMenu, Add, Sentence case, Sentence
Menu, ConvertCaseMenu, Add
Menu, ConvertCaseMenu, Add, UPPERCASE, Upper
Menu, ConvertCaseMenu, Add, lowercase, Lower
Menu, ConvertCaseMenu, Add, camelCase, camel
Menu, ConvertCaseMenu, Add, PascalCase, Pascal
Menu, ConvertCaseMenu, Add
Menu, ConvertCaseMenu, Add, Dot.Case, Dot
Menu, ConvertCaseMenu, Add, Snake_Case, Snake
Menu, ConvertCaseMenu, Add, Kebab-Case, Kebab
Menu, ConvertCaseMenu, Add
Menu, ConvertCaseMenu, Add, iNVERT cASE, Invert
Menu, ConvertCaseMenu, Add, RaNdoM caSe, Random
Menu, ConvertCaseMenu, Add, aLtErNaTiNg cAsE, Alternating
Menu, CapsLockMenu, Add, Convert Case, :ConvertCaseMenu
Menu, CapsLockMenu, Add
Menu, CapsLockMenu, Add, Emoji Keyboard, OpenEmojiKeyboard
Menu, CapsLockMenu, Add
Menu, InsertLineMenu, Add, Light, LightHorizontalBoxDrawing
Menu, InsertLineMenu, Add, Double, DoubleHorizontalBoxDrawing
Menu, CapsLockMenu, Add, Insert Line, :InsertLineMenu
Menu, CapsLockMenu, Show
}
CopyClipboard()
{
global ClipSaved := ""
ClipSaved := ClipboardAll ; save original clipboard contents
Clipboard := "" ; start off empty to allow ClipWait to detect when the text has arrived
Send {Ctrl down}c{Ctrl up}
Sleep 150
ClipWait, 1.5, 1
if ErrorLevel
{
TrayTip AutoHotkey, Copy to clipboard failed., 3, 19
Clipboard := ClipSaved ; restore the original clipboard contents
ClipSaved := "" ; clear the variable
return
}
}
PastePlain()
{
ClipSaved := ClipboardAll ; save original clipboard contents
Clipboard := Clipboard ; remove formatting
Send ^v ; send the Ctrl+V command
Sleep 100 ; give some time to finish paste (before restoring clipboard)
Clipboard := ClipSaved ; restore the original clipboard contents
ClipSaved := "" ; clear the variable
}
; creating something that links the function to a specific state that can then be called by legacy commands
ToggleCapsLock(){
return, CapsLockey(, True)
}
CapsLockOn(){
return, CapsLockey(True)
}
CapsLockOff(){
return, CapsLockey()
}
; actual function that does the work
CapsLockey(state := false, toggle := false)
{
; list the messages for the message box to report what happened
static messages := {0:"CapsLock Status: OFF", 1:"CapsLock Status: ON", "failed":"CapsLock operation failed"}
; decide whether how to set the state
state := toggle ? !GetKeyState("CapsLock", "T") : state
; 1 2 3 4 5
/*
1: Condition what should happen
2: Ternary operator. Signals that to its left is a condition (1) that should be used to decide between the two possibilitys on the right of it (3 or 5)
3: Getting the toggle keystate of CapsLock and invert it, to allow toggle functionality
4: Marker to signal that the true section of the ternary operation ends and the false section begins
5: The state handed in the function call
*/
SetCapsLockState % state
TrayTip CapsLock Menu, % messages[(GetKeyState("CapsLock", "T") == state) ? state : "failed"], 3, 17
}
CopyClipboardCLM()
{
global ClipSaved
WinGet, id, ID, A
WinGetClass, class, ahk_id %id%
if (class ~= "(Cabinet|Explore)WClass|Progman")
Send {F2}
Sleep 100
CopyClipboard()
if (ClipSaved != "")
Clipboard := Clipboard
else
Exit
}
PasteClipboardCLM()
{
global ClipSaved
WinGet, id, ID, A
WinGetClass, class, ahk_id %id%
if (class ~= "(Cabinet|Explore)WClass|Progman")
Send {F2}
Send ^v
Sleep 100
Clipboard := ClipSaved
ClipSaved := ""
}
Title()
{
ExcludeList := ["a", "about", "above", "after", "an", "and", "as", "at", "before", "but", "by", "for", "from", "nor", "of", "or", "so", "the", "to", "via", "with", "within", "without", "yet"]
ExactExcludeList := ["AutoHotkey", "iPad", "iPhone", "iPod", "OneNote", "USA"]
CopyClipboardCLM()
TitleCase := Format("{:T}", Clipboard)
for _, v in ExcludeList
TitleCase := RegexReplace(TitleCase, "i)(?<!\. |\? |\! |^)(" v ")(?!\.|\?|\!|$)\b", "$L1")
for _, v in ExactExcludeList
TitleCase := RegExReplace(TitleCase, "i)\b" v "\b", v)
TitleCase := RegexReplace(TitleCase, "im)\b(\d+)(st|nd|rd|th)\b", "$1$L{2}")
Clipboard := TitleCase
PasteClipboardCLM()
}
Capital()
{
ExactExcludeList := ["AutoHotkey", "iPad", "iPhone", "iPod", "OneNote", "USA"]
CopyClipboardCLM()
CapitalCase := Format("{:T}", Clipboard)
for _, v in ExactExcludeList
CapitalCase := RegExReplace(CapitalCase, "i)\b" v "\b", v)
Clipboard := CapitalCase
PasteClipboardCLM()
}
Sentence()
{
ExactExcludeList := ["AutoHotkey", "iPad", "iPhone", "iPod", "OneNote", "USA"]
CopyClipboardCLM()
StringLower, Clipboard, Clipboard
Clipboard := RegExReplace(Clipboard, "(((^|([.!?]\s+))[a-z])| i | i')", "$u1")
for _, v in ExactExcludeList
Clipboard := RegExReplace(Clipboard, "i)\b" v "\b", v)
PasteClipboardCLM()
}
Upper()
{
CopyClipboardCLM()
StringUpper, Clipboard, Clipboard
PasteClipboardCLM()
}
Lower()
{
CopyClipboardCLM()
StringLower, Clipboard, Clipboard
PasteClipboardCLM()
}
camel()
{
CopyClipboardCLM()
StringUpper, Clipboard, Clipboard, T
FirstChar := SubStr(Clipboard, 1, 1)
StringLower, FirstChar, FirstChar
camelCase := SubStr(Clipboard, 2)
camelCase := StrReplace(camelCase, A_Space)
Clipboard := FirstChar camelCase
PasteClipboardCLM()
}
Pascal()
{
CopyClipboardCLM()
StringUpper, Clipboard, Clipboard, T
Clipboard := StrReplace(Clipboard, A_Space)
PasteClipboardCLM()
}
Dot()
{
CopyClipboardCLM()
if RegExMatch(Clipboard, "\-|\_|\.") != "0"
{
Clipboard := RegExReplace(Clipboard, "\-|\_|\.", " ")
PasteClipboardCLM()
}
else
{
Clipboard := StrReplace(Clipboard, A_Space, ".")
PasteClipboardCLM()
}
}
Snake()
{
CopyClipboardCLM()
if RegExMatch(Clipboard, "\-|\_|\.") != "0"
{
Clipboard := RegExReplace(Clipboard, "\-|\_|\.", " ")
PasteClipboardCLM()
}
else
{
Clipboard := StrReplace(Clipboard, A_Space, "_")
PasteClipboardCLM()
}
}
Kebab()
{
CopyClipboardCLM()
if RegExMatch(Clipboard, "\-|\_|\.") != "0"
{
Clipboard := RegExReplace(Clipboard, "\-|\_|\.", " ")
PasteClipboardCLM()
}
else
{
Clipboard := StrReplace(Clipboard, A_Space, "-")
PasteClipboardCLM()
}
}
Invert()
{
CopyClipboardCLM()
Inv_Char_Out := ""
Loop % StrLen(Clipboard)
{
Inv_Char := SubStr(Clipboard, A_Index, 1)
if Inv_Char is Upper
Inv_Char_Out := Inv_Char_Out Chr(Asc(Inv_Char) + 32)
else if Inv_Char is Lower
Inv_Char_Out := Inv_Char_Out Chr(Asc(Inv_Char) - 32)
else
Inv_Char_Out := Inv_Char_Out Inv_Char
}
Clipboard := Inv_Char_Out
PasteClipboardCLM()
}
Random()
{
CopyClipboardCLM()
RandomCase := ""
for _, v in StrSplit(Clipboard)
{
Random, r, 0, 1
RandomCase .= Format("{:" (r?"L":"U") "}", v)
}
Clipboard := RandomCase
PasteClipboardCLM()
}
Alternating()
{
CopyClipboardCLM()
Inv_Char_Out := ""
StringLower, Clipboard, Clipboard
Loop, Parse, Clipboard
{
if (Mod(A_Index, 2) = 0)
Inv_Char_Out .= Format("{1:U}", A_LoopField)
else
Inv_Char_Out .= Format("{1:L}", A_LoopField)
}
Clipboard := Inv_Char_Out
PasteClipboardCLM()
}
OpenEmojiKeyboard()
{
Send {LWin down}.
Send {LWin up}
}
LightHorizontalBoxDrawing()
{
InputBox, UserInput, Input, , , 150, 105
Loop %UserInput%
Send {U+2500}
}
DoubleHorizontalBoxDrawing()
{
InputBox, UserInput, Input, , , 150, 105
Loop %UserInput%
Send {U+2550}
}
$CapsLock::
KeyWait CapsLock, T0.25
if ErrorLevel
CapsLockMenu()
else
{
KeyWait CapsLock, D T0.25
if ErrorLevel
CopyClipboard()
else
Send ^v
}
KeyWait CapsLock
return