Skip to content
cross-platform background notifications for long running commands!
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
README.md
bgnotify.plugin.zsh

README.md

zsh-background-notify

cross-platform background notifications for long running commands! Supports OSX and Ubuntu linux.

screenshot 2014-11-08 14 15 12

Do you use oh-my-zsh?

RobbyRussel merged (and tweeted about it) this plugin to the main-line oh-my-zsh. If that's what you're running then just add 'bgnotify' to your .zshrc plugins list and you're all set!

Do you use Prezto?

I do too! Prezto rocks-- and works great with bg-notify! (although there's no included plugin (yet?)).

How to use!

  1. Clone the repository:
  • git clone https://github.com/t413/zsh-background-notify.git ~/.zsh-background-notify
  1. And add one line your .zshrc:
  • source $HOME/.zsh-background-notify/bgnotify.plugin.zsh
  1. Done!

Requirements:

  • On OS X you'll need terminal-notifer
    • brew install terminal-notifier (or gem install terminal-notifier)
  • On ubuntu you're already all set!
  • On windows you can use notifu or the Cygwin Ports libnotify package

Screenshots

Linux

screenshot from 2014-11-07 15 58 36

OS X

screenshot 2014-11-08 14 15 12

Windows

screenshot from 2014-11-07 15 55 00

Configuration

One can configure a few things:

  • bgnotify_threshold sets the notification threshold time (default 6 seconds)
  • function notify_formatted lets you change the notification

Use these by adding a function definition before the your call to source. Example:

bgnotify_threshold=4  ## set your own notification threshold

function notify_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";
}

source $HOME/.zsh/zsh-background-notify/bgnotify.plugin.zsh

How it works

In zsh you can add a user-hook preexec that runs before executing a command and precmd that runs just before re-prompting. Timing the difference between them gives you execution time!

To check if you're in the background we can use xprop to find the NET_ACTIVE_WINDOW in ubuntu and osascript to run a simple apple script to get the same thing (although slower).

Alternatives:

I like linking.. So here are a few similar alternatives to this script. Most are platform-specific and buggy in some way. (Sure is great to use one script on all of your systems!)

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.