Yeganesh

This is a small wrapper around dmenu. Like dmenu, it accepts input on stdin and writes the chosen result on stdout. Unlike dmenu, it mangles the input before presents its choices.

In particular, it displays commonly-chosen options before uncommon ones. Here's a partial screenshot after about 30s of use today:

example: firefox gimp pidgin xchat 822-date [ a2dismod a2dissite a2enmod...

As you can see, I've used Firefox several times already, as well as the Gimp, some chat programs, and my music player. The rest of the programs in my PATH follow, as usual for dmenu.

Download the source for version 2.2 (released 2 September, 2010; changelog) today! Alternatively, you can

I consider Yeganesh "complete", in the sense that it does everything I want it to do. Development has officially stopped, unless somebody reports a bug or requests a feature on the bug tracker (see below).


Details

Yeganesh is written in Haskell, but it probably doesn't make sense outside of the *nix world. Installation should be second nature for those of you familiar with Cabal. For everybody else, and assuming GHC >= 6.8:

You should now be able to use yeganesh! Try running "dmenu_path | yeganesh" the first time, then just "echo | yeganesh" the second time. You should see the option you chose the first time promoted to first place on the second run.

The scope of yeganesh is pretty small. The number of command-line options is correspondingly small. The usage is yeganesh [-p profile] [-f] [-- DMENU_OPTIONS]. The profile argument lets you specify a filename under the "$XDG_DATA_HOME/yeganesh" directory (or "~/.local/share/yeganesh" if $XDG_DATA_HOME is not set) to store the state in; it defaults to "default". If you specify the "-f" flag, then only the lines given on stdin will be shown (the default is to also show cached values from previous runs). The DMENU_OPTIONS get passed verbatim to the underlying dmenu process.

Bugs and feature requests should go to the tracker. Log in with user name "guest" and password "secret" to see the current bugs and feature requests; log back out to submit a new bug or feature request.

And, oh yeah, the name! "Yeganeh" (یگانه) is a Farsi word meaning "unique." This refers to the fact that each command occurs at most once. And "Ganesh" (sometimes "Ganesha") is the Hindi god of beginnings -- perfect for a launcher.