A menu launcher for i3 - Snapfly

I'm restricted to a small laptop screen these days, making maximising screen real estate a big concern. Recently, I've been using the i3 tiling window manager which is powerful, configurable and light-weight. Without the full desktop environment of GNOME or KDE, there are a few different ways of launching applications:

i3 window manager with snapfly running in the notification area

i3 window manager and furthest left in notification area snapfly

The most common approach is a text based launcher. These put up a box for you to type the name of the application you want executed. This works very well for launching the applications we commonly use. However, I can't always remember the right name for applications I use less often: for example I can always remember what Shotwell does but the name just never comes to mind! And, sometimes it's just nice to see all the different applications on my system - so I explore some of the things that are available. For that we need an old-fashioned menu launcher.

I'm not sure if menu launcher is the right name, but basically something that will show a browsable menu of all the applications that are loaded onto the system [2]. There are few options in the Ubuntu archive, classicmenu-indicator, deskmenu and python-gmenu. But, after searching around I found Snapfly and have been testing it out.

Snapfly is a menu launcher that's available on GitHub. According to the notes it started as a fork of adeskmenu [3], over time the developer (Alexander Maslov) rewrote large parts of it. On github you'll see the project is pretty dormant, but that doesn't concern me too much as drawing menus on the screen isn't a fast moving area!

Snapflys main feature is that it can either be run to display an icon in the notification area (the system tray) in the same way as menutray [4] or it can run as a daemon and set to display as an overlay window when called with a keyboard short cut. To install it from GitHub either clone it or download the zip file:

cd ~/tmp
git clone https://github.com/drakmail/snapfly.git

It can be run directly from the source directory, just do ./snapfly and it will show up in the system tray area. For brief testing running it directly is fine, to install it we have to build the Debian / Ubuntu package:

$ cd snapfly/package
$ ./make_packages.sh
i3 window manager with snapfly running in the notification area

Snapfly floating menu lets you browse applications by category

This may require you to install some support packages, but in essence it just creates the source files and then runs dpkg-buildpackage. Having built and installed the package there are two ways of running it:

To use the system tray we have to start Snapfly during i3's start-up. Edit the .i3/config file and add the following:

exec --no-start-up-id snapfly

Then restart i3 and it will appear in the notification area.

Alternatively, it can be run in daemon mode and bound to display when a keyboard short-cut is used. We already have it running as a daemon, so to stop it appearing in the notification area we alter it's settings which you can find under ~/.config/snapfly:

# Show icon in systray
systray=false

Then set-up a keyboard binding to call snapfly-show

bindsym $mod+g exec snapfly-show

Restart i3 and you should be good to go.

Snapfly isn't a perfect solution, but it's nice that it doesn't take up screen real-estate when it's not needed. The main annoyance so far is that keyboard navigation doesn't work, which clashes with everything else in i3 which is heavily focused on the keyboard.

[1]The key idea is having 'modes' so you can bind a lot of keys. See i3 tips n tricks for a short explanation and then Google is your friend to find some different implementations.
[2]Menus in i3wm
[3]adeskmenu is no longer available, the only source I could find is http://pastebin.com/bG4ugasC
[4]Menutray on GitHub

Posted in Tech Saturday 16 January 2016
Tagged with Linux i3 Snapfly