最近zshからfish shellに移行してみました。
shellは詳しくないんですが、fishはzshよりも気軽に書けそうな雰囲気があり、自分で設定を書いてみてます。
今回はzsh-notifyをfishで実装してみました。
やりかた
必要なもの
-
julienXX/terminal-notifier
brew install terminal-notifier
~/.config/fish/config.d/fish-notify.fish
function fish_notify --on-event fish_prompt
set _display_status $status
if test $CMD_DURATION
set secs (math "$CMD_DURATION / 1000")
# 3秒以上掛かったら通知する
if test $secs -ge 3
terminal-notifier -title $history[1] -message "Returned $_display_status, took $secs seconds"
end
end
end
調べたこと
すでに同じ目的のモノがあって、
こちらではpromptのデザインを決めるfunction fish_prompt
の中で実行時間$CMD_DURATION
を参照して通知するか決めていたんですが、自分はpowerlineも使いたかったので、上書きしない方法を検討しました。
zsh-notifyを見ると、add-zsh-hook
というのでコマンドが出力する前に関数をhookしていたので、同様のことをfishでもできないかと調べると--on-eventというものがあり今回はこれを使いました。