Update hrunorraise
- Move implementation to scsh - Cycle through possible windows
This commit is contained in:
parent
1a2a7141ae
commit
b491df4af6
1 changed files with 49 additions and 15 deletions
|
@ -1,17 +1,51 @@
|
||||||
#!/bin/bash
|
#!/usr/local/bin/scsh \
|
||||||
# hrunorraise --- Raise a window or start a new process
|
-o srfi-2 -s
|
||||||
#
|
!#
|
||||||
# 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.
|
|
||||||
|
|
||||||
WINID=$(wmctrl -lx | grep "\.$1" | awk '{ print $1 }')
|
(define client-regexp
|
||||||
|
(rx " " (submatch "0x" (= 7 hex))))
|
||||||
|
|
||||||
if [ -n "${WINID}" ]; then
|
(define current-client
|
||||||
herbstclient jumpto "${WINID}"
|
(run/string (herbstclient -n attr clients.focus.winid)))
|
||||||
else
|
|
||||||
shift
|
(define (extract-client-id potential-client)
|
||||||
exec "$@"
|
(and-let* ((matched (regexp-search client-regexp potential-client)))
|
||||||
fi
|
(match:substring matched 1)))
|
||||||
|
|
||||||
|
(define (compact lst)
|
||||||
|
"Filter #f values from LST."
|
||||||
|
(filter (lambda (x) x) lst))
|
||||||
|
|
||||||
|
(define clients
|
||||||
|
(compact (map extract-client-id
|
||||||
|
(run/strings (herbstclient attr clients)))))
|
||||||
|
|
||||||
|
(define (client-class client-id)
|
||||||
|
(let ((path (string-append "clients." client-id ".class")))
|
||||||
|
(run/string (herbstclient -n attr ,path))))
|
||||||
|
|
||||||
|
(define clients-with-class
|
||||||
|
(map (lambda (client)
|
||||||
|
(cons client (client-class client)))
|
||||||
|
clients))
|
||||||
|
|
||||||
|
(define classed-clients
|
||||||
|
(map car
|
||||||
|
(filter (lambda (client-and-class)
|
||||||
|
(string= (cdr client-and-class)
|
||||||
|
(car command-line-arguments)))
|
||||||
|
clients-with-class)))
|
||||||
|
|
||||||
|
(define (next-client)
|
||||||
|
(and-let* ((tail (member current-client classed-clients)))
|
||||||
|
(cdr tail)))
|
||||||
|
|
||||||
|
(define new-client
|
||||||
|
(let ((next (next-client)))
|
||||||
|
(if (or (not next) (null? next))
|
||||||
|
(car (or (and (not (null? classed-clients)) classed-clients) '(#f)))
|
||||||
|
(car next))))
|
||||||
|
|
||||||
|
(if new-client
|
||||||
|
(run (herbstclient jumpto ,new-client))
|
||||||
|
(exec-epf (,@(cdr command-line-arguments))))
|
||||||
|
|
Loading…
Reference in a new issue