履歴付きdmenu
dmenuはそのままdmenu_runすると,
辞書式順で表示される.ここからキーを押して,候補を絞っていくことになる.
しかし,firefoxを起動させるには,おそらくfirまでキーを押さないといけない.
これは非常に面倒である.fを押した時点でfirefoxが選択されるのが望ましい.
(たかが,2キーストロークだと怒られるかもしれないが)
上を実現する1つの方法として,履歴を利用する方法がある.辞書式ではなく,
使用頻度順にならべてやれば,良く使うプログラムは前のほうに来る,そして,
少ないキーストロークで起動できるというわけだ.
履歴を利用してやれば,こんな風になる:
もともとのスクリプトは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
だし.