@ewemoa
If it's just for moving (and not renaming), it seems like it might be nice to be able to navigate to the destination -- so somehow leverage FILE instead of TEXT for the third pane.
For renaming, navigating to the parent folder and then entering text mode to come up with a new name might be handy. Not sure whether this is doable at the moment though.
Yeah that works, although it does also include shortcuts in the results. Renaming doesnt work (c:\somefile > Move to > c:\temp\someotherfile) at least with this :
0_arg=FILE
2_arg=FILE
1_lbl=Move file to
1_ico=icons\move.png
2_lbl=C:\
2_ico=icons\move.png
cmd=cmd.exe
args=/C "move $0.path $2.path"
workdir=%d
And of course there's no use of the . to include a file extension lol ! Also i finaly googled happy hacking keyboard and see you point. Not to many options there

that said I want one!
@ecaradec
@pigeonlips : don't invest too much on file verbs, tell me what you think about this .
I think it rocks hard. So hard that i have stopped using FARR and was pretty dependent on this must use it like hundreds of times a day.
So i'm porting over all be bits and pieaces and thought i'd share.
Some of the things below are bits i really missed from my farr setup. Mostly have found workarounds to get working in qatapult!
In terms of changed to qatapult, please only take my comments as sugesstions - its your app
Also feel free to take any of it and do with as you wish. Note its all mostly autohotkey stuff and i'm not the best with it.
------------------------ RULES ------------------------
* matching on an arg vaule as well as type to restrict what rules are displayed. This would allow more control to the user in terms of whats displayed in the middle pane. I think this would work to add more context in terms of limiting the actions you can preform. For example....
0_arg=TEXT
0_vaule="comma,separated, list, maybe"
2_arg=FILE
....
then when you use ether "comma", "separated", "list" or "maybe" you rule verb is included as well as the default.
* NUMBER as another 0_arg data type. again to help with context. I'm thinking calculater, dialing numbers etc.
* the ability to add more than one lbl so that i can add multiple entrys to a pane (thinking just the last pane so far). For example:
0_arg=FILE
2_arg=FILE
1_lbl=Set volume
1_ico=icons\volume.png
2_lbl=master
2_ico=icons\volume.png
2.1_lbl=microphone
2.1_ico=icons\microphone.png
2.2_lbl=wave
2.2_ico=icons\wave.png
cmd=C:\Program Files\Qatapult\helpers\set-vol.exe
args=$0.text $2.text
workdir=%d
so in this example i can set the volume control using something like (0 > set volume > microphone) or (100 > Set volume > wave)
------------------- CURRENT SELECTION --------------------------
Be nice if this detected text too. Ie selected text in a text editor. an example would be:
Selected text > change case > upper
Selected text > check spelling
workaround currently is the following ahk complied. A short cut to it called "selected Text" with a nice icon
http://www.iconeasy....k%202/Dictionary.png; ---------------------------------------------------------------------------------------------------------
; AutoHotkey Version: 1.0.47.6
; Author: pigeonlips
; Script Name: text operation
; Script Function: Change the case of a word to uppercase, lowercase, titlecase or spell check
; need to have aspell installed (http://aspell.net/)
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#SingleInstance , Force ; only want one at a time
SendMode input ; Recommended for new scripts due to its superior speed and reliability.
; whats vaild
validatearguments=upper,lower,title,spell
;get the number of arguments - need one
arg = %0%
if arg > 0
{
; whats its vaule and check its valid
case = %1%
; uncomment for deguging
;msgbox %1% and now %validatearguments%
if case in %validatearguments%
{
; call the sub to do the work
OparateOnSelectText(case)
exitapp
}
}
; goodbye crwel world!
msgbox command not known - you can use one of the following `n %validatearguments%
ExitApp
OparateOnSelectText(case)
{
; Uncomment for debuggin
;msgbox %case%
; get the window with focus
WinGet Id, Id, A
; save the old clipboard
OldClip := ClipboardAll
Clipboard =
; Wait for Win/Alt/Ctrl to be released, or we will invoke a win + our need match. this is a safegard
KeyWait, LWin
KeyWait, RWin
KeyWait, Ctrl
KeyWait, Alt
; copy that word
Send ,^c
; wait for it. ClipWait is for reliability.
ClipWait , 1
; set the word to return
Word := Clipboard
; transform the contents of the clipboard when upper
if case = upper
StringUpper , Word , Word
; transform the contents of the clipboard when lower
if case = lower
StringLower , Word , Word
; transform the contents of the clipboard when title
if case = title
StringLower , Word , Word , T
if case = spell
{ ; alittle more to do now
; set up a tempary file to use
TmpFile = %TEMP%\SpellCheckerTmp.txt
FileDelete %TmpFile%
;dump the contents of the clipboard to a temp text file
FileAppend %Word%, %TmpFile%
;run aspell
Run C:\Program Files\Aspell\bin\aspell.exe check "%TmpFile%"
;focus then wait for the cmd to close
WinWaitActive ahk_class ConsoleWindowClass
WinWaitClose ahk_class ConsoleWindowClass
; read in the correct word
FileRead Word, %TmpFile%
}
;focus the orginal application
WinActivate ahk_id %Id%
WinWaitActive ahk_id %Id%
; paste the new clipboard vaule
Send , %Word%
;replace the contents of the clipboard back to what it was
Clipboard := OldClip
}
then the following rule:
0_arg=FILE
2_arg=text
1_lbl=Change Selected Text
1_ico=icons\window.png
cmd=C:\Program Files\Qatapult\helpers\ian-Changetext.exe
args=$2.text
workdir=%d
works like :
selected text > Change selected text > UPPER
selected text > Change selected text > LOWER
selected text > Change selected text > TITLE
selected text > Change selected text > SPELL
------------ ACTIONS ON WINDOWS ----------------
Switching to an open window would be nice. I do this in FARR alot as aposed to Alt-Tab. My workaround for the moment is the following ahk script complieted
icon
http://images-3.find...rimo/128/windows.png#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetTitleMatchMode RegEx
WinActivate, i)%1%
then useing this rule
0_arg=TEXT
1_lbl=Switch to window
1_ico=icons\window.png
cmd=C:\Program Files\Qatapult\helpers\ian-switchapp.exe
args=$0.text
workdir=%d
be nice if this was native and displayed a list of open windows Somthing my workaround doesnt do

Also Minimize and maximise would be sweet but i guess most keyboard junkies kow the shortcuts for this anyway.
Finaly the last one while on the shortcuts topic is to be able to interact with an application. I never remeber the shortcuts for all the apps i use (and sometimes they differ from app to app). So ....
again complied version of this ahk script:
icon used
http://www.marketing.../images/keyboard.png; ---------------------------------------------------------------------------------------------------------
; AutoHotkey Version: 1.0.47.6
; Author: Ian
; Script Name: Keygram
; Script Function: sends key-combo to application based on a word
; Todo nice to have a command list. not sure how to show it. You can get a list using ini_ReadSections(iniFile,application)
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#SingleInstance , Force ; only want one at a time
; set up the global settings
applicationName = keygram
iniFile = %A_ScriptDir%\%applicationName%.ini
; read global settings from ini
vaildcommands := ini_ReadSections(iniFile,"")
keydelay := ini_Read(iniFile, "keygram", "keydelay")
SendMode := ini_Read(iniFile, "keygram", "mode")
SetKeyDelay := keydelay
; get the active application exe name - unless the window id is passed in ldialater we will assume its the active window
winget , application, ProcessName, A
winget , applicationid, ID, A
;get the number of arguments - need just one
args = %0%
; ------------------------------------------------------------------------------------------------------------------------------------------
if args > 0
{
Loop, %args% ; For each argument:
{
;split the argument with = ie KEY=VAULE
stringsplit,argumentitem, %A_Index%, =
; uncomment below for debugin!
;msgbox %argumentitem1% = %argumentitem2%
; there is no case statement in ahk scripts so i'm using labels instead.
If IsLabel("case-" . argumentitem1)
{
Loop 1
{
Goto case-%argumentitem1%
case-window:
; If its a number we are probably looking for the HWND id
if argumentitem2 is integer
{
winget , application, ProcessName, ahk_id %argumentitem2%
winget , applicationid, id, ahk_id %argumentitem2%
}
; not a number - lets look for the title!
else
{
SetTitleMatchMode RegEx
WinActivate, i)%argumentitem2%
; get the windows process name. Thought this would be best.
winget ,application,ProcessName, A
winget ,applicationid, id, A
}
; uncomment below for debugin!
;msgbox %application% id is %applicationid% > got it from %argumentitem2%
break
case-command:
command = %argumentitem2%
break
case-bonusbite:
bonusbite = %argumentitem2%
break
}
}
}
}
; ------------------------------------------------------------------------------------------------------------------------------------------
; now for the main logic - running the command
if command in %vaildcommands%
{
; check theres a match for the application
keycombo:= ini_Read(iniFile, command, application)
;if theres no match i get ERROR
if keycombo = ERROR
{
; theres no match now too look up fallback (use for "all" applications)
keycombo:= ini_Read(iniFile, command, "all")
;still no match
if keycombo = ERROR
{
; ask user if it should be added
msgbox 4,, %application% is not on the list for %command%. Want to add it?
IfMsgBox No
exitapp
; ask for the key combo to use
KeyCombo := ask_ForKeyCombo()
; add it to the ini file
ini_Add(iniFile, command, application, KeyCombo)
}
}
; send the keycombo
WinActivate , ahk_id %applicationid%
Send , %keycombo%
}
else
{
msgbox 4, %command% not understood, Do you want to use the learing wizard to add it?
IfMsgBox Yes
LeanCommand(command, iniFile)
}
; if theres anything else to send then send that too - send it RAW baby!
if bonusbite !=
{
WinActivate , ahk_id %applicationid%
sendraw %bonusbite%
}
LeanCommand(command, iniFile) ; *******************************************************************************************
{
; welcome message
msgWizardWelcome := msgWizardWelcome()
msgbox 64, learn wizard, %msgWizardWelcome%
; get the name of the command
InputBox, command, learn wizzard, name you want to call this command?,,,,,,,,%command%
; start with the last found windows we can use this as a default, in case its right!
WinGetActiveTitle, Title
; get the application
Application := ask_ForApplication(Title)
; now to get the keycombo
KeyCombo := ask_ForKeyCombo()
; write it to the ini file
ini_Add(iniFile, Command, Application, KeyCombo)
; let the user know
msgbox ,You learn something new very day!, When you have "%Application%" focused in future and say "%Command%" i'll send "%KeyCombo%" to it!
}
ini_Create(file) ; *************************************************************************************************************
{
; create a default ini file. with default vaules
iniWrite , 500 , %file% , keygram , KeyDelay
iniWrite , Input , %file% , keygram , Mode
; now some comments
FileAppend , `; Mode - can be "Event" "Input" "InputThenPlay" or Play `n, %file%
FileAppend , `; see http://www.autohotkey.com/docs/commands/SendMode.htm `n, %file%
FileAppend , `; KeyDelay - Sets the delay that will occur after each keystroke. Doesnt apply if mode is "Input" `n, %file%
FileAppend , `; see http://www.autohotkey.com/docs/commands/SetKeyDelay.htm `n, %file%
FileAppend , `n, %file%
FileAppend , `; For a list of key vaules this ini file uses look at `n, %file%
FileAppend , `; http://www.autohotkey.com/docs/commands/Send.htm#SendPlay `n, %file%
}
ini_Read(file, section, key) ; *************************************************************************************************
{
; if theres no file create a blank one with default settings
IfNotExist , %file%
ini_create(file)
;read the ini file and return key
iniRead, value, %file%, %section%, %key%
; return the vaule
return value
}
ini_Add(file, section, key, vaule) ; *******************************************************************************************
{
; this will also write the file if it doesnt exist. Lets hope the file passed in is Correct!
iniWrite , %vaule% , %file% , %section% , %key%
}
ini_ReadSections(file, application) ; *******************************************************************************************************
{
; clear the var
sections :=
;loop - reads the ini file
Loop, Read, %file%
{
; look for lines that start with [ and end with ]
If (SubStr(A_LoopReadLine, 1, 1) = "[") and (SubStr(A_LoopReadLine, 0, 1) = "]")
{
; take off first char and last char - should be [ and ]
StringTrimLeft , newSection , A_LoopReadLine , 1
StringTrimRight , newSection , newSection , 1
; add this to the list obmit the "keygram" setting
if newSection != keygram
{
; if we passesd in an application lets only show sections vaild for that!
if application
{
msgbox i fire with %application%
VaildForApplication := ini_Read(file, newSection, application)
if VaildForApplication = ERROR
{
; found nothing for that application, but what about "all" thats vaild right!
VaildForApplication := ini_Read(file, newSection, "all")
if VaildForApplication != ERROR
sections := newSection . "," . sections
}
else
{
; found a match for my application
sections := newSection . "," . sections
}
}
; no application - lets retrun all vaild sections!
else
{
sections := newSection . "," . sections
}
}
}
}
; remove the last ","
StringTrimRight , sections , sections , 1
; return the list
return sections
}
ask_ForKeyCombo() ; *************************************************************************************************************
{
msgKeyCombo := msgKeyCombo()
; now to get the action
InputBox, KeyCombo, learn wizzard, %msgKeyCombo%
; correct modifer keys ie user wants "!" but gets alt
StringReplace, KeyCombo, KeyCombo, !,{!}, All
StringReplace, KeyCombo, KeyCombo, #,{#}, All
StringReplace, KeyCombo, KeyCombo, +,{+}, All
StringReplace, KeyCombo, KeyCombo, ^,{^}, All
; correct modifer keys ie user wants Alt but gets "!"
StringReplace, KeyCombo, KeyCombo, {Ctrl},^, All
StringReplace, KeyCombo, KeyCombo, {Win},#, All
StringReplace, KeyCombo, KeyCombo, {Shift},+, All
StringReplace, KeyCombo, KeyCombo, {Alt},!, All
; all done and now for the results
return KeyCombo
}
ask_ForApplication(title) ; **********************************************************************************************************
{
; get the application for the command - lets loop through this process untill the user is happy
loop
{
; show an input box for the user to select the application
msgApplication := msgApplication()
InputBox, Title, learn wizzard, %msgApplication%,,,,,,,,%Title%
; if the application title entered was all lets get out of here and just return that!
if title = all
break
; not all - keep at it - foucus the user selected application
SetTitleMatchMode RegEx
WinActivate, i)%Title%
; get the windows process name. Thought this would be best.
winget ,application,ProcessName, A
; now flash the window
hWnd := WinActive( "A" )
Loop 4
{
DllCall( "FlashWindow", UInt,hWnd, Int,True )
Sleep 500
}
DllCall( "FlashWindow", UInt,hWnd, Int,False )
; ask to confirm that we got the right window
msgbox 4,learn wizard, did the application window you want flash? If not quick tip - click on it now to give it focus. then click no. I'll try and guess it!
IfMsgBox Yes
break
}
; return the application
return application
}
msgWizardWelcome() ; ******************************************************************************************
{
msgWizardWelcome =
(
This wizard will help me learn a new command for you
=====================================================
You are going to need 3 things
#> name = a name to call this command.
#> application = the application you would like to apply an action too.
#> key combination = the input to send to this application. A shortcut for example or a signature.
To work out the windows label for you application, please open that application or focus it before you click ok!
if your application is open - click next to continue!
)
return msgWizardWelcome
}
msgKeyCombo() ; ************************************************************************************************
{
msgKeyCombo =
(
Type in the key combination below
=======================================
some notes - special keys include:
{F1} - {F24} or {Numpad0} - {Numpad9}
{Enter} {Esc} {Tab} {Backspace} {Delete} {Insert} etc
{Ctrl} {Alt} {Shift} {LWin} etc
see http://www.autohotkey.com/docs/commands/Send.htm for more.
)
return msgKeyCombo
}
msgApplication() ; ************************************************************************************************
{
msgApplication =
(
Apply this all Applications
-----------------------------
in the input box below use the word "all"
Use the title of the application
---------------------------------
look at the title bar of the application.
Type some of it in here (doesnt need to be all of it but the more the better!).
I'll focus it and make it flash - you can tell me if i got the right one!
)
return msgApplication
}
then this rule:
0_arg=TEXT
2_arg=TEXT
1_lbl=Keygram
1_ico=icons\keyboard.png
2_lbl=
cmd=C:\Program Files\Qatapult\helpers\keygram.exe
args=command=$0.text bonusbite=$2.text
workdir=%d
works like (with say notepad++ open and focused):
new > keygram > hello world
to test add this to the keygram.ini
[new]
notepad++.exe=^n
WINWORD.EXE=!fnln
It feels like i have been typing forever and just noticed you have posted again. I'll also shut up for a bit as i feel i'm kinda spamming the board. Don't mean to - just super excited about qatapult.
I cannot say it enough. Thanks for the app. Its shaping up really nice. Love it and the direction your taking it.