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
e16d3e45
Commit
e16d3e45
authored
Nov 06, 2014
by
Tim O'Brien
Browse files
Add bgnotify plugin, a cross-platform background notifier!
parent
7034b01c
Changes
2
Show whitespace changes
Inline
Side-by-side
plugins/bgnotify/README.md
0 → 100644
View file @
e16d3e45
# 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!
## 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 @
e16d3e45
#!/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
notify_formatted |
grep
-q
'function'
)
;
then
echo
"using default notify_formatted"
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
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
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