Keyboard macros
You are encouraged to solve this task according to the task description, using any language you may know.
Link user defined methods to user defined keys.
AutoHotkey
<lang AutoHotkey> loop, 200 ;; loop 200 times while not paused { TrayTip, counting, %A_Index% press alt-p to pause sleep, 1000 }
!p:: ;; links alt-p key combination to the method pauseme() pauseMe() return
!r:: ;; links alt-r key combination to the method resume() resume() return
pauseMe() { Msgbox, pausing`, press alt-r to resume pause } resume() { TrayTip, resume, resuming, 2 pause, off } </lang> See ahk-viper-mode for a context sensitive vi key bindings example.
Tcl
<lang tcl>package require Tk
- Show off some emacs-like bindings...
pack [label .l -text "C-x C-s to save, C-x C-c to quit"] focus . bind . <Control-x><Control-s> {
tk_messageBox -message "We would save here"
} bind . <Control-x><Control-c> {exit}</lang> A more direct macro-like facility would be: <lang tcl>bind . <F1> {
foreach c [split "Macro demo!" {}] { event generate %W $c }
}</lang>
Vedit macro language
<lang vedit> // Configure a key to access menu item. // The menu item may then contain the commands directly, or it may call a macro from disk. // This has the advantage that the key binding is shown in the menu.
Key_Add("Shft-F6","[MENU]TV", OK)
// Configure a key to perform visual mode edit operations (similar to recorded key macro):
Key_Add("Numpad.Enter", "[CURSOR LEFT][LINE END][RETURN]", OK)
// Configure a key to execute macro language commands:
Key_Add("Numpad+", '[VISUAL EXIT] if(BB!=-1) { RCB(10,BB,BE) BB(-1) S("|@(10)",SET+CONFIRM) } else { S("",CONFIRM) }', OK)
// Configure a key to call a macro from disk. The old key assignment is not removed.
Key_Add("Ctrl-Shft-N",'[VISUAL EXIT] Call_File(100,"aspell.vdm","NEXT_ERROR")',INSERT+OK)
// Configure a two-key sequence (C-x C-c to save file).
Key_Add("^X C","[MENU]FS", OK)
// Remove a key assignment. If INSERT option was used when the key was assigned, the old assignment will come in effect again.
Key_Delete("Ctrl-Shft-N")
</lang>