legacy-dotfiles/.xbindkeysrc.scm
2012-02-07 17:33:31 +01:00

160 lines
5.4 KiB
Scheme

;; -*- eval: (git-auto-commit-mode 1) -*-
(use-modules (ice-9 popen)
(ice-9 rdelim))
;;; Variables
(define modkey 'mod4)
(define dmenu-cmd "dmenu")
(define dmenu-args "-b -nb '#000000' -nf '#15abc3' -sb '#e0c625' -sf '#000000'")
(define dzen-pipe ())
;;; Macros
(define-macro (cmd command)
`(lambda ()
(run-command ,command)
(reset-main-binding)))
;;; Functions
(define (reset-main-binding)
"reset first binding"
(ungrab-all-keys)
(remove-all-keys)
(main-binding)
(grab-all-keys))
(define (get-tags)
(let* ((file (open-input-pipe
"TAGS=( $(herbstclient tag_status 0 | tr \":\\!.+#\" \" \") ); echo ${TAGS[@]}"))
(tags (string-split (read-line file) #\ )))
(close-port file)
tags))
(define (choose-tag prompt tags)
"Ask to choose a tag"
(let* ((file (open-input-pipe
(string-append "echo '" (string-join tags "\n")
"' | " dmenu-cmd " " dmenu-args " -p '" prompt ":'")))
(tag (read-line file)))
(close-port file)
tag))
(define (switch-tags)
"Switch to another tag"
(close-pipe dzen-pipe)
(set! dzen-pipe ())
(let* ((tags (get-tags))
(tag (choose-tag "Switch to tag" tags)))
(if (string? tag)
(begin
(if (not (member tag tags))
(system (string-append "herbstclient add " tag)))
(run-command (string-append "herbstclient use " tag))))
(reset-main-binding)))
(define (kill-tag)
"Kill a selected tag"
(let* ((tags (get-tags))
(tag (choose-tag "Kill tag" tags)))
(if (string? tag)
(begin
(if (member tag tags)
(run-command (string-append "herbstclient merge_tag " tag)))))
(reset-main-binding)))
(define (move-to-tag)
"Move selected window to another tag"
(let* ((tags (get-tags))
(tag (choose-tag "Move to tag" tags)))
(if (string? tag)
(begin
(if (not (member tag tags))
(system (string-append "herbstclient add " tag)))
(run-command (string-append "herbstclient move " tag))))
(reset-main-binding)))
;;; Maps
(define (main-binding)
"First binding"
(xbindkey `(,modkey shift "1") (string-append "dmenu_run -p 'Run:' " dmenu-args))
(xbindkey-function `(,modkey x) X-functions)
(xbindkey-function `(,modkey w) W-functions)
(xbindkey-function `(,modkey s) S-functions)
(xbindkey `(,modkey Return) "urxvt")
(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-function `(,modkey g) reset-main-binding))
(define (X-functions)
"Second binding"
(set! dzen-pipe (open-output-pipe "dzen2"))
(display "S-x" dzen-pipe)
(ungrab-all-keys)
(remove-all-keys)
(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 g) reset-main-binding)
(grab-all-keys))
(define (W-functions)
(ungrab-all-keys)
(remove-all-keys)
(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"))
(xbindkey-function `(,modkey g) reset-main-binding)
(grab-all-keys))
(define (S-functions)
(ungrab-all-keys)
(remove-all-keys)
(xbindkey-function '(o) (cmd "herbstclient cycle_monitor"))
(xbindkey-function `(,modkey g) reset-main-binding)
(grab-all-keys))
(define (P-functions)
(ungrab-all-keys)
(remove-all-keys)
(grab-all-keys))
(define (resize-map)
(ungrab-all-keys)
(remove-all-keys)
(xbindkey `(,modkey b) "herbstclient resize left +0.05")
(xbindkey `(,modkey n) "herbstclient rezise 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)
(xbindkey-function `(,modkey g) reset-main-binding)
(grab-all-keys))
;;; Main
(main-binding)