diff options
author | Philippe Brochard <pbrochard@common-lisp.net> | 2009-05-18 15:28:11 +0200 |
---|---|---|
committer | Philippe Brochard <pbrochard@common-lisp.net> | 2009-05-18 15:28:11 +0200 |
commit | 0d5a90f36acc602d993075bbccaebb44e671dca6 (patch) | |
tree | 71f73266ef446b8f030f7182544ef21593318fb1 /xbindkeysrc.scm | |
parent | be5b5354a2af10580bde41d3cbf6d2c9db72bb9b (diff) | |
download | xbindkeys-0d5a90f36acc602d993075bbccaebb44e671dca6.tar.gz |
Initial import
Diffstat (limited to 'xbindkeysrc.scm')
-rw-r--r-- | xbindkeysrc.scm | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/xbindkeysrc.scm b/xbindkeysrc.scm new file mode 100644 index 0000000..1802be1 --- /dev/null +++ b/xbindkeysrc.scm @@ -0,0 +1,167 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Start of xbindkeys guile configuration ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; This configuration is guile based. +;; http://www.gnu.org/software/guile/guile.html +;; any functions that work in guile will work here. +;; see EXTRA FUNCTIONS: + +;; Version: 1.8.3 + +;; If you edit this file, do not forget to uncomment any lines +;; that you change. +;; The semicolon(;) symbol may be used anywhere for comments. + +;; To specify a key, you can use 'xbindkeys --key' or +;; 'xbindkeys --multikey' and put one of the two lines in this file. + +;; A list of keys is in /usr/include/X11/keysym.h and in +;; /usr/include/X11/keysymdef.h +;; The XK_ is not needed. + +;; List of modifier: +;; Release, Control, Shift, Mod1 (Alt), Mod2 (NumLock), +;; Mod3 (CapsLock), Mod4, Mod5 (Scroll). + + +;; The release modifier is not a standard X modifier, but you can +;; use it if you want to catch release instead of press events + +;; By defaults, xbindkeys does not pay attention to modifiers +;; NumLock, CapsLock and ScrollLock. +;; Uncomment the lines below if you want to use them. +;; To dissable them, call the functions with #f + + +;;;;EXTRA FUNCTIONS: Enable numlock, scrolllock or capslock usage +;;(set-numlock! #t) +;;(set-scrolllock! #t) +;;(set-capslock! #t) + +;;;;; Scheme API reference +;;;; +;; Optional modifier state: +;; (set-numlock! #f or #t) +;; (set-scrolllock! #f or #t) +;; (set-capslock! #f or #t) +;; +;; Shell command key: +;; (xbindkey key "foo-bar-command [args]") +;; (xbindkey '(modifier* key) "foo-bar-command [args]") +;; +;; Scheme function key: +;; (xbindkey-function key function-name-or-lambda-function) +;; (xbindkey-function '(modifier* key) function-name-or-lambda-function) +;; +;; Other functions: +;; (remove-xbindkey key) +;; (run-command "foo-bar-command [args]") +;; (grab-all-keys) +;; (ungrab-all-keys) +;; (remove-all-keys) +;; (debug) + + +;; Examples of commands: + +(xbindkey '(control shift q) "xbindkeys_show") + +;; set directly keycode (here control + f with my keyboard) +(xbindkey '("m:0x4" "c:41") "xterm") + +;; specify a mouse button +(xbindkey '(control "b:2") "xterm") + +;;(xbindkey '(shift mod2 alt s) "xterm -geom 50x20+20+20") + +;; set directly keycode (control+alt+mod2 + f with my keyboard) +(xbindkey '(alt "m:4" mod2 "c:0x29") "xterm") + +;; Control+Shift+a release event starts rxvt +;;(xbindkey '(release control shift a) "rxvt") + +;; Control + mouse button 2 release event starts rxvt +;;(xbindkey '(releace control "b:2") "rxvt") + + +;; Extra features +(xbindkey-function '(control a) + (lambda () + (display "Hello from Scheme!") + (newline))) + +(xbindkey-function '(shift p) + (lambda () + (run-command "xterm"))) + + +;; Double click test +(xbindkey-function '(control w) + (let ((count 0)) + (lambda () + (set! count (+ count 1)) + (if (> count 1) + (begin + (set! count 0) + (run-command "xterm")))))) + +;; Time double click test: +;; - short double click -> run an xterm +;; - long double click -> run an rxvt +(xbindkey-function '(shift w) + (let ((time (current-time)) + (count 0)) + (lambda () + (set! count (+ count 1)) + (if (> count 1) + (begin + (if (< (- (current-time) time) 1) + (run-command "xterm") + (run-command "rxvt")) + (set! count 0))) + (set! time (current-time))))) + + +;; Chording keys test: Start differents program if only one key is +;; pressed or another if two keys are pressed. +;; If key1 is pressed start cmd-k1 +;; If key2 is pressed start cmd-k2 +;; If both are pressed start cmd-k1-k2 or cmd-k2-k1 following the +;; release order +(define (define-chord-keys key1 key2 cmd-k1 cmd-k2 cmd-k1-k2 cmd-k2-k1) + "Define chording keys" + (let ((k1 #f) (k2 #f)) + (xbindkey-function key1 (lambda () (set! k1 #t))) + (xbindkey-function key2 (lambda () (set! k2 #t))) + (xbindkey-function (cons 'release key1) + (lambda () + (if (and k1 k2) + (run-command cmd-k1-k2) + (if k1 (run-command cmd-k1))) + (set! k1 #f) (set! k2 #f))) + (xbindkey-function (cons 'release key2) + (lambda () + (if (and k1 k2) + (run-command cmd-k2-k1) + (if k2 (run-command cmd-k2))) + (set! k1 #f) (set! k2 #f))))) + + +;; Example: +;; Shift + b:1 start an xterm +;; Shift + b:3 start an rxvt +;; Shift + b:1 then Shift + b:3 start gv +;; Shift + b:3 then Shift + b:1 start xpdf + +(define-chord-keys '(shift "b:1") '(shift "b:3") + "xterm" "rxvt" "gv" "xpdf") + +;; Here the release order have no importance +;; (the same program is started in both case) +(define-chord-keys '(alt "b:1") '(alt "b:3") + "gv" "xpdf" "xterm" "xterm") + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; End of xbindkeys guile configuration ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |