Add tag swapping script
This commit is contained in:
parent
b0a3ff8fdc
commit
ed7cd3dc4a
2 changed files with 50 additions and 0 deletions
|
@ -75,6 +75,8 @@ hc keybind $Mod-t spawn hlwm-run-or-raise Emacs \
|
||||||
emacsclient --create-frame --alternate-editor=''
|
emacsclient --create-frame --alternate-editor=''
|
||||||
# Lock the screen with C-M-l.
|
# Lock the screen with C-M-l.
|
||||||
hc keybind Control-Mod1-l spawn i3lock --color 000000
|
hc keybind Control-Mod1-l spawn i3lock --color 000000
|
||||||
|
# Swap visible tags
|
||||||
|
hc keybind $Mod-x spawn hlwm-switch-tags
|
||||||
|
|
||||||
# Since I use the colemak keyboard layout, hjkl doesn't make much
|
# Since I use the colemak keyboard layout, hjkl doesn't make much
|
||||||
# sense. I use neio instead since that is almost in the same place
|
# sense. I use neio instead since that is almost in the same place
|
||||||
|
|
48
herbstluftwm/usr/bin/hlwm-switch-tags
Executable file
48
herbstluftwm/usr/bin/hlwm-switch-tags
Executable file
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/local/bin/scsh \
|
||||||
|
-o define-record-types -s
|
||||||
|
!#
|
||||||
|
;; hlwm-switch-tags --- Switch the currently visible tags
|
||||||
|
;;
|
||||||
|
;; Given there are two monitors, get the active tag for each and
|
||||||
|
;; switch them around. This saves me the trouble of having to switch
|
||||||
|
;; them manually.
|
||||||
|
;;
|
||||||
|
;; This script depends on herbstluftwm.
|
||||||
|
|
||||||
|
(define-record-type monitor :monitor
|
||||||
|
(monitor id tag focus)
|
||||||
|
monitor?
|
||||||
|
(id monitor-id)
|
||||||
|
(tag monitor-tag)
|
||||||
|
(focus monitor-focused?))
|
||||||
|
|
||||||
|
(define-record-discloser :monitor
|
||||||
|
(lambda (m) `(monitor ,(monitor-id m) ,(monitor-tag m) ,(monitor-focused? m))))
|
||||||
|
|
||||||
|
(define (make-monitor str)
|
||||||
|
(let* ((re (rx bos (submatch (+ digit))
|
||||||
|
": "
|
||||||
|
(+ digit) "x" (+ digit) "+" (+ digit) "+" (+ digit)
|
||||||
|
" with tag \"" (submatch (+ any)) "\""
|
||||||
|
(submatch (? " [FOCUS]")) eos))
|
||||||
|
(match (regexp-search re str)))
|
||||||
|
(monitor (string->number (match:substring match 1))
|
||||||
|
(match:substring match 2)
|
||||||
|
(> (string-length (match:substring match 3)) 0))))
|
||||||
|
|
||||||
|
(define monitors
|
||||||
|
(map make-monitor (run/strings (herbstclient list_monitors))))
|
||||||
|
|
||||||
|
(run (herbstclient lock))
|
||||||
|
|
||||||
|
(run (herbstclient add switch_tmp))
|
||||||
|
(run (herbstclient focus_monitor ,(monitor-id (car monitors))))
|
||||||
|
(run (herbstclient use switch_tmp))
|
||||||
|
(run (herbstclient focus_monitor ,(monitor-id (cadr monitors))))
|
||||||
|
(run (herbstclient use ,(monitor-tag (car monitors))))
|
||||||
|
(run (herbstclient focus_monitor ,(monitor-id (car monitors))))
|
||||||
|
(run (herbstclient use ,(monitor-tag (cadr monitors))))
|
||||||
|
(run (herbstclient focus_monitor ,(monitor-id (find monitor-focused? monitors))))
|
||||||
|
(run (herbstclient merge_tag switch_tmp))
|
||||||
|
|
||||||
|
(run (herbstclient unlock))
|
Loading…
Reference in a new issue