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=''
|
||||
# Lock the screen with C-M-l.
|
||||
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
|
||||
# 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