Изменить статус рабочей области / окна i3wm на срочное
У меня есть сценарий оболочки, который я запускаю на удаленном сервере, и я хотел бы, чтобы состояние окна i3 стало неотложным, чтобы кнопка рабочей области стала красной. Как я могу этого достичь?
1 ответ
Многие терминалы могут установить флаг срочности на своих окнах, если символ звонка - \a
- печатается. Так
me-runs-long-time.sh ; echo -e '\a'
Должен сделать свое дело. Помните, что i3 немедленно удалит флаг срочности, когда окно находится в фокусе или когда оно уже сфокусировано. Таким образом, вы можете проверить, работает ли это, запустив
sleep 3; echo -e '\a'
и сразу же сфокусировать другое окно.
Примечание: терминал может быть необходимо настроить для этого поведения:
За
rxvt-unicode
ресурсurgentOnBell
должен быть установлен вTrue
, Заxterm
это ресурсbellIsUrgent
, Вы можете установить ресурсы в~/.Xresources
или же~/.Xdefaults
в зависимости от вашего распространения.XTerm*bellIsUrgent: True URxvt.urgentOnBell: True
Либо беги
xrdb ~/.Xresources
или перезапустите сеанс X, чтобы активировать изменения (для новых терминалов).За
termite
это можно включить, установивurgent_on_bell
возможностьtrue
в своей конфигурации -~/.config/termite/config
:[options] urgent_on_bell = true
Это будет немедленно работать на любом новом окне термитов.
Конечно, приведенное выше решение зависит от того, не забыли ли вы добавить ; echo -e '\a'
каждый раз. Есть несколько способов автоматизировать это. Например:
Самый простой выход - просто вывести
\a
в соответствующее время в самом сценарии. Это, конечно, требует права записи и должно быть сделано для каждого скрипта отдельно.Если вы используете
zsh
Вы можете добавить следующее к вашему~/.zshrc
(на удаленной машине):# this may already be in your ~/.zshrc autoload -Uz add-zsh-hook # duration in seconds after which a bell should be sent typeset -i LONGRUNTIME=60 # function to save time at which a command was started save_starttime () { starttime=$SECONDS } # function to print \a if the command took longer than LONGRUNTIME set_longrunning_alert () { if ((LONGRUNTIME > 0 && SECONDS - starttime >= LONGRUNTIME)); then print "\a" fi } # run save_starttime before a command is executed add-zsh-hook preexec save_starttime # run set_longrunning_alert after a command finishes (before the prompt) add-zsh-hook precmd set_longrunning_alert
Это автоматически напечатает символ звонка, если команда заняла более одной минуты.
Если вы используете
bash
Вы можете использовать следующее на удаленной машине.PROMPT_COMMAND='echo -e "\a"'
Это будет работать
echo -e "\a"
каждый раз перед выдачей первичной подсказки. Хотя это будет помечать окно как срочное после каждой команды, в большинстве случаев оно не должно быть заметным, поскольку не будет сохранять флаг срочности на сфокусированных окнах.
Если вы используете настройки для bash
или же zsh
также на вашем локальном компьютере, вы также будете уведомлены в случае обрыва соединения SSH (в случае zsh
только если он умрет после LONGRUNTIME
секунд). Предполагая, конечно, что вы начинаете ssh
из твоей раковины.