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

Скрипт для zsh позволяющий вывести уведомление о завершений команды, если терминал не открыт и команда выполнялась больше 10 секунд.

function active-window-id {
    echo `xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}'`
}

# end and compare timer, notify-send if needed
function notifyosd-precmd() {
    if [ ! -z "$cmd" ]; then
        cmd_end=`date +%s`
        ((cmd_time=$cmd_end - $cmd_start))
    fi
    if [ ! -z "$cmd" -a $cmd_time -gt 10 -a "$window_id_before" != "$(active-window-id)" ]; then
            kdialog --title "$cmd_basename completed" --passivepopup "\"$cmd\" took $cmd_time seconds"
            unset cmd
    fi
}
 
# make sure this plays nicely with any existing precmd
precmd_functions+=( notifyosd-precmd )
 
# get command name and start the timer
function notifyosd-preexec() {
    window_id_before=$(active-window-id)
    cmd=$1
    cmd_basename=${cmd[(ws: :)1]}
    cmd_start=`date +%s`
}
 
# make sure this plays nicely with any existing preexec
preexec_functions+=( notifyosd-preexec )

Скрипт для КДЕ, т.к. используется kdialog для вывода уведомления. Оригинал на гитхабе. Там же для гнома.

Код сохраняем в файл .notifyosd.zsh и добавляем в .zshrc строку

[ -e ~/.notifyosd.zsh ] && . ~/.notifyosd.zsh

Материалы распространяются под лицензией Creative Commons: Атрибуция — Некоммерческое использование — С сохранением условий (Attribution-NonCommercial-ShareAlike) 3.0 Unported.
Рейтинг@Mail.ru