sevilwm に click and focus model を実装してみた

普通ウィンドウマネージャというと、なんかウィンドウのフォーカスの状態とかはガチガチに管理してる感じなのですが、 evilwm はこう流れに身を任せるような優雅な実装になっています。

どういう感じかというと、 X Window の発行する EnterNotify が飛んできたらフォーカスをあわせる、というだけの実にシンプルな実装。それじゃあ EnterNotify なんて飛ぶわけないキーボード入力によってフォーカス切り替えるとかできないじゃないか…と思うわけです。どうやってるかっていうと実に単純で、 Alt+Tab みたいなのが入力されたら、そのウィンドウの位置にマウスポインタをぶっとばして、そしたら勝手に EnterNotify 飛ぶからきっとフォーカス変わるよね…というふうになってる。

それが優雅かっていうと微妙でなんというか switch 内に break の無い case を書いて fall through させるような感じで…

というのは sevilwm では全部ウソでなんか Java アプレット対応だったかなんかヘンなことあるので結局自力でのフォーカス当てもやっててわけがわからないのであった。

でまぁ重要なのは EnterNotify で入力フォーカスが切り替わるってことで、マウス移動で入力フォーカスだけが変わる(最前面には出ない)っていうのは割と便利な局面も多かったりする。画面の大部分を埋めるブラウザを右に置いて左の狭い空間に置いた端末で作業とかしたい場合、左に入力フォーカスを置きつつも最前面には持ってきたくないとか、そんな。

だけどこれ Thinkpad 使ってると、なんかトラックポイントをふとした拍子で触ってしまって入力フォーカスが変わる、ということがあったりして諸刃。

さらにこれ Windows の TightVNC で触ってると、 XWarpPointer が発生しても Windows 上のマウス(つまり TightVNC の思っているマウスの位置)は動きやがらないものだから、次にちょっと動かしたら今いるウィンドウとは全然違う位置から移動が始まって、結果としてちょっとトラックポイント触っただけでフォーカスが全然違う位置に行ったりして。

というようなどうでもいい話から、普通のウィンドウマネージャぽくクリックしないとフォーカス切り替わらないバージョンを作ってみた。

http://shinh.skr.jp/tmp/sevilwm_click_focus.tgz

使ってみて気に入りそうならオプションって形でマージしてみる。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h