|
Hi, as my first contribution as an autohotkey user I thought I'd add sentence case. Not perfect, e.g. probably won't span paragraphs properly, but here we go...
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
About =
(LTrim0
Slows down and extends the capslock key.
Hold for 0.05 sec to toggle capslock on or off.
Hold for 0.3 sec to show a menu that converts selected text to
UPPER CASE, lower case, Title Case, iNVERT cASE, etc
)
SetTimer,TOOLTIP,1500
SetTimer,TOOLTIP,Off
TimeCapsToggle =5
TimeOut =30
CapsLock::
counter=0
Progress, ZH16 ZX0 ZY0 B R0-%TimeOut%
Loop, %TimeOut%
{
Sleep,10
counter+=1
Progress, %counter% ;, SubText, MainText, WinTitle, FontName
If (counter = TimeCapsToggle)
Progress, ZH16 ZX0 ZY0 B R0-%TimeOut% CBFF0000
GetKeyState,state,CapsLock,P
If state=U
Break
}
Progress, Off
If counter=%TimeOut%
Gosub,MENU
Else If (counter>TimeCapsToggle)
Gosub, CapsLock_State_Toggle
Return
MENU:
Winget, Active_Window, ID, A
Send,^c
ClipWait,1
Menu,convert,Add
Menu,convert,Delete
Menu, misc ,Add,&About,ABOUT
Menu, misc ,Add,&Quit,QUIT
Menu,convert,Add,CAPshift, :misc
Menu,convert,Add,
Menu,Convert,Add,&CapsLock Toggle,CapsLock_State_Toggle
Menu,convert,Add,
; NOTE: A_ThisMenuItem is used to determine the action to take
Menu,convert,Add,&UPPER CASE,MENU_ACTION
Menu,convert,Add,&lower case,MENU_ACTION
Menu,convert,Add,&Title Case,MENU_ACTION
Menu,convert,Add,&iNVERT cASE,MENU_ACTION
Menu,convert,Add,&Sentence case,MENU_ACTION
Menu,convert,Add,Remove_&under_scores,MENU_ACTION
Menu,convert,Add,Remove.&full.stops,MENU_ACTION
Menu,convert,Default,&CapsLock Toggle
Menu,convert,Show
Return
MENU_ACTION:
AutoTrim,Off
string=%clipboard%
clipboard:=Menu_Action(A_ThisMenuItem, string)
WinActivate, ahk_id %Active_Window%
Send,^v
ToolTip,Selection converted to %A_ThisMenuItem%
SetTimer,TOOLTIP,On
Return
Menu_Action(ThisMenuItem, string)
{
If ThisMenuItem =&UPPER CASE
StringUpper,string,string
Else If ThisMenuItem =&lower case
StringLower,string,string
Else If ThisMenuItem =&Title Case
StringLower,string,string,T
Else If ThisMenuItem =&iNVERT cASE
{
StringCaseSense,On
lower=abcdefghijklmnopqrstuvwxyz
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
StringLen,length,string
Loop,%length%
{
StringLeft,char,string,1
StringGetPos,pos,lower,%char%
pos+=1
If pos<>0
StringMid,char,upper,%pos%,1
Else
{
StringGetPos,pos,upper,%char%
pos+=1
If pos<>0
StringMid,char,lower,%pos%,1
}
StringTrimLeft,string,string,1
string.=char
}
StringCaseSense,Off
}
Else If ThisMenuItem =&Sentence case
{
StringCaseSense,On
lower=abcdefghijklmnopqrstuvwxyz
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
dot=1
StringLen,length,string
Loop,%length%
{
StringLeft,char,string,1
if (char==".")
{
dot=1
}
else
{
if (dot=1)
{
StringGetPos,pos,lower,%char%
pos+=1
If pos<>0
StringMid,char,upper,%pos%,1
}
else
{
StringGetPos,pos,upper,%char%
pos+=1
If pos<>0
StringMid,char,lower,%pos%,1
}
if (char<> " ")
dot=0
}
StringTrimLeft,string,string,1
string.=char
}
StringCaseSense,Off
}
Else If ThisMenuItem =Remove_&under_scores
StringReplace, string, string,_,%A_Space%, All
Else If ThisMenuItem =Remove.&full.stops
StringReplace, string, string,.,%A_Space%, All
Return string
}
EMPTY:
Return
TOOLTIP:
ToolTip,
SetTimer,TOOLTIP,Off
Return
CapsLock_State_Toggle:
If GetKeyState("CapsLock","T")
state=Off
Else
state=On
CapsLock_State_Toggle(state)
Return
CapsLock_State_Toggle(State)
{
SetCapsLockState,%State%
ToolTip,CapsLock %State%
SetTimer,TOOLTIP,On
}
ABOUT:
MsgBox,0,CAPshift,%About%
Return
QUIT:
ExitApp
|
|