Since we decided to open source Watson — our internal tool to track and report our activity — we had great feedback and contributions from the community. Some contributions are not documented nor shipped with Watson, so let’s enlight them today!

Logo Watson

In a previous post, we introduced Watson our open source time-tracker and how we use it at TailorDev. After a few discussions with Watson’s users, it appears that Watson has two major weaknesses that needed to be addressed: i. running complex commands efficiently, and, ii. being visually notified that Watson is (not) running. Fortunately, the community took care of that by implementing shell completion and various notifiers.

Watson’s completion

At this time, Watson’s completion is available for bash and zsh. If your favorite shell is missing, please submit a pull-request!

Bash

Bash completion has been proposed by Christopher Arndt and it does what you expect from a command line tool completion: it completes (sic!) commands, command options, projects, tags and frame IDs. Let’s see it in action!

asciicast

To install it, follow these steps:

$ mkdir $HOME/.bash_completion.d
$ wget \
https://raw.githubusercontent.com/TailorDev/Watson/master/watson.completion \
-O $HOME/.bash_completion.d/watson
$ echo "source $HOME/.bash_completion.d/watson" >> $HOME/.bashrc
# Restart your shell or
$ source $HOME/.bashrc

Replace $HOME/.bash_completion.d by /etc/bash_completion.d or any path where you store completion files.

Zsh

Zsh completion is a collaborative work from Grégoire Détrez and James Dinsdale. Before having seen it in action I was a bash-guy, and this made me switch to zsh. You don’t believe me? Take a look at this:

asciicast

Pretty cool, no?

This is still a work in progress, but if you cannot wait to test it, get the completion file from Grégoire’s fork via:

$ wget
https://raw.githubusercontent.com/gdetrez/Watson/zsh-completion/watson.zsh-completion \
-O /usr/local/share/zsh/site-functions/_watson

Similarly to bash, the proposed path can be any path from your fpath.

Note that yout need to make sure that your zsh configuration enables compinit. If not, add this to your $HOME/.zshrc:

autoload -Uz compinit && compinit

Dmenu

Scott Hansen proposed a dmenu script to quickly start and stop Watson from your desktop.

Watson’s notifications

Now that we have shell completion, we are able to quickly start, stop and edit Watson’s frames. Good. But, there is still a huge missing feature: how can I train myself not to forget to start or stop Watson?

Add Watson’s status to your prompt

If you want something not so intrusive, why not adding a red/green light to your prompt like the following?

Watson prompt

To do so, follow this gist:

Add a cron notification task

The underlying idea is pretty simple: periodically look for Watson’s status (cron FTW) and send a desktop notification to the user.

Bash flavored

Yannick Loiseau proposed a really concise bash notifier written in bash:

Python flavored

Do you prefer python? There is Christopher Arndt for that :) (Yes, him again :heart:). He proposed the same approach but written in python. Check this.

Cross-platform system tray

The previous cron strategy is simple and efficient, but unfortunately since it depends on GNU/Linux notification libraries, it cannot be run on Mac OSX or other non-*nix systems. After digging around for a universal notification system, I came across the idea that a cross-platform system tray is a relevant solution. As I am not a big fan of GTK or Qt programing, I started to look at the Electron project and particularly menubar, a “high level way to create menubar desktop applications with electron”.

I have started to play with it and even if we are at the early-stage of what it could be, just for you, here is a quick preview:

Watson system tray

As you expect the tray icon changes depending on Watson’s status and clicking on the icon gives you detailed information about the current frame and a running timer.


Please share your thoughts about these tools and do not hesitate to ping us on Twitter.