dmenuはそのままdmenu_runすると,

辞書式順で表示される.ここからキーを押して,候補を絞っていくことになる.

f🆔jeneshicc:20091115112354p:image

しかし,firefoxを起動させるには,おそらくfirまでキーを押さないといけない.

これは非常に面倒である.fを押した時点でfirefoxが選択されるのが望ましい.

(たかが,2キーストロークだと怒られるかもしれないが)

上を実現する1つの方法として,履歴を利用する方法がある.辞書式ではなく,

使用頻度順にならべてやれば,良く使うプログラムは前のほうに来る,そして,

少ないキーストロークで起動できるというわけだ.

履歴を利用してやれば,こんな風になる:

f🆔jeneshicc:20091115112846p:image

もともとのスクリプトはArchLinuxのForumで見たのだが,どこで見たかを忘れてしまった.

本来ならば,そこにリンクを貼るべきなのだろうが.

スクリプトは次.

#!/bin/bash
# ~/bin/dmenu_run
# Time-stamp:<2009-08-26 21:14:15>
# histroy setting
HIST="$HOME/.dmenu_history"
HIST_SIZE=99
CMD="mpdmenu"
# query from history
QUERY=$(sort $HIST | uniq -c | sort -rn | colrm 1 8)
RUN=$((echo "$QUERY"; (dmenu_path ; echo "$CMD") | grep -vxF "$QUERY") | 
    dmenu -i -fn '-*-terminus-*-*-*-*-*-200-*-*-*-*-*-*' -nb "#dddddd" -sb "#3366ff")
# if run is not empty then update history
[[ $RUN != "" ]] && (echo $RUN; head -n 99 $HIST) > $HIST.$$ && mv $HIST.$$ $HIST
case $RUN in
    # emacs may be daemon mode
    emacs) exec emacsclient -n -c -a emacs ;;
    mpdmenu) exec /home/toru/bin/mpdmenu ;;
    *) exec $RUN;;
esac

HIST_SIZEは保存する履歴の数.

100もあれば十分だと思われる.

実際

% cat .dmenu_history | sort | uniq | wc -l
16

だし.