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 or a binary for version 2.5 (released 21 April, 2012; changelog) today! New releases will be cross-posted to the Haskell and xmonad mailing lists. You can

An important note about dmenu-4.4

If both of the following apply to you:

you used yeganesh (any version) with version 4.3.1 or earlier of dmenu, and

you used yeganesh version 2.3 (exactly) with version 4.4 or later of dmenu,

then you probably have duplicate entries in your profiles. Any affected profile can be fixed with the new executable provided by the yeganesh package, yeganesh-strip . It accepts exactly the same command-line arguments as yeganesh itself, ignoring all but the --profile option. Running yeganesh-strip is safe, even if the profile is from a newer version of yeganesh or does not have duplicates.

Details

Yeganesh is written in Haskell, so it is technically cross-platform, 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.

Install cabal-install if you don't have it already. (If cabal --help prints some stuff, you already have it.) There is an installation script named bootstrap.sh in the tarball. If necessary, add $HOME/.cabal/bin to your $PATH .

prints some stuff, you already have it.) There is an installation script named in the tarball. If necessary, add to your . Type cabal install yeganesh and wait for it to complete.

You should now be able to use yeganesh! Try running "yeganesh -x" a few times. The first time might be a bit unspectacular; however, on the second run, you should see all your executables listed. The third time, whichever program you chose on the second run should be promoted to the front of the list.

The scope of yeganesh is pretty small. The number of command-line options is correspondingly small. The typical usage is yeganesh [-p profile] [-f] [-x] [[--] DMENU_OPTIONS] :

-f or --filter : Only the lines given on stdin will be shown (the default is to also show cached values from previous runs).

or : Only the lines given on stdin will be shown (the default is to also show cached values from previous runs). -p or --profile : 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".

or : The 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". -x or --executables : After your choice is made, scan through $PATH for executables and add them to the cache.

or : After your choice is made, scan through for executables and add them to the cache. -- : All options after the -- will be passed on 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.