evilwmのキーボードショートカットをなんとかする。

what?

ウィンドウマネージャーは キーボードショートカットで仮想デスクトップの移動さえできれば十分。 変なウィンドウ装飾とか、ウィンドウの挙動とかいらない。

と、いうひとにぴったりのevilwmなんだけど、 キーボードで立ち上げられるプログラムが一個に限定されるのがちょっと辛いので、 なんとかする話。

キーボードカスタマイズ機能を付けるのは sevilwmで実装されてるようなんだけど、 やっぱevilwm的にはここはプログラムに直埋め込みして極力使用リソース量を減らすのが良いかと。

弄るのはevents.cmain.cのみ。必要に応じてkeymap.hを変更したり、misc.c参考したりしつつ。

方法

まず、割り当てるキーと何を割り当てるかを決める。 とりあえず、emacsを起動したいのでCtrl+Alt+'e'でemacsが起動するようにする。

main.csetup_displaykeys_to_grabに、 追加したいキーを含める。

KeySym keys_to_grab[] = {
	XK_e,               /* ←これ */
	KEY_NEW, KEY_KILL,
	KEY_TOPLEFT, KEY_TOPRIGHT, KEY_BOTTOMLEFT, KEY_BOTTOMRIGHT,
	KEY_LEFT, KEY_RIGHT, KEY_DOWN, KEY_UP,
	KEY_LOWER, KEY_ALTLOWER, KEY_INFO, KEY_MAXVERT, KEY_MAX,
#ifdef VWM
	KEY_FIX, KEY_PREVDESK, KEY_NEXTDESK,
	XK_1, XK_2, XK_3, XK_4, XK_5, XK_6, XK_7, XK_8,
#endif
	0
};

で、events.cに起動したいプログラムの名前とその引数を書いた配列を用意。 これの意味はmisc.cのexecvpラッパーspawn関数を見れば 理解できるかと。

const char *opt_emacs[] = { "emacs", "emacs", NULL };
                       /* {  progname, arg1, arg2, ... , NULL } */

で、handle_key_eventのふたつめのswitch文に

case KEY_EMACS:
	spawn(opt_emacs); break;

というのを追加して終わり。ちなみに、ひとつめのswitch文は ウィンドウの操作に関する部分なので無視して良いと思う。

補足