У меня есть небольшой сценарий оболочки, который играет немного звона и отображает уведомление всякий раз, когда я получаю новое письмо.
Проблема в том, что этот сценарий оболочки может быть вызван в любое время - в том числе, когда я смотрю DVD / видео в полноэкранном режиме с довольно активным звуком - что довольно раздражает. ]
Я хотел бы усовершенствовать этот скрипт, чтобы он мог определять, находится ли приложение в полноэкранном режиме. Я знаю, что это должно быть как-то возможно, потому что уведомления не отображаются при таких обстоятельствах.
Какую команду я могу использовать?
Вид крайнего перегиба как сценарий оболочки, но он должен сделать свое дело:
#!/bin/bash
WINDOW=$(echo $(xwininfo -id $(xdotool getactivewindow) -stats | \
egrep '(Width|Height):' | \
awk '{print $NF}') | \
sed -e 's/ /x/')
SCREEN=$(xdpyinfo | grep -m1 dimensions | awk '{print $2}')
if [ "$WINDOW" = "$SCREEN" ]; then
exit 0
else
exit 1
fi
Тогда вы можете проверить это:
if is-full-screen ; then echo yup, full screen ; fi
Как указано ниже, Сначала нужно установить xdotool:
sudo apt-get install xdotool
Я чувствую себя обязанным сделать несколько комментариев (упрощения):
Вышеупомянутый код оболочки использует антишаблон ... | grep | awk
. Каждый раз, когда Вы видите grep | awk
, можно заменить его единственным вызовом awk
. Я часто вижу этот антишаблон в сообщениях/форумах справки онлайн. Мой смысл состоит в том, что большинство знает это и что в реальном коде, большинство людей знает лучше, но что по некоторым причинам он просматривается как педагогически выше, чтобы записать этому этот путь (т.е. как grep | awk
. Но меня все еще раздражает видеть его.
Я думаю, что вышеупомянутая идея может быть упрощена до:
# Initializations section of your shell script:
root_geo="$(xwininfo -root | grep geometry)"
# In the loop:
[ "$(xwininfo -id $(xdotool getactivewindow) | grep geometry)" = "$root_geo" ] && echo "Running fullscreen"