From ed7cd3dc4a91d42fb15e503ebcd850ec81574fd4 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Tue, 27 Sep 2016 02:43:45 +0200 Subject: Add tag swapping script --- herbstluftwm/usr/bin/hlwm-switch-tags | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100755 herbstluftwm/usr/bin/hlwm-switch-tags (limited to 'herbstluftwm/usr') 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)) -- cgit v1.2.3-54-g00ecf