Tint2
July 23, 2008
Some of you may use, have used or know of tint task manager (ttm), a simple light weight task list with a pleasant and configurable aesthetic. The project showed very little progress, until someone else (?) decided to hack on the code and come up with an improved version of the task list: tint2.
The improved version added extra configuration abilities as well as drag/drop support, but is clearly intended to be more than just a task list. The latest release, 0.6, added among other things a configurable clock, and launchers seem to be planned. Like some panels, Tint now also automatically sets a margin for it so that other windows cannot overlap it and the task list always remains visible (unfortunately, you can’t make this optional, as far as I can tell, so I cannot use 0.6 for my tabbed desktop effect…)
To install it on Ubuntu Hardy, you’ll need to install the following dependencies: libcairo2-dev libpango1.0-dev libglib2.0-dev libimlib2-dev libxinerama-dev
The configuration file is still fairly straightforward, but contains a lot of extra features over ttm. If you get lost in all the settings, you’ll be happy to know that a manual with pictures (in pdf format) is available on the tint2’s website.
If you like minimalistic configurable panels this is a project to keep an eye on. If they add a system tray and launchers, I’m sure many users will replace pypanel with tint2.
My Openbox keybindings
July 22, 2008
One of Openbox’ great strengths is that you can control every aspect of the window manager with your keyboard, provided you spend some time configuring your keybindings. Since I use my computer extensively to process text, I have configured Openbox such that I only need to use the mouse when I really want to, and don’t have to move away from the keyboard. It speeds things up considerably, once you are used to it!
Below I give all the keybindings I use in Openbox. Some of these keybindings I don’t use very regularly. The ones that I use extensively are those that launch applications (Win+F1-9 to launch applications, or Alt+F1-6 to launch menus or application launchers); those that control the volume (Ctrl-Up/Down) and mpc (Ctrl-Alt + other keys); those to switch windows (Alt-Tab and Win-Tab) or to switch workspace (Ctrl-Alt-Left/Right); those for basic window actions, such as close (Win-A-C), maximize (Win-A-M), iconify (Win-A-I), send to bottom (Win-A-B), etc; those to move windows in the current workspace (Win + some direction key); to move windows to the next workspace (Win-A-N) or previous workspace (Win-A-P); or to follow windows to the next (Win-A-Shift-N) or previous workspace (Win-A-Shift-P).
When I mention “(with osdsh)”, it means that the action that is performed is shown on screen with osdsh. Thus, when I reconfigure Openbox, the message “reconfiguring” on my screen, or when I turn the volume up it says “volume up”. (I know osdsh has a mixer display, but that uses a lot of CPU in Hardy!). When I mention “(with script)” in the launcher section, I launch a script to raise the application if it is already running or to open a new instance if it isn’t. The shutdown and logout keybindings (Win-O-S and Win-O-E) launch a gmessage script that gives me the option to reboot, shutdown, logout, or lock the screen.
As you will see below, I make extensive use of keychains. Keychains are great! They enable me to keep most of my keybindings fairly simple and straightforward: Win-A starts the keychain for window actions (thus ‘Win-A + C’ closes the focused window, and ‘Win-A + N moves it to the next workspace); Win-O governs all the Openbox related actions (Reconfiguring, editing the configuration files, etc.).
I have also posted my current rc.xml file, for those interested. I’m pretty sure there are some additional keybindings in that file (probably duplicate actions) that are not mentioned below; if that is the case they are keybindings I no longer use, but forgot to remove.
######################### ## Launchers and Menus ## ######################### Alt F1 root menu Alt F2 gmrun Alt F3 dmenu Alt F5 dmenu for configuration files Alt F6 client-combined-list Win F1 mousepad Win F2 notecase Win F3 xfce4-terminal (script) Win F4 thunar (script) Win F5 gmpc Win F6 epiphany Win F7 ooffice writer Win F8 opera (script) Win F9 stardict Win F10 gedit Win F11 gnome-alsamixer Win F12 Lock screen (xlock) Ctrl Alt Del htop ######### ## MPD ## ######### Ctrl Alt space mpc toggle (with osdsh) Ctlr Alt Prior mpc next (with osdsh) Ctlr Alt Next mpc previous (with osdsh) #################### ## Volume control ## #################### Ctrl Up Volume up (PMC) (with osdsh) Ctrl Down Volume down (PMC) (with osdsh) Ctrl Shift Up Volume up (Master) (with osdsh) Ctrl Shift Down Volume down (Master) (with osdsh) Ctrl Alt End Volume mute (with osdsh) #################### ## Window actions ## #################### Win a Window actions m Toggle maximize full v Toggle maximize vertical h Toggle maximize horizontal i Iconify c Close s Toggle Shade t Toggle always on top b Send to bottom Shift b Toggle always below Shift l Send to normal layer Shift d Toggle omnipresent d Toggle decorations l Lower, focus to bottom, unfocus p Send to previous workspace n Send to next workspace Shift p Follow to previous workspace Shift n Follow to next workspace g GrowTo Left GrowToEdgeWest Right GrowToEdgeEast Down GrowToEdgeSouth Up GrowToEdgeNorth Win space Show client-menu ############# ## Openbox ## ############# Win o Openbox actions r Reconfigure (with osdsh) c Edit rc.xml m Edit menu.xml s Shutdown (gmessage) e Exit/logout (gmessage) l Lock screen (xlock) ############### ## Worspaces ## ############### Ctrl Alt Left Go to the workspace on the left Ctrl Alt Right Go to the workspace on the right Alt Shift Left Send window to the workspace on the left Alt Shift Right Send window to the workspace on the right Win Shift F1 Send window to workspace 1 Win Shift F2 Send window to workspace 2 Win Shift F3 Send window to workspace 3 Win d Show desktop ###################### ## Window switching ## ###################### Alt Tab Next window Alt Shift Tab Previous window Win Tab Next window (all desktops) Win Shift Tab Previous window (all desktops) ################## ## Move Windows ## ################## Win Left Move window left Win Right Move window right Win Down Move window down Win Up Move window up Win Prior Move window to top right corner Win Next Move window to bottom right corner Win Home Move window to top left corner Win End Move window to bottom left corner #################### ## Resize Windows ## #################### Alt Left Increase left edge Alt Right Increase right edge Alt Up Increase top edge Alt Down Increase bottom edge Alt Shift Left Decrease right edge Alt Shift Right Decrease left edge Alt Shift Up Decrease bottom edge Alt Shift Down Decrease top edge Alt F12 Toggle fullscreen Ctrl Alt d Toggle autohide dock
A “tabbed” desktop
July 21, 2008
K.Mandla has already written about my “tabbed desktop”. Here is a little more information:
To create the effect of a ‘tabbed’ desktop, I have been running tint2 at the top of my screen, covering the window decorations. With the right colour and size settings, you can easily create the appearance of a tabbed desktop.
Hayagriva and my “tabbed” desktop
Two things make this method somewhat practical: First of all, I run most of my applications maximized; smaller, ‘floating’ windows somewhat destroy the tabbed feel of the desktop. Secondly, since tint covers the window decorations and makes it thus unable to close, iconify or shade the window, make it sticky, or send it to another desktop, you should be able to perform these actions with the keyboard, through keybindings.
Since K.Mandla’s post, I’ve made a small adjustment to the desktop: I added a clock and remind to my top task bar, using dzen2 (I initially also had a volume bar in it, but dropped that). My dmenu scripts also load in that exact area, using the same colour settings and covering both tint and dzen.
If you’re interested, this is my dzen2 script, and this is my tintrc. The Openbox and Gtk theme I use is Bygone (somewhat modified).
Setting a custom Gtk theme for specific applications
July 13, 2008
I’m not entirely sure why you’d want to use this, but it does get asked from time to time: How can you use a different Gtk theme, icon theme and/or fonts for specific Gtk applications?
If you just want to change the Gtk theme, you can launch your application with the following command:
GTK2_RC_FILES=/path/to/your/theme/gtkrc application-command
Thus “GTK2_RC_FILES=/home/urukrama/.themes/royalty/gtkr-2.0/gtkrc thunar” will use the Royalty theme for Thunar. Note that this will use the default font and icon theme, not the icon theme or font you specified in your ~/.gtkrc-2.0 or ~/.gtkrc.mine file.
If you’d also like to set a custom icon theme and font for the application, create an empty file, wherever you find convenient (for example in /home/USERNAME/.themes) and call it whatever you want (for example, custom.gtkrc). Then add the following to that file:
#To set the Gtk theme
include "/path/to/your/theme/gtkrc"
#To set the icon theme
gtk-icon-theme-name = "GnomeCorsair"
#To set the font
style "Sans"
{
font_name = "Sans 8"
}
widget_class "*" style "Sans"
gtk-font-name = "Sans 8"
Change ‘GnomeCorsair’ to the icon theme you’d like to use, and “Sans” to the font you prefer. The /path/to/your/theme/gtkrc is what it says (for example /home/urukrama/.themes/royalty/gtkr-2.0/gtkrc). If you would only like to have a custom icon theme or font, only specify those and leave the rest out.
To launch Thunar with these settings, use the following command (If you saved the file elsewhere, adjust the path accordingly):
GTK2_RC_FILES=/home/USERNAME/.themes/custom.gtkrc thunar
If you want to use this in a launcher such as Openbox’ menu, rather than the terminal, try the following:
bash -c 'GTK2_RC_FILES=/path/to/your/gtkrc application-command'
I haven’t managed to get this working with either the gnome-settings-daemon or the xfce-mcs-manager running. It seems they override this.
As proof that this works, here is a screenshot of two instances of Mousepad running, one using the default theme, the other launched with a custom gtkrc:
First steps with Awesome window manager
July 10, 2008
I finally decided to try out Awesome, the window manager all the cool kids are using. Awesome is a tiling window manager, like Wmii or Xmonad, and is very light and stable. In the past I have briefly experimented with Wmii and Xmonad, which I both liked but never found really practical for my needs. So far I’m rather liking Awesome.
My Awesome setup
There is plenty of good information available on Awesome. Shearn89‘s introduction to awesome on the Ubuntuforums, the Awesome Wiki, Calmar‘s files, and the documentation that comes with Awesome have been particularly helpful for me. I don’t intend to replicate here all of the information that those sources contain. The following only mentions (a) a few things I wanted to figure out, but didn’t find any info on, or (b) some things I did with Awesome. What follows is not meant as a guide, but just as a document explaining how I made my first slow steps with Awesome, that might be useful to others new to this window manager. Don’t expect a complete overview of Awesome, nor any revolutionary insights ๐
I installed Awesome 2.3.1, building it from source. All of what follows works with this version. The syntax of the configuration file tends to change with every release, so some of this may not work with earlier (or later) versions of Awesome. Only Awesome 2.0 is in the Hardy Ubuntu repositories; 2.3.1 is available in Intrepid.
Though tiling is neat and sometimes handy, I find it rather inconvenient to work with most of the time. I have a small screen and mainly use applications that are best viewed full-screen (Opera, OpenOffice, Stardict, etc.). I mainly control my window manager from the keyboard, and the tiling window managers offer great keyboard control, but I also look to work with the mouse. This determined the way I configured Awesome: I limit the tiling layout as default to one of my five tags, added window decorations and a root menu, and used some more ‘traditional’ keybindings for Awesome actions (Alt-Tab to switch windows, Ctrl+Alt+arrows to move between tags, etc.).
Awesomerc
The syntax of the ~/.awesomerc file is fairly straightforward, but can easily be intimidating for new users. If you are unsure of the options you can use, have a look at the commented default ~/.awesomerc on the Wiki (or if you know French, see this helpful page).
To give you an idea of what I did with it, I have uploaded my ~/.awesomerc file. The keybindings are largely those I use in other window managers (Ctrl+Alt + left and right arrows to move workspaces/tags; Alt-Tab to switch between windows; Ctrl+Alt+r to restart the window manager; Alt+F2 for gmrun; Alt+F3 for awesome-menu/dmenu; Windows+F1-12 to launch applications; Ctrl + up and down arrows to change the volume levels; Ctrl+Alt+space to play/pause mpd, etc.)
The structure of the configuration file is relatively simple:
<section> [name]
{
<option> = <value>
<section> [name]
{
<option> = <value>
…
}
…
}
Examples of a <section> are mouse, rules, keys, screen, etc. Most sections can have subsections: statusbar, for example, is a subsection of screen, tasklist is a subsection of statusbar, and in my configuration file tasklist has a mouse subsection. You can have more than one instance of some sections: if you use two screens, you can have two screen sections, if you want more than one statusbar you can add more statusbar sections, and if you use widgets, you’ll probably use more than one iconbox or textbox. If you can use more than one section of a kind, you’ll have to specify a name for the section: thus in the default configuration file, screen is called “0”, statusbar is called “mystatusbar”, etc. Some sections, like mouse, key, rules, or layout, can only have one of its kind and therefore do not need a name, though the mouse, key, and styles sections can also be added as subsections to other sections, to govern the style and the mouse and key behaviour of those sections (thus, if you’d want awesome to do xyz when you right click on the tasklist, you would add a mouse section to the tasklist, or if you want the taglist to have a blue background when unfocused, you would add a style section to the taglist section). Examples given below might clarify this more.
<option> and <value> configure the section they are in. They can be colour settings, mouse actions, key actions, position, etc, and are sometimes unique to the section they belong to. Have a look at the default configuration file for some idea of what these can be. All the options as well as all the (sub)sections must be placed within { }. Make sure you keep that structure intact or your configuration file won’t load.
It is easy to make a typo, accidentally delete a bracket, or misplace a particular option into the file. If your configuration file contains errors, Awesome will load the default configuration file when it restarts. You can check for errors in the file before you restart Awesome with the command awesome -k.
Most of the key and mouse bindings should be straightforward: you specify the modifier key(s) and the regular key or mouse button that trigger the actions. If you want to launch applications, use the command spawn with the argument exec application_name. If you want to use Awesome actions, you use whatever action you want to use as the command, possibly with an argument (e.g. command = “tag_setlayout” arg = “+1”, to cycle forwards through the tags), as shown in the keys and mouse section further down in the configuration file). If you want to perform more than one action with a single key (or mouse) press, you’d use the following syntax (as I did with mpc and osdsh):
key { modkey = {"mod keyname"} key = "keyname" command = "spawn" arg = "exec command_one|command_two" }
Autostarting applications
Awesome doesn’t have a session manager. When you login, Awesome is launched and that is it. If you want to autostart applications, you could add them to your ~/.xinitrc, or (if you use a display manager like GDM and regularly switch between window managers) create an autostart script. I modified the Awesome.desktop file (in /usr/share/xsessions/) to load a script that is saved in my home directory, where I can easily add whatever applications I’d like to autostart.
Here is what my /usr/share/xsessions/Awesome.desktop looks like:
[Desktop Entry]
Encoding=UTF-8
Name=Awesome
Comment=Awesome window manager
Exec=/home/urukrama/.awesome/awesome_start.sh
Icon=
Type=Application
The awesome_start.sh script is a simple bash script. Here is what it looks like:
#!/bin/bash
export OOO_FORCE_DESKTOP=gnome
nitrogen --restore &
/home/urukrama/.config/osdsh/osdsh_script_awesome &
#Status bar clock & remind
/home/urukrama/.awesome/awesome-clock.sh &
/home/urukrama/.awesome/awesome-remind.sh &
thunar --daemon &
unclutter -idle 8 -root &
exec /usr/local/bin/awesome
If you decide to use a similar method, make sure both files are executable. There is more info on the awesome-clock and awesome-remind scripts below.
Statusbar and widgets
I love what you can do with Awesome’s statusbar. If you’ve visited desktop threads on the Ubuntu or Arch forums long enough you’ve probably seen plenty of screenshots of Awesome showing statistics for network traffic, battery status, cpu and memory usage, weather, disk usage, mpd, and whatnot. A lot of this is adequately documented on the Awesome Wiki, so there is no need to repeat that information here. (Besides, I don’t find all those stats either useful or aesthetically pleasing, but to each his own).
The statusbar is relatively easy to edit, once you’ve understood the ~/.awesomerc syntax. Awesome comes by default with a single statusbar, position at the top of the screen, but you can easily add more or move that to the bottom, left or right of the screen. If you want to create an additional statusbar, just create an additional statusbar section in the configuration file, and populate it with the widgets you’d like it to display. Make sure you name it differently than the current statusbar (the default is named mystatusbar)!
By default Awesome displays the following widgets on the statusbar: the taglist, layoutinfo, tasklist, and the awesome logo (an iconbox). You can move these around as you please (or remove them, or move them to a different statusbar). The widgets are displayed on the statusbar in the order that they appear in the ~/.awesomerc file.
The widgets will follow the colour and font settings of the main style (defined in the “style” section, at the beginning of the config file), unless you specify different settings for a widget. To do so, add a line like this to the widget’s section:
style { fg = "#B23308" font = "nu 8"}
This will use the fg colour as well as the font specified here, and use the defaults for everything else. If you want to change the colours of a widget that can have both focused and normal colours (like the tasklist), add something like the following:
styles
{
normal { fg = "#ECDDA6" bg = "#000000" border = "#000000" }
focus { fg = "#B23308" bg = "#000000" border = "#000000" }
}
I wanted to add only two widgets to the statusbar: a clock and a widget that displays my reminders (using the application remind). Here is how I did it.
Clock and calendar
For the clock, I modified a script found on the Wiki, which I saved as ~/.awesome/awesome-clock (and made executable with chmod +x). Whatever script you use, and wherever you save it, make sure it is always called “awesome-name_of_the_widget_in_awesomerc“. I added the following lines to the very end of the statusbar section of my ~/.awesomerc (to have the clock display in the far right of the statusbar):
textbox clock
{
align = "right"
style { fg = "#B23308" bg = "#000000" }
}
With this in Awesome’s configuration file, whenever I load the script ~/.awesome/awesome-clock, the clock will load in the taskbar, at the position the above section occurs in the configuration file. To have it load whenever I log into awesome, I added the script to my Awesome autostart script (~/.awesome/awesome-clock &).
But I wanted more than this. Wouldn’t it be neat to have a calendar built into this clock widget? Sure, and luckily there is dzen2, which I used to get a script to launch a calendar. I added the following two lines to the clock widget in my ~/.awesomerc (make sure you keep the { } structure intact!):
textbox clock
{
align = "right"
style { fg = "#B23308" bg = "#000000" }
mouse {
button = “1”
command = “spawn”
arg = “exec /home/urukrama/.scripts/dzen_calendar_awesome” }
mouse {
button = “3”
command = “spawn”
arg = “exec osmo” }
}
This launches a dzen calendar script when I left click on the clock, and Osmo when I right click on it.
My calendar script
You can add such lines (with or without a key modifier such as Shift, Mod4, etc.) to any of the widgets (you’ll see that the tasklist and the layoutinfo widgets already have some).
Remind
I use remind to show today’s events of my religious calendar, and I wanted to show those reminders in the statusbar, next to the clock. To do so, I modified the above script to display today’s reminder, saved it as ~/.awesome/awesome-remind, made it executable, created a textbox widget called “remind” before my clock widget, and added the appropriate line to my autostart script.
I also wanted to see a list of upcoming reminders when I right click on today’s reminders, and created a script with dzen2 to accomplish this. This script shows the reminders for the coming four weeks, with today’s reminder in red (this page explaining how sed works was extremely useful to get this done!). Only ten lines are shown, but you can scroll up and down in the list to view the other lines. Right clicking on the list makes it disappear.
This is what the appropriate section in my ~/.awesomerc looks like:
textbox remind {
align = "right"
style { fg = "#ECDDA6" bg = "#000000" }
mouse
{ button = "1"
command = "spawn"
arg = "exec /home/urukrama/.scripts/dzen_remind_awesome" }
}
Layouts and Tags
Awesome has a lot of different layouts: tiled, left tiled, top tiled, bottom tiled, spiral, floating, maximized and dwindle. I don’t have any use for many of these (I only use tiled, maximized, and float), and having them all can be rather annoying if you want to quickly switch between two layouts. If you don’t want to use a particular layout, you can remove them or comment them out from the “layout” section. Only the layouts that are specified in this section will be used by awesome. You can cycle through these layouts, either by clicking the layoutinfo widget in the statusbar or by pressing Mod4+space; the order in which you cycle through them is the order specified in this section of your ~/.awesomerc.
Tags are like virtual workspaces, but better. Each tag can be set with a default layout, in the “tag” section of your ~/.awesomerc, but their uses are greater than that. Within a tag all the windows that have that tag are shown. The great part of it is that you can assign more than one tag to an application or window, so that it shows up in both tags. If you want an application to appear in more than one tag, you have to set up a rule (in the rules section). This is what it would look like if you want to thunar to show on both tag ‘one’ and ‘five’:
rule { name = "thunar" tags = "one|five" }
I’ve also configured Awesome such that if I middle click on a tag name, the currently selected window is moved to that tag. Here is the relevant portion of my ~/.awesomerc (in the taglist section of the statusbar section):
mouse { button = "3" command = "tag_toggleview" }
If you want to view the windows of all tags in a single tag, use the action tag_view (assigned to Mod4+Print in my configuration). The action tag_toggleview works similarly, but doesn’t show the applications that are on the current tag. You can undo both actions by clicking on a tag name and triggering the action you have configured to that mouse action (thus, in my setup, middle clicking will move the active window to that tag; left clicking will just move to that tag; etc.)
To have an open window appear on all tags, use either the client_tag action, or the client_toggletag action if you want to be able to easily undo it.
You can easily create new tags whenever you want, with the tag_create action. Thus the following action creates a new tag called “six”:
key { modkey = {"Mod4", "Control"} key = "F6" command = "tag_create" arg = "six" }
Root menu
I’ve been using Openbox for way too long to be comfortable now in any window manager without a root menu that pops up when I right click on the desktop. ๐
If you’d like a right-click root menu in Awesome, like you have in Openbox and Fluxbox, you can use 9menu, a component of 9wm that can be easily used with other window managers. To use it, you’ll need to create a menu file (here is mine), and launch it with the following command:
9menu -popup -bg "#000000" -fg "#F2EDD7" -font "-*-nu-*-*-*-*-*-*-*-*-*-*-*-*" -teleport -file /path/to/your/custom/9menurc
Change the bg and fg colours as well as the font to whatever you prefer. For more options with 9menu, check its man page.
To make things easier, create a script to launch this: create an empty file called 9menu_script (I keep it in ~/.awesome), add #!/bin/bash at the top of that file followed by the above command, save it, and make the script executable (chmod +x /path/to/9menu_script). (The advantage of using a script, rather than adding the command directly into your ~/.awesomerc, is that if you have multiple instances of it in your ~/.awesomerc, you will only have to change its settings once when you want to change its colours and/or font to match a different theme.)
To launch 9menu when you right click on the desktop, find the following in the mouse section of your ~/.awesomerc:
root { button = "3" command = "spawn" arg = "exec xterm" }
This launches an xterm when you right click on the desktop. Change that to this:
root { button = "3" command = "spawn" arg = "exec /path/to/your/9menu_script" }
If you’d also like to have the menu bound to Alt+F1, as some window managers have it, add the following to the keys section:
key { modkey = {"Mod1"} key = "F1" command = "spawn" arg = "exec /path/to/your/9menu_script" }
If you’d like the menu to launch from the Awesome icon on the statusbar, edit the “iconbox logo” section in the default configuration file as follows:
iconbox logo
{
image = "/usr/local/share/awesome/icons/awesome16.png"
mouse
{ button = "1"
command = "spawn"
arg = "exec /path/to/your/9menu_script" }
}
(The default launches Awesome’s man page: xterm -e man awesome).
You could also use dzen2 to create a root or panel menu (see here and here). It is a lot harder to accomplish this with dzen2 than it is with 9menu, but you can do a lot more with it: submenus, more colours, icons, etc. I tried it and had some success, but gave up as I didn’t think it worth the trouble.
Window decorations
By default, Awesome does not use window decorations, but you can easily add those. In the screen section, add something like the following:
titlebar
{
position = "top"
text_align = "left"
styles
{
normal { fg = "#ECDDA6" bg = "#000000" border = "#000000" }
focus { fg = "#B23308" bg = "#000000" border = "#000000" }
}
height = "13"
}
The position of the titlebar can be top, bottom, left or right.
If you want to disable the titlebar for some applications, or have some applications with the titlebar in a different position, you can specify that in the “rules” section: specify the application, and use the following option titlebar { position = off } (you can replace “off” with any position you’d like).
Awesome does not support buttons on the titlebar, like echinus does, but having the titlebar for some applications is handy when you are in floating mode, as it allows you to easily move windows around with the mouse. In the mouse section you can tell Awesome what to do when you press a particular mouse button on the titlebar. I make it close the window when I middle click on it, as well as toggle maximize fully, vertically and horizontally when I press Mod4 and left, middle or right click on it. Note that when you maximize a window with togglemax, it looses its window decorations until you unmaximize it again.
Awesome-menu
And finally, there is Awesome’s menu. It resembles dmenu, though it isn’t as refined: it doesn’t automatically select the first match of what you type, and doesn’t search for matches within a word (‘unar’ does not bring up ‘thunar’ for example, as it does in dmenu). Nevertheless, it is handy, and the Wiki explains some of its potential.
I initially used it, but have now gone back to the much loved dmenu.