Move a couple of keybindings to herbstluftwm

This commit is contained in:
Tom Willemse 2022-07-22 21:12:45 -07:00
parent 7957b236de
commit e8cdf76fbf
5 changed files with 84 additions and 9 deletions

View file

@ -143,6 +143,9 @@ nyxt: nyxt/.config/nyxt/init.lisp
%.zwc: %
zsh -c "zcompile $@ $^"
check:
$(SCHEME_IMPLEMENTATION) --no-auto-compile test.scm
# Local Variables:
# outline-regexp: "##+"
# End:

View file

@ -255,9 +255,7 @@
(service home-xbindkeys-service-type
(home-xbindkeys-configuration
(keybindings
'(((mod4 shift q) . "herbstclient quit")
((mod4 shift e) . "herbstclient reload")
((mod4 k) . "hersbtclient close")
'(((mod4 k) . "hersbtclient close")
((mod4 mod1 k) . "herbstclient remove")
((mod4 Return) . "herbstclient spawn kitty")
((mod4 t) . "herbstclient spawn hlwm-run-or-raise \"\\(URxct\\|Hyper\\|kitty\\)\" kitty")
@ -305,10 +303,13 @@
(service home-herbstluftwm-service-type
(home-herbstluftwm-configuration
(tags '(dev web game))
(key-bindings
'(("s-S-q" . "quit")
("s-S-e" . "reload")))
(mouse-bindings
'(("Mod4-Button1" . "move")
("Mod4-Button2" . "zoom")
("Mod4-Button3" . "resize")))
'(("s-Button1" . "move")
("s-Button2" . "zoom")
("s-Button3" . "resize")))
(settings
'((default_frame_layout . 2)
(frame_border_active_color . "#3d3d3d")

View file

@ -8,6 +8,7 @@
#:use-module (guix gexp)
#:use-module (oni home services xinit)
#:use-module (oni gexp)
#:use-module (oni kbd)
#:use-module (srfi srfi-1)
#:export (home-herbstluftwm-service-type
@ -17,6 +18,9 @@
(package
(package herbstluftwm)
"Package use for setting herbstluftwm")
(key-bindings
(alist '())
"Key bindings")
(mouse-bindings
(alist '())
"Mouse bindings")
@ -48,17 +52,27 @@
(define (add-herbstluftwm-packages config)
(list (home-herbstluftwm-configuration-package config) zsh))
(define (build-keybindings bindings)
(append
(list "herbstclient keyunbind --all\n")
(map (lambda (binding)
(format #f "herbstclient keybind ~a ~a\n"
(kbd (car binding)) (cdr binding)))
bindings)))
(define (home-herbstluftwm-autostart-file config)
(apply mixed-executable-file
"autostart"
"#!" zsh "/bin/zsh\n"
"herbstclient emit_hook reload\n"
"herbstclient keyunbind --all\n"
(let ((tags (home-herbstluftwm-configuration-tags config)))
(append (list "herbstclient mouseunbind --all\n")
(append (build-keybindings
(home-herbstluftwm-configuration-key-bindings config))
(list "herbstclient mouseunbind --all\n")
(map (lambda (binding)
(format #f "herbstclient mousebind ~a ~a\n"
(car binding) (cdr binding)))
(kbd (car binding)) (cdr binding)))
(home-herbstluftwm-configuration-mouse-bindings config))
(map (lambda (setting)
(format #f "herbstclient set ~s ~s\n"

29
oni/kbd.scm Normal file
View file

@ -0,0 +1,29 @@
(define-module (oni kbd)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
#:export (kbd))
(define (convert-modifier mod)
(match mod
("C" "Ctrl")
("M" "Mod1")
("S" "Shift")
("s" "Mod4")))
(define (convert-key key)
(match key
("RET" "Return")
("SPC" "space")
("<backspace>" "BackSpace")
(_ key)))
(define (kbd str)
(let ((parts (string-split str #\-)))
(string-join
(fold-right (lambda (key previous)
(if (null? previous)
(list (convert-key key))
(cons (convert-modifier key) previous)))
'() parts)
"-")))

28
test/kbd.scm Normal file
View file

@ -0,0 +1,28 @@
(define-module (test kbd)
#:use-module (srfi srfi-64)
#:use-module (oni kbd))
(test-begin "kbd-test")
(test-equal "Any letter alone is untouched"
"s" (kbd "s"))
(test-equal "The `s' modifier is converted to `Mod4'"
"Mod4-s" (kbd "s-s"))
(test-equal "The `S' modifier is converted to `Shift'"
"Shift-s" (kbd "S-s"))
(test-equal "The `M' modifier is converted to `Mod1'"
"Mod1-x" (kbd "M-x"))
(test-equal "The `C' modifier is converted to `Ctrl'"
"Ctrl-f" (kbd "C-f"))
(test-equal "Two modifiers can be combined"
"Mod4-Shift-q" (kbd "s-S-q"))
(test-equal "Three modifiers can be combined"
"Mod4-Shift-Ctrl-f" (kbd "s-S-C-f"))
(test-equal "The `RET' key is converted to `Return'"
"Mod4-Return" (kbd "s-RET"))
(test-equal "The `SPC' key is converted to `space'"
"Ctrl-space" (kbd "C-SPC"))
(test-equal "The `<backspace>' key is converted to `BackSpace'"
"Mod1-BackSpace" (kbd "M-<backspace>"))
(test-end "kbd-test")