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:

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
-
darcs get http://www.dmwit.com/yeganeshfor the latest, unstable version, whatever state it happens to be in - Download version 2.1, released 24 September, 2008
- Download version 2.0, released 6 September, 2008
- Download version 1.1, released 1 September, 2008
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:
- Install dmenu.
- Try
cabal install yeganeshif you have cabal-install already. If that doesn't work, proceed on to... - Install the "strict" package.
wget http://hackage.haskell.org/packages/archive/strict/0.3.2/strict-0.3.2.tar.gz tar xf strict-0.3.2.tar.gz cd strict-0.3.2 ./Setup.lhs configure ./Setup.lhs build ./Setup.lhs install # may need to be done as root
- Install yeganesh.
wget http://www.dmwit.com/yeganesh/yeganesh-1.1.tar.gz tar xf yeganesh-1.1.tar.gz cd yeganesh-1.1 ./Setup.lhs configure ./Setup.lhs build ./Setup.lhs install # may need to be done as root
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.