.xbindkeysrc.scm

This commit is contained in:
Tom Willemsen 2012-04-05 23:38:41 +02:00
parent 04d9496f04
commit 1e1f79b573

View file

@ -1,122 +1,135 @@
;;;_ Import ;;;_ Import
(use-modules (ice-9 popen) ;; (use-modules (ice-9 popen)
(ice-9 rdelim)) ;; (ice-9 rdelim))
(use-modules (srfi srfi-19))
;;;_ Variables ;;;_ Variables
(define browser (getenv "BROWSER"))
(define dmenu-cmd "dmenu")
(define dzen-cmd "dzen2")
(define dzen-pipe '())
(define editor (getenv "EDITOR"))
(define modkey 'mod4) (define modkey 'mod4)
(define prefix `(,modkey w))
(define terminal "urxvt")
(define date-format "~a ~d ~b ~Y ~H:~M")
(define dmenu-font (define dmenu-font
"-misc-tamsyn-medium-r-normal-*-14-*-*-*-*-*-iso8859-*") "-misc-tamsyn-medium-r-normal-*-14-*-*-*-*-*-iso8859-*")
(define dmenu-cmd "dmenu")
(define dmenu-args (define dmenu-args
(string-append (string-append
"-b -nb '#000000' -nf '#15abc3' -sb '#e0c625' -sf '#000000' -fn '" "-b -nb '#000000' -nf '#15abc3' -sb '#e0c625' -sf '#000000' -fn '"
dmenu-font "'")) dmenu-font "'"))
(define dzen-font (define dzen-font
"-misc-tamsyn-medium-r-normal-*-17-*-*-*-*-*-iso8859-*") "-misc-tamsyn-medium-r-normal-*-17-*-*-*-*-*-iso8859-*")
(define dzen-cmd "dzen2")
(define dzen-args (define dzen-args
(string-append " -fn '" dzen-font (string-append " -fn '" dzen-font
"' -x 5 -y 5 -bg '#000000' -fg '#15abc3'")) "' -x 5 -y 5 -bg '#000000' -fg '#15abc3'"))
(define dzen-pipe '())
(define previous-tag '()) ;; (define previous-tag '())
(define current-tag "default") ;; (define current-tag "default")
(define terminal "st")
;;;_ Macros ;;;_ Macros
(define-macro (cmd command) ;; (define-macro (cmd command)
`(lambda () ;; `(lambda ()
(run-command ,command) ;; (run-command ,command)
(reset-main-binding))) ;; (reset-main-binding)))
(define-macro (create-map name binding . more) ;; (define-macro (run application)
`(define (,name) ;; `(lambda ()
(ungrab-all-keys) ;; (run-command (string-append ,application " &"))
(remove-all-keys) ;; (reset-main-binding)))
(begin ,binding . ,more)
(xbindkey-function `(,modkey g) reset-main-binding) ;; (define-macro (create-map name binding . more)
(grab-all-keys))) ;; `(define (,name)
;; (ungrab-all-keys)
;; (remove-all-keys)
;; (begin ,binding . ,more)
;; (xbindkey-function `(,modkey g) reset-main-binding)
;; (grab-all-keys)))
;;;_ Functions ;;;_ Functions
(define (reset-main-binding) ;; (define (reset-main-binding)
"reset first binding" ;; "reset first binding"
(close-gui-window) ;; (close-gui-window)
(ungrab-all-keys) ;; (ungrab-all-keys)
(remove-all-keys) ;; (remove-all-keys)
(main-binding) ;; (prefix-binding)
(grab-all-keys)) ;; (grab-all-keys))
(define (get-tags) ;; (define (get-tags)
"Get a list of tags" ;; "Get a list of tags"
(let* ((file (open-input-pipe ;; (let* ((file (open-input-pipe
"TAGS=( $(herbstclient tag_status 0 | tr \":\\!.+#\" \" \") ); echo ${TAGS[@]}")) ;; "TAGS=( $(herbstclient tag_status 0 | tr \":\\!.+#\" \" \") ); echo ${TAGS[@]}"))
(tags (string-split (read-line file) #\ ))) ;; (tags (string-split (read-line file) #\ )))
(close-port file) ;; (close-port file)
(set! tags (delete current-tag tags)) ;; (set! tags (delete current-tag tags))
(set! tags (delete previous-tag tags)) ;; (set! tags (delete previous-tag tags))
(if (not (null? previous-tag)) ;; (if (not (null? previous-tag))
(append `(,previous-tag) (append tags `(,current-tag))) ;; (append `(,previous-tag) (append tags `(,current-tag)))
(append tags `(,current-tag))))) ;; (append tags `(,current-tag)))))
(define (choose-tag prompt tags) ;; (define (choose-tag prompt tags)
"Ask to choose a tag" ;; "Ask to choose a tag"
(let* ((file (open-input-pipe ;; (let* ((file (open-input-pipe
(string-append "echo '" (string-join tags "\n") ;; (string-append "echo '" (string-join tags "\n")
"' | " dmenu-cmd " " dmenu-args " -p '" prompt ":'"))) ;; "' | " dmenu-cmd " " dmenu-args " -p '" prompt ":'")))
(tag (read-line file))) ;; (tag (read-line file)))
(close-port file) ;; (close-port file)
tag)) ;; tag))
(define (switch-to-tag tag) ;; (define (switch-to-tag tag)
(let ((tags (get-tags))) ;; (let ((tags (get-tags)))
(if (string? tag) ;; (if (string? tag)
(begin ;; (begin
(if (not (member tag tags)) ;; (if (not (member tag tags))
(system (string-append "herbstclient add " tag))) ;; (system (string-append "herbstclient add " tag)))
(set! previous-tag current-tag) ;; (set! previous-tag current-tag)
(set! current-tag tag) ;; (set! current-tag tag)
(run-command (string-append "herbstclient use " tag)))))) ;; (run-command (string-append "herbstclient use " tag))))))
(define (switch-tags) ;; (define (switch-tags)
"Switch to another tag" ;; "Switch to another tag"
(let* ((tags (get-tags)) ;; (let* ((tags (get-tags))
(tag (choose-tag "Switch to tag" tags))) ;; (tag (choose-tag "Switch to tag" tags)))
(switch-to-tag tag) ;; (switch-to-tag tag)
(reset-main-binding))) ;; (reset-main-binding)))
(define (switch-and-run) ;; (define (switch-and-run)
"Ask for a command to run, switch to a tag with that name and run ;; "Ask for a command to run, switch to a tag with that name and run
the command." ;; the command."
(let* ((file (open-input-pipe ;; (let* ((file (open-input-pipe
(string-append "dmenu_pick -p 'Run:' " dmenu-args))) ;; (string-append "dmenu_pick -p 'Run:' " dmenu-args)))
(prog (read-line file))) ;; (prog (read-line file)))
(close-port file) ;; (close-port file)
(if (string? prog) ;; (if (string? prog)
(begin ;; (begin
(switch-to-tag prog) ;; (switch-to-tag prog)
(run-command prog))) ;; (run-command prog)))
(reset-main-binding))) ;; (reset-main-binding)))
(define (kill-tag) ;; (define (kill-tag)
"Kill a selected tag" ;; "Kill a selected tag"
(let* ((tags (get-tags)) ;; (let* ((tags (get-tags))
(tag (choose-tag "Kill tag" tags))) ;; (tag (choose-tag "Kill tag" tags)))
(if (string? tag) ;; (if (string? tag)
(begin ;; (begin
(if (member tag tags) ;; (if (member tag tags)
(run-command (string-append "herbstclient merge_tag " tag))))) ;; (run-command (string-append "herbstclient merge_tag " tag)))))
(reset-main-binding))) ;; (reset-main-binding)))
(define (move-to-tag) ;; (define (move-to-tag)
"Move selected window to another tag" ;; "Move selected window to another tag"
(let* ((tags (get-tags)) ;; (let* ((tags (get-tags))
(tag (choose-tag "Move to tag" tags))) ;; (tag (choose-tag "Move to tag" tags)))
(if (string? tag) ;; (if (string? tag)
(begin ;; (begin
(if (not (member tag tags)) ;; (if (not (member tag tags))
(system (string-append "herbstclient add " tag))) ;; (system (string-append "herbstclient add " tag)))
(run-command (string-append "herbstclient move " tag)))) ;; (run-command (string-append "herbstclient move " tag))))
(reset-main-binding))) ;; (reset-main-binding)))
(define (text-width font text) (define (text-width font text)
(let* ((pipe (open-input-pipe (string-append "textwidth '" font "' '" text "'"))) (let* ((pipe (open-input-pipe (string-append "textwidth '" font "' '" text "'")))
@ -141,81 +154,170 @@ the command."
(close-pipe dzen-pipe) (close-pipe dzen-pipe)
(set! dzen-pipe '()))) (set! dzen-pipe '())))
(define (notify msg)
(run-command (string-append "notify-send \"" msg "\"")))
;;;_ Maps ;;;_ Maps
(define (main-binding) ;; (define (prefix-binding)
;; "Binding of a prefix key for all commands"
;; (xbindkey-function prefix main-map))
;; (create-map main-map
;; (gui-print "S-w")
;; (xbindkey-function '(control c) (run terminal))
;; (xbindkey-function '(Return) (lambda ()
;; (system "urxvt &")
;; (reset-main-binding)))
;; (xbindkey-function '(e) (cmd editor))
;; (xbindkey-function '(control e) (cmd editor)))
;; ;; (xbindkey `(,modkey shift "1") (string-append "dmenu_run -p 'Run:' " dmenu-args))
;; ;; (xbindkey `(,modkey "0") "herbstclient remove")
;; ;; (xbindkey `(,modkey "2") "herbstclient split vertical 0.5")
;; ;; (xbindkey `(,modkey "3") "herbstclient split horizontal 0.5")
;; ;; (xbindkey-function `(,modkey x) X-function-map)
;; ;; (xbindkey-function `(,modkey w) W-function-map)
;; ;; (xbindkey-function `(,modkey s) S-function-map)
;; ;; (xbindkey `(,modkey Return) terminal)
;; ;; (xbindkey '(control alt l) "i3lock -c 000000")
;; ;; (xbindkey '(XF86HomePage) "conkeror")
;; ;; (xbindkey '(XF86Mail) "mutt")
;; ;; (xbindkey '(XF86AudioPlay) "mpc toggle")
;; ;; (xbindkey '(XF86AudioStop) "mpc stop")
;; ;; (xbindkey '(XF86AudioMute) "amixer sset Master toggle")
;; ;; (xbindkey '(XF86AudioLowerVolume) "mcp volume -5")
;; ;; (xbindkey '(XF86AudioRaiseVolume) "mcp volume +5")
;; ;; (xbindkey '(XF86AudioPrev) "mpc prev")
;; ;; (xbindkey '(XF86AudioNext) "mpc next")
;; ;; (xbindkey '(XF86Tools) "ncmpcpp")
;; ;; (xbindkey `(,modkey b) "herbstclient focus left")
;; ;; (xbindkey `(,modkey n) "herbstclient focus down")
;; ;; (xbindkey `(,modkey p) "herbstclient focus up")
;; ;; (xbindkey `(,modkey f) "herbstclient focus right"))
;; (create-map X-function-map
;; (gui-print "S-x")
;; (xbindkey-function '(b) switch-tags)
;; (xbindkey-function `(,modkey c) (cmd "herbstclient quit"))
;; (xbindkey-function `(,modkey r) (cmd "herbstclient reload"))
;; (xbindkey-function '(k) kill-tag)
;; (xbindkey-function '("0") (cmd "herbstclient remove"))
;; (xbindkey-function '("3") (cmd "herbstclient split horizontal 0.5"))
;; (xbindkey-function '("2") (cmd "herbstclient split vertical 0.5"))
;; (xbindkey-function '(space) (cmd "herbstclient cycle_layout 1"))
;; (xbindkey-function '(f) (cmd "herbstclient floating toggle"))
;; (xbindkey-function '(shift f) (cmd "herbstclient fullscreen toggle"))
;; (xbindkey-function '(p) (cmd "herbstclient pseudotile toggle"))
;; (xbindkey-function '(r) resize-map)
;; (xbindkey-function '(m) move-to-tag)
;; (xbindkey-function `(,modkey f) switch-and-run))
;; (create-map W-function-map
;; (gui-print "S-w")
;; (xbindkey-function '(k) (cmd "herbstclient close"))
;; (xbindkey-function '(w) (cmd "herbstclient cycle"))
;; (xbindkey-function '(o) (cmd "herbstclient cycle_all +1"))
;; (xbindkey-function '(b) (cmd "herbstclient focus left"))
;; (xbindkey-function '(n) (cmd "herbstclient focus down"))
;; (xbindkey-function '(p) (cmd "herbstclient focus up"))
;; (xbindkey-function '(f) (cmd "herbstclient focus right"))
;; (xbindkey-function '(shift b) (cmd "herbstclient shift left"))
;; (xbindkey-function '(shift n) (cmd "herbstclient shift down"))
;; (xbindkey-function '(shift p) (cmd "herbstclient shift up"))
;; (xbindkey-function '(shift f) (cmd "herbstclient shift right")))
;; (create-map S-function-map
;; (gui-print "S-s")
;; (xbindkey-function '(o) (cmd "herbstclient cycle_monitor")))
;; (create-map resize-map
;; (gui-print "Resizing")
;; (xbindkey `(,modkey b) "herbstclient resize left +0.05")
;; (xbindkey `(,modkey n) "herbstclient resize down +0.05")
;; (xbindkey `(,modkey p) "herbstclient resize up +0.05")
;; (xbindkey `(,modkey f) "herbstclient resize right +0.05")
;; (xbindkey-function '(Return) reset-main-binding))
;;;_ Main
;; (prefix-binding)
;; ;;;_ Local Variables
;; ;; Local Variables:
;; ;; eval: (git-auto-commit-mode 1)
;; ;; End:
(define (first-binding)
"First binding" "First binding"
(xbindkey `(,modkey shift "1") (string-append "dmenu_run -p 'Run:' " dmenu-args)) (xbindkey-function prefix second-binding)
(xbindkey `(,modkey "0") "herbstclient remove") (xbindkey '(control mod1 l) "i3lock -c 000000")
(xbindkey `(,modkey "2") "herbstclient split vertical 0.5") (xbindkey `(,modkey period) "herbstclient cycle_monitor 1")
(xbindkey `(,modkey "3") "herbstclient split horizontal 0.5") (xbindkey `(,modkey comma) "herbstclient cycle_monitor -1")
(xbindkey-function `(,modkey x) X-function-map) (xbindkey `(,modkey s) "herbstclient split vertical 0.5")
(xbindkey-function `(,modkey w) W-function-map) (xbindkey `(,modkey shift s) "herbstclient split horizontal 0.5")
(xbindkey-function `(,modkey s) S-function-map) (xbindkey `(,modkey q) "herbstclient remove")
(xbindkey `(,modkey Return) terminal) (xbindkey `(,modkey o) "herbstclient cycle_all")
(xbindkey '(control alt l) "i3lock -c 000000") (xbindkey `(,modkey control b) "herbstclient resize left +0.05")
(xbindkey '(XF86HomePage) "conkeror") (xbindkey `(,modkey control n) "herbstclient resize down +0.05")
(xbindkey '(XF86Mail) "mutt") (xbindkey `(,modkey control p) "herbstclient resize up +0.05")
(xbindkey '(XF86AudioPlay) "mpc toggle") (xbindkey `(,modkey control f) "herbstclient resize right +0.05")
(xbindkey '(XF86AudioStop) "mpc stop")
(xbindkey '(XF86AudioMute) "amixer sset Master toggle")
(xbindkey '(XF86AudioLowerVolume) "mcp volume -5")
(xbindkey '(XF86AudioRaiseVolume) "mcp volume +5")
(xbindkey '(XF86AudioPrev) "mpc prev")
(xbindkey '(XF86AudioNext) "mpc next")
(xbindkey '(XF86Tools) "ncmpcpp")
(xbindkey `(,modkey b) "herbstclient focus left") (xbindkey `(,modkey b) "herbstclient focus left")
(xbindkey `(,modkey n) "herbstclient focus down") (xbindkey `(,modkey n) "herbstclient focus down")
(xbindkey `(,modkey p) "herbstclient focus up") (xbindkey `(,modkey p) "herbstclient focus up")
(xbindkey `(,modkey f) "herbstclient focus right") (xbindkey `(,modkey f) "herbstclient focus right")
(xbindkey-function `(,modkey g) reset-main-binding)) (xbindkey `(,modkey shift b) "herbstclient shift left")
(xbindkey `(,modkey shift n) "herbstclient shift down")
(xbindkey `(,modkey shift p) "herbstclient shift up")
(xbindkey `(,modkey shift f) "herbstclient shift right")
(xbindkey `(,modkey space) "herbstclient cycle_layout 1"))
(create-map X-function-map (define (reset-first-binding)
(gui-print "S-x") "reset first binding"
(xbindkey-function '(b) switch-tags) (ungrab-all-keys)
(xbindkey-function `(,modkey c) (cmd "herbstclient quit")) (remove-all-keys)
(xbindkey-function `(,modkey r) (cmd "herbstclient reload")) (first-binding)
(xbindkey-function '(k) kill-tag) (grab-all-keys))
(xbindkey-function '("0") (cmd "herbstclient remove"))
(xbindkey-function '("3") (cmd "herbstclient split horizontal 0.5"))
(xbindkey-function '("2") (cmd "herbstclient split vertical 0.5"))
(xbindkey-function '(space) (cmd "herbstclient cycle_layout 1"))
(xbindkey-function '(f) (cmd "herbstclient floating toggle"))
(xbindkey-function '(shift f) (cmd "herbstclient fullscreen toggle"))
(xbindkey-function '(p) (cmd "herbstclient pseudotile toggle"))
(xbindkey-function '(r) resize-map)
(xbindkey-function '(m) move-to-tag)
(xbindkey-function `(,modkey f) switch-and-run))
(create-map W-function-map (define (run-terminal)
(gui-print "S-w") "Run the specified terminal program."
(xbindkey-function '(k) (cmd "herbstclient close")) (run-command terminal)
(xbindkey-function '(w) (cmd "herbstclient cycle")) (reset-first-binding))
(xbindkey-function '(o) (cmd "herbstclient cycle_all +1"))
(xbindkey-function '(b) (cmd "herbstclient focus left"))
(xbindkey-function '(n) (cmd "herbstclient focus down"))
(xbindkey-function '(p) (cmd "herbstclient focus up"))
(xbindkey-function '(f) (cmd "herbstclient focus right"))
(xbindkey-function '(shift b) (cmd "herbstclient shift left"))
(xbindkey-function '(shift n) (cmd "herbstclient shift down"))
(xbindkey-function '(shift p) (cmd "herbstclient shift up"))
(xbindkey-function '(shift f) (cmd "herbstclient shift right")))
(create-map S-function-map (define (run-browser)
(gui-print "S-s") "Run the specified browser."
(xbindkey-function '(o) (cmd "herbstclient cycle_monitor"))) (run-command browser)
(reset-first-binding))
(create-map resize-map (define (run-editor)
(gui-print "Resizing") "Run the specified terminal editor."
(xbindkey `(,modkey b) "herbstclient resize left +0.05") (run-command editor)
(xbindkey `(,modkey n) "herbstclient resize down +0.05") (reset-first-binding))
(xbindkey `(,modkey p) "herbstclient resize up +0.05")
(xbindkey `(,modkey f) "herbstclient resize right +0.05")
(xbindkey-function '(Return) reset-main-binding))
;;;_ Main (define (banish)
(main-binding) "Banish the mouse cursor to the bottom-right corner of the screen."
(run-command "xte 'mousemove 4000 1100'")
(reset-first-binding))
;;;_ Local Variables (define (showtime)
;; Local Variables: "Show the time."
;; eval: (git-auto-commit-mode 1) (notify (date->string (current-date) date-format))
;; End: (reset-first-binding))
(define (exec)
"Run a program."
(run-command (string-append "dmenu_run -p 'Run:' " dmenu-args))
(reset-first-binding))
(define (second-binding)
"Second binding"
(ungrab-all-keys)
(remove-all-keys)
(xbindkey-function 'c run-terminal)
(xbindkey-function 'e run-editor)
(xbindkey-function 'w run-browser)
(xbindkey-function 'z banish)
(xbindkey-function 'a showtime)
(xbindkey-function '(shift "1") exec)
(xbindkey-function '(control g) reset-first-binding)
(grab-all-keys))
(first-binding)