Появилось необъяснимое желание видеть некоторые программы свернутыми в трей после загрузки компьютера. Проблема оказалась в том, что далеко не все разработчики заставляют себя сделать галочку "сворачивать в трей при запуске" в настройках. Но к счастью это безобразие не только нужно, но и можно исправить.
Короче говоря, был создан скрипт использующий xdotool для закрытия ненужных окошек - переключением на окно с последующим сочетанием клавиш Alt+F4. В качестве параметра требуюет заголовок окна. Для красоты после запуска скрипт ждет появления окошка, т.е. его можно начинать выполнять даже тогда, когда окна ещё нет на экране. В качестве дополнительного бонуса существует так же второй параметр (любая строка), заставляющий вернуть фокус обратно (одним своим наличием) после того, как дело сделано.
$ cat bin/close_onshow
#!/usr/bin/env bash
NAME="$1"
BACK="$2"
if [ -z "$NAME" ]; then exit; fi
get_pid() { echo "$(xdotool search --onlyvisible --name "$1" 2>/dev/null)"; }
get_cur_pid() { echo "$(xdotool getactivewindow 2>/dev/null)"; }
if [ -n "$BACK" ]; then
CUR_PID=""
while [ -z "$CUR_PID" ]; do
CUR_PID="$(get_cur_pid)"
done
fi
PID=""
while [ -z "$PID" ]; do
sleep 0.1
PID="$(get_pid "$NAME")"
done
while [ -n "$PID" ]; do
xdotool windowactivate --sync "$PID" key --window 0 --clearmodifiers alt+F4 &>/dev/null
sleep 0.1
PID="$(get_pid "$NAME")"
done
if [ -n "$BACK" ]; then
NEW_PID=""
while [ "$CUR_PID" != "$NEW_PID" ]; do
if [ -n "$(xdotool windowactivate "$CUR_PID" 2>&1)" ]; then
exit
fi
sleep 0.5
NEW_PID="$(get_cur_pid)"
done
fi
Пример использования в автозагрузке с программой "Last.fm Scrobbler":
$ cat bin/lastfm-client
#!/usr/bin/env bash
lastfm-scrobbler &>/dev/null &
close_onshow "Last.fm Scrobbler"
Пример использования второго параметра:
$ close_onshow "KCalc" "back"
Спасибо за понимание!
Отправить комментарий