diff options
Diffstat (limited to 'herbstluftwm/usr')
-rwxr-xr-x | herbstluftwm/usr/bin/hlwm-switch-tags | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/herbstluftwm/usr/bin/hlwm-switch-tags b/herbstluftwm/usr/bin/hlwm-switch-tags new file mode 100755 index 0000000..091cf2e --- /dev/null +++ b/herbstluftwm/usr/bin/hlwm-switch-tags @@ -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)) |