aboutsummaryrefslogtreecommitdiffstats
path: root/herbstluftwm/usr/bin/hlwm-switch-tags
diff options
context:
space:
mode:
Diffstat (limited to 'herbstluftwm/usr/bin/hlwm-switch-tags')
-rwxr-xr-xherbstluftwm/usr/bin/hlwm-switch-tags48
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))