Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Oh My Zsh
Commits
78cfe75c
Commit
78cfe75c
authored
Feb 22, 2015
by
Robby Russell
Browse files
Merge pull request #3301 from t413/master
Background notifications on long-running commands
parents
aa9325a0
fd69c34e
Changes
2
Hide whitespace changes
Inline
Side-by-side
plugins/bgnotify/README.md
0 → 100644
View file @
78cfe75c
# 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**
![
screenshot from 2014-11-07 15 58 36
](
https://cloud.githubusercontent.com/assets/326829/4962187/256b465c-66da-11e4-927d-cc2fc105e31f.png
)
**OS X**
![
screenshot 2014-11-08 14 15 12
](
https://cloud.githubusercontent.com/assets/326829/4965780/19fa3eac-6795-11e4-8ed6-0355711123a9.png
)
**Windows**
![
screenshot from 2014-11-07 15 55 00
](
https://cloud.githubusercontent.com/assets/326829/4962159/a2625ca0-66d9-11e4-9e91-c5834913190e.png
)
## 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
~~~
plugins/bgnotify/bgnotify.plugin.zsh
0 → 100755
View file @
78cfe75c
#!/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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment