#!/bin/sh
case "$1" in
"class" )
count=`xdotool search --limit 1 --class "$2" | wc -l`
i3wm_criteria="class";;
"instance" )
count=`xdotool search --limit 1 --classname "$2" | wc -l`
i3wm_criteria="instance";;
"name" )
count=`xdotool search --limit 1 --name "$2" | wc -l`
i3wm_criteria="title";;
esac
if [ "$count" -eq 0 ]; then
$3
else
i3-msg "[$i3wm_criteria=(?i)$2] focus"
fi
Суть «run or raise» («run or focus») — если программа запущена, то переключиться на неё, если нет - запустить.
Этот скрипт принимает три аргумента. Первый - критерий, по которому будем искать нужное окно (class, instance (classname) или name (title)), второй - значение поля, заданного первым аргументом, третий - команда, которую выполняем, если не найдено соответствующее окно.
Пример:
./runorraise.sh class Iceweasel iceweasel
Если есть окно с классом Iceweasel, то переключиться на него, иначе - выполнить команду iceweasel.
Приглашаю всех желающих протестировать и помочь усовершенствовать, заранее благодарен за критику, советы, предложения.
Пост на форуме i3wm, там могут появляться интересные комментарии:
https://www.reddit.com/r/i3wm/comments/3zrh29/run_or_raise_run_or_focus_imple...