Закрываем окошки из консоли

Изображение пользователя aslok.

Появилось необъяснимое желание видеть некоторые программы свернутыми в трей после загрузки компьютера. Проблема оказалась в том, что далеко не все разработчики заставляют себя сделать галочку "сворачивать в трей при запуске" в настройках. Но к счастью это безобразие не только нужно, но и можно исправить.

Короче говоря, был создан скрипт использующий 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"

Спасибо за понимание!

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры