#!/usr/bin/scsh -s !# ;; hlwm-run-or-raise --- 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))) (and match (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 (hlwm-switch-to-window ,next-window))) (exec-epf (,@(cdr command-line-arguments))))