MacOS — Trigger Notification Center when long running commands finishes
Tags: macos, cli, command, iterm
Published: 2020-06-24 13:23:00

Before getting into the main subject, be aware that this article has been first write for the Blog of Antistatique — Web Agency in Lausanne, Switzerland. A place where I work as Full Stack Web Developer.

Feel free to read it here or check it out there: https://antistatique.net/fr/node/343

Retrieve all the code on my Gist: https://gist.github.com/Sudei/ad0c1330966522c05f504d71d29f675b

**Happy reading.**

<hr>

As a developer, I often run commands that take a while to finish:
 
 * `git pull`
 * `composer install`
 * `npm install`

Considering that I am not a very patient person, I get really bored waiting for these commands to finish, so during that time I usually switch to some other occupation such as:

 * Checking Twitter/Tech/Hacking websites,
 * Making & (sometimes) drinking coffee,
 * Playing [T-Rex Runner](http://apps.thecodepost.org/trex/trex.html) - The hidden endless running game of Chrome.

15 minutes later, I finally come back to my terminal with a cold coffee and I discover that I forgot to `cd` in the correct folder. Repeat for another 15 minutes.

**Isn't there a better way?**

> Work is hard. Distractions are plentiful. And time is short. <br/>
> — Adam Hochschild, American author, journalist, and lecturer

### Solution N°0 - The Junior Professor

Waiting by watching some Gifs right on the terminal with [Gifi](https://github.com/vdemedes/gifi).
One of my favourite solutions but not enough "cool" for some people.

### Solution N°1 - The Middle-Earth Paradigm

Making all tools faster and developers more patient.
That would work in a parallel universe where magic exists, maybe.

### Solution N°2 - The Luminous Fish Effect

Use a short script that uses `terminal-notifier` & append it to each command such as

    git pull repo@github.com | notify-me

That's pretty cool and do the job but ... I'm lazy and I don't want to append anything to my commands or predict if my command is a long-running command or not before even running it.

### Solution N°3 - The Friendship Algorithm

What about trying another approach ? Instead of trying to detect long-running commands, we could simply send a notification when the CLI is not in the foreground.
Mmmh, sounds good but is that possible ? With iTerm & OSX 10.9+, you can do this !!

1) Create a new command named `notify`:
    
    touch /usr/local/bin/notify && chmod +x /usr/local/bin/notify
    vim /usr/local/bin/notify

2) Copy and paste this system script inside:

{% gist https://gist.github.com/Wengerk/ad0c1330966522c05f504d71d29f675b file=notify.sh %}

3) Add a custom function named `f_notifyme` and expose it to iTerm using `PS1`

    vim ~/.zshrc

4) Copy and paste the function

{% gist https://gist.github.com/Wengerk/ad0c1330966522c05f504d71d29f675b file=f_notifyme %}

5) We did it ! Finally, reload the source file of your terminal `source ~/.zshrc` and enjoy !

![Enjoy your new notification cli system !](https://dev-to-uploads.s3.amazonaws.com/i/focu7lni7za3encq6j92.jpeg)
<figcaption>Enjoy your new notification cli system !</figcaption>

All images copyright of their respective owners.
Big thanks to @Antistatique for the review & @gratisography for images.