21 July, 2013

AutoHotkey Scripts: Middle Mouse Button Gestures (diagonal)


I needed to add some middle button gestures to StrokeIt and Opera.
This script adds 8 new gestures.

So this is a general script. The message boxes should be replaces with commands or subroutines.



MButton::
MouseGetPos, X1, Y1
Keywait MButton
MouseGetPos, X2, Y2
if(A_TimeSinceThisHotkey>200 AND X2-X1>0 AND Y2-Y1<0 AND Abs(X2-X1) >= 20 AND Abs(Y2-Y1) >= 20) {
MsgBox,,,Gesture top/right diagonal,1
} ; gesture top/right
else if(A_TimeSinceThisHotkey>200 AND X2-X1>0 AND Y2-Y1>0 AND Abs(X2-X1) >= 20 AND Abs(Y2-Y1) >= 20) {
MsgBox,,,Gesture down/right diagonal,1
} ; gesture down/right
else if(A_TimeSinceThisHotkey>200 AND X2-X1<0 AND Y2-Y1<0 AND Abs(X2-X1) >= 20 AND Abs(Y2-Y1) >= 20) {
MsgBox,,,Gesture top/left diagonal,1
} ; gesture top/left
else if(A_TimeSinceThisHotkey>200 AND X2-X1<0 AND Y2-Y1>0 AND Abs(X2-X1) >= 20 AND Abs(Y2-Y1) >= 20) {
MsgBox,,,Gesture down/left diagonal,1
} ; gesture down/left
else if(A_TimeSinceThisHotkey>200 AND Y2-Y1< 0 AND Abs(Y2-Y1) >= 20 AND Abs(X2-X1) < 20) {
MsgBox,,,Gesture up,1
} ; gesture up
else if(A_TimeSinceThisHotkey>200 AND Y2-Y1>0 AND Abs(Y2-Y1) >= 20 AND Abs(X2-X1) < 20) {
MsgBox,,,Gesture down,1
} ; Gesture down
else if(A_TimeSinceThisHotkey>200 AND X2-X1<0 AND Abs(X2-X1) >= 20 AND Abs(Y2-Y1) < 20) {
MsgBox,,,Gesture left,1
} ; gesture left
else if(A_TimeSinceThisHotkey>200 AND X2-X1>0 AND Abs(X2-X1) >= 20 AND Abs(Y2-Y1) < 20) {
MsgBox,,,Gesture right,1
} ; gesture right
else if (A_TimeSinceThisHotkey>400) ; press and hold
{
Send, ^c
} else {
Send, ^v
}
return





This is the specific script that I use.

The mouse middle button actions:

press: Paste
press and hold: Copy text and show clipboard (or just show clipboard when there's no selection)
gesture left: Paste previous clipboard (*)
gesture right: Show part of the clipboard and part of the previous clipboard as a tooltip
gesture down: Copy selection and starts WordWeb dictionary (**)
gesture up: Google search of highlighted word
gesture top/right diagonal: Paste clipboard with a semicolon in front
gesture top/left diagonal: Paste previous clipboard with a semicolon in front


(*) gesture left: press the mouse middle button for a short while and move the mouse left
(**) WordWeb dictionary has problems with text recognition (OCR) in Opera

ClipNew := clipboard
OnClipboardChange:
ClipOld := ClipNew
ClipNew := clipboard
LWin & LCtrl:: SendInput %ClipOld%
^b:: SendInput %ClipOld%
LAlt & Space:: Gosub, Show_Clipboard

MButton::
MouseGetPos, X1, Y1
Keywait MButton
MouseGetPos, X2, Y2
if(A_TimeSinceThisHotkey>200 AND X2-X1>0 AND Y2-Y1<0 AND Abs(X2-X1) >= 20 AND Abs(Y2-Y1) >= 20) {
SendInput `;{Space}%clipboard%{Space}
} ; gesture top/right
else if(A_TimeSinceThisHotkey>200 AND X2-X1>0 AND Y2-Y1>0 AND Abs(X2-X1) >= 20 AND Abs(Y2-Y1) >= 20) {
MsgBox,,,Gesture down/right diagonal,1
} ; gesture down/right
else if(A_TimeSinceThisHotkey>200 AND X2-X1<0 AND Y2-Y1<0 AND Abs(X2-X1) >= 20 AND Abs(Y2-Y1) >= 20) {
SendInput `; %ClipOld%
} ; gesture top/left
else if(A_TimeSinceThisHotkey>200 AND X2-X1<0 AND Y2-Y1>0 AND Abs(X2-X1) >= 20 AND Abs(Y2-Y1) >= 20) {
MsgBox,,,Gesture down/left diagonal,1
} ; gesture down/left
else if(A_TimeSinceThisHotkey>200 AND Y2-Y1< 0 AND Abs(Y2-Y1) >= 20 AND Abs(X2-X1) < 20) {
Gosub, Google_search
} ; gesture up
else if(A_TimeSinceThisHotkey>200 AND Y2-Y1>0 AND Abs(Y2-Y1) >= 20 AND Abs(X2-X1) < 20) {
Gosub, Go_dict
} ; gesture down
else if(A_TimeSinceThisHotkey>200 AND X2-X1<0 AND Abs(X2-X1) >= 20 AND Abs(Y2-Y1) < 20) {
SendInput %ClipOld%
} ; gesture left
else if(A_TimeSinceThisHotkey>200 AND X2-X1>0 AND Abs(X2-X1) >= 20 AND Abs(Y2-Y1) < 20) {
Gosub, Show_Clipboard
} ; gesture right
else if (A_TimeSinceThisHotkey>400) ; press and hold
{
Gosub, Close_Context_Menu
Send, ^c
Clip2 := SubStr(clipboard, 1, 70) ;"`n"SubStr(clipboard, 71, 70)
Clip3 := SubStr(ClipOld, 1, 70) ;"`n"SubStr(ClipOld, 71, 70)
CoordMode,ToolTip,Screen
ToolTip %Clip2%`n ----------- `n%Clip3%,600,300
Sleep 1500
ToolTip
return
} else {
Send, ^v
}
return

Show_Clipboard:
Clip2 := SubStr(clipboard, 1, 70) "`n"SubStr(clipboard, 71, 70)
Clip3 := SubStr(ClipOld, 1, 70)"`n"SubStr(ClipOld, 71, 70)
CoordMode,ToolTip,Screen
ToolTip %Clip2%`n ----------- `n%Clip3%,600,450
Sleep 2000
ToolTip
return

Get_high_text:
clipboard_backup := clipboard
Send,^c
high_text:= clipboard
Send,^c
clipboard := clipboard_backup
return

ToolTip_Copy:
ToolTip Copy
Sleep 250
ToolTip
return

Go_dict:
Gosub, Close_Context_Menu
Send ^c
Run, C:\Program Files\WordWeb\wwnotray.exe
return

Close_Context_Menu:
Send {Ctrl down}{Alt down}{Alt UP}{Ctrl UP}
return

Google_search:
Gosub, Close_Context_Menu
Gosub, Get_high_text
high_text := RegExReplace(high_text, "\s","+")
 Run, C:\Program Files\Opera\opera.exe  http://www.google.com/search?q=%high_text%
return

No comments:

Post a Comment