From f97c9d117c873809600e5f3cf0f4df950ca1613c Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Mon, 25 Jul 2016 22:33:33 +0200 Subject: Add run-or-raise function for herbstluftwm --- herbstluftwm/usr/bin/hlwm-run-or-raise | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100755 herbstluftwm/usr/bin/hlwm-run-or-raise (limited to 'herbstluftwm/usr/bin/hlwm-run-or-raise') diff --git a/herbstluftwm/usr/bin/hlwm-run-or-raise b/herbstluftwm/usr/bin/hlwm-run-or-raise new file mode 100755 index 0000000..a06da24 --- /dev/null +++ b/herbstluftwm/usr/bin/hlwm-run-or-raise @@ -0,0 +1,43 @@ +#!/usr/local/bin/scsh -s +!# +;; hrunorraise --- Raise a window or start a new process +;; +;; Tries to find a window ID for a window with a given class value. If +;; no such window can be found treat the rest of the command line as +;; the command to start. +;; +;; This script depends on both herbstluftwm and wmctrl. + +(define (get-current-window-id) + (let* ((output (run/string (wmctrl -v -a ":ACTIVE:") (= 2 1))) + (re (rx "Using window: " + (submatch "0x" (+ hex-digit)) + "\n")) + (match (regexp-search re output))) + (match:substring match 1))) + +(define (pull-element-to-front elt collection) + (if (string= (car collection) elt) + collection + (pull-element-to-front elt (rotate collection)))) + +(define (rotate lst) + (append (cdr lst) (list (car lst)))) + +(define current-window-id + (get-current-window-id)) + +(define window-ids + (run/strings + (pipe (wmctrl -lx) + (awk "{ print $1, $3 }") + (grep ,(string-append "\\." (car command-line-arguments))) + (awk "{ print $1 }")))) + +(if (not (null? window-ids)) + (let ((next-window + (if (member current-window-id window-ids) + (cadr (pull-element-to-front current-window-id window-ids)) + (car window-ids)))) + (run (herbstclient jumpto ,next-window))) + (exec-epf (,@(cdr command-line-arguments)))) -- cgit v1.2.3-54-g00ecf