Tips & tricks — Уведомление о завершении задачи в zsh
Иногда в терминале выполняются какие-то долгие задачи (обновление, компиляция и т.д.). Очень лениво время от времени переключаться на них, чтоб проверить не закончились ли они. К счастью можно предоставить возможность системе уведомить пользователя об окончании работы команды.
Для этого нам понадобится zsh, «хороший» эмулятор терминала и оконный менеджер, поддерживающий уведомления об активности в окне (появлении visible hint bit в свойстве WM_HINTS окна).
От эмулятора терминала требуется, чтоб он при выводе символа \a выставлял нужный свойство. В случае urxvt это делается выставлением urxvt.urgentOnBell в true. Например таким образом:
Теперь если в новом терминале выполнить $ sleep 1; echo -e '\a' и переключить окно, то что-нибудь случится :) Например в KDE, должна начать мигать кнопка на панели задач (надеюсь кто-нибудь понял, что я имел в виду этой фразой). Если ничего не произошло, то это плохо, и надо разбираться с конкретным WM.
Теперь хотелось бы в .zshrc объявить функцию postexec() { echo -ne '\a' }, которая бы выполнялась после окончания работы команды, обрадоваться. Но к сожалению такой функции нет, зато есть функция precmd, которая выполняется перед каждой командой.
После добавления в .zshrc строчки:
Если эта функция уже объявлена, то нужно просто добавить echo -ne '\a' в начало.
Ну и все, сохраняем изменения, запускаем новый терминал и проверяем выполнением sleep 1 и переключением на другое окно.
Для этого нам понадобится zsh, «хороший» эмулятор терминала и оконный менеджер, поддерживающий уведомления об активности в окне (появлении visible hint bit в свойстве WM_HINTS окна).
От эмулятора терминала требуется, чтоб он при выводе символа \a выставлял нужный свойство. В случае urxvt это делается выставлением urxvt.urgentOnBell в true. Например таким образом:
$ echo "urxvt.urgentOnBell: true" >> ~/.Xdefaults; xrdb ~/.XdefaultsТеперь если в новом терминале выполнить $ sleep 1; echo -e '\a' и переключить окно, то что-нибудь случится :) Например в KDE, должна начать мигать кнопка на панели задач (надеюсь кто-нибудь понял, что я имел в виду этой фразой). Если ничего не произошло, то это плохо, и надо разбираться с конкретным WM.
Теперь хотелось бы в .zshrc объявить функцию postexec() { echo -ne '\a' }, которая бы выполнялась после окончания работы команды, обрадоваться. Но к сожалению такой функции нет, зато есть функция precmd, которая выполняется перед каждой командой.
После добавления в .zshrc строчки:
precmd() { echo -ne '\a' }Если эта функция уже объявлена, то нужно просто добавить echo -ne '\a' в начало.
Ну и все, сохраняем изменения, запускаем новый терминал и проверяем выполнением sleep 1 и переключением на другое окно.







