commit
78cfe75c12
2 changed files with 122 additions and 0 deletions
@ -0,0 +1,54 @@ |
||||
# bgnotify zsh plugin |
||||
|
||||
cross-platform background notifications for long running commands! Supports OSX and Ubuntu linux. |
||||
|
||||
Standalone homepage: [t413/zsh-background-notify](https://github.com/t413/zsh-background-notify) |
||||
|
||||
---------------------------------- |
||||
|
||||
## How to use! |
||||
|
||||
Just add bgnotify to your plugins list in your `.zshrc` |
||||
|
||||
- On OS X you'll need [terminal-notifer](https://github.com/alloy/terminal-notifier) |
||||
* `brew install terminal-notifier` (or `gem install terminal-notifier`) |
||||
- On ubuntu you're already all set! |
||||
- On windows you can use [notifu](http://www.paralint.com/projects/notifu/) or the Cygwin Ports libnotify package |
||||
|
||||
|
||||
## Screenshots |
||||
|
||||
**Linux** |
||||
|
||||
 |
||||
|
||||
**OS X** |
||||
|
||||
 |
||||
|
||||
**Windows** |
||||
|
||||
 |
||||
|
||||
|
||||
## Configuration |
||||
|
||||
One can configure a few things: |
||||
|
||||
- `bgnotify_threshold` sets the notification threshold time (default 6 seconds) |
||||
- `function bgnotify_formatted` lets you change the notification |
||||
|
||||
Use these by adding a function definition before the your call to source. Example: |
||||
|
||||
~~~ sh |
||||
bgnotify_threshold=4 ## set your own notification threshold |
||||
|
||||
function bgnotify_formatted { |
||||
## $1=exit_status, $2=command, $3=elapsed_time |
||||
[ $1 -eq 0 ] && title="Holy Smokes Batman!" || title="Holy Graf Zeppelin!" |
||||
bgnotify "$title -- after $3 s" "$2"; |
||||
} |
||||
|
||||
plugins=(git bgnotify) ## add to plugins list |
||||
source $ZSH/oh-my-zsh.sh ## existing source call |
||||
~~~ |
||||
@ -0,0 +1,68 @@ |
||||
#!/usr/bin/env zsh |
||||
|
||||
|
||||
## setup ## |
||||
|
||||
[[ -o interactive ]] || return #interactive only! |
||||
zmodload zsh/datetime || { print "can't load zsh/datetime"; return } # faster than date() |
||||
autoload -Uz add-zsh-hook || { print "can't add zsh hook!"; return } |
||||
|
||||
(( ${+bgnotify_threshold} )) || bgnotify_threshold=5 #default 10 seconds |
||||
|
||||
|
||||
## definitions ## |
||||
|
||||
if ! (type bgnotify_formatted | grep -q 'function'); then |
||||
function bgnotify_formatted { |
||||
## exit_status, command, elapsed_time |
||||
[ $1 -eq 0 ] && title="#win (took $3 s)" || title="#fail (took $3 s)" |
||||
bgnotify "$title" "$2" |
||||
} |
||||
fi |
||||
|
||||
currentWindowId () { |
||||
if hash notify-send 2>/dev/null; then #ubuntu! |
||||
xprop -root | awk '/NET_ACTIVE_WINDOW/ { print $5; exit }' |
||||
elif hash osascript 2>/dev/null; then #osx |
||||
osascript -e 'tell application (path to frontmost application as text) to id of front window' 2&> /dev/null || echo "0" |
||||
else |
||||
echo $EPOCHSECONDS #fallback for windows |
||||
fi |
||||
} |
||||
|
||||
bgnotify () { |
||||
if hash notify-send 2>/dev/null; then #ubuntu! |
||||
notify-send $1 $2 |
||||
elif hash terminal-notifier 2>/dev/null; then #osx |
||||
terminal-notifier -message $2 -title $1 |
||||
elif hash growlnotify 2>/dev/null; then #osx growl |
||||
growlnotify -m $1 $2 |
||||
elif hash notifu 2>/dev/null; then #cygwyn support! |
||||
notifu /m "$2" /p "$1" |
||||
fi |
||||
} |
||||
|
||||
|
||||
## Zsh hooks ## |
||||
|
||||
bgnotify_begin() { |
||||
bgnotify_timestamp=$EPOCHSECONDS |
||||
bgnotify_lastcmd=$1 |
||||
bgnotify_windowid=$(currentWindowId) |
||||
} |
||||
|
||||
bgnotify_end() { |
||||
didexit=$? |
||||
elapsed=$(( EPOCHSECONDS - bgnotify_timestamp )) |
||||
past_threshold=$(( elapsed >= bgnotify_threshold )) |
||||
if (( bgnotify_timestamp > 0 )) && (( past_threshold )); then |
||||
if [ $(currentWindowId) != "$bgnotify_windowid" ]; then |
||||
print -n "\a" |
||||
bgnotify_formatted "$didexit" "$bgnotify_lastcmd" "$elapsed" |
||||
fi |
||||
fi |
||||
bgnotify_timestamp=0 #reset it to 0! |
||||
} |
||||
|
||||
add-zsh-hook preexec bgnotify_begin |
||||
add-zsh-hook precmd bgnotify_end |
||||
Loading…
Reference in new issue