sevilwm 0.9.1
http://shinh.skr.jp/sevilwm/sevilwm-0.9.1.tgz
mitake さんにもらった変更(感謝!)を含めて色々。無視する window 用の設定ファイル、それを設定する unix domain socket 、設定ファイル群は全部コンパイルする時に元の状態を覚えておくように、ドキュメントを少しなおした、現在のキー状態を返す、 sevil.rb というクライアントスクリプト、 SDL off で見せた sevilwm シュー、など。
あと
http://d.hatena.ne.jp/mtkh/20080510
を見てすっかり忘れてた、設定されてないキーバインドの Ctrl+Alt なんたらはフォーカスあたってる window に送りつける、っていうのをやってみました。
sevilwm-0.9.0
なんか最近欲しいなーと思っていた、 window の位置を記憶するとかそのへんをやろうかという試みを。色々適当なところ多いんで今度なおす。
http://shinh.skr.jp/tmp/sevilwm-0.9.0.tgz
やりたいことはまぁ色々あったんですが、とりあえずランタイムに window の位置やらキー設定を変えたい(こっちは未実装)というのがありました。しかしまぁスクリプト言語組み込むとかは sevilwm 的に好みじゃないので以下のようなものになりました。
/tmp/sevilwm_$DISPLAY というディレクトリを作って、その下に unix domain socket を配置してあります。こっから情報が取れます。
% ruby unixclient.rb /tmp/sevilwm_$DISPLAY/info % ruby unixclient.rb /tmp/sevilwm_$DISPLAY/windows % ruby unixclient.rb /tmp/sevilwm_$DISPLAY/config_keys.def
など。 unixclient.rb は配布パッケージにつけておいたけど、 unixcat とか telnet -u がある環境ではそっち使っても良いかと。で /tmp/sevilwm_:0.0/ctrl に命令を送り込むと状態を変えれるようにしようかと。
% ruby unixclient.rb /tmp/sevilwm_$DISPLAY/ctrl VDESK(2) WIN("mlterm", 0, 30, 1, 564, 340, 1, 0, '\0') SHUTDOWN()
などとして vdesk の変更やら window の移動なんかができます。
でまぁ重要なのは WIN(...) っていうのは /tmp/sevilwm_$DISPLAY/windows が吐くフォーマットと一致してるので、ここから取得したものを再度喰わせれば状態の復帰ができます。あとはまぁちょっとスクリプト書けば focus のあたってる window をスクリプトで適当な位置に移動する…とかも書けると思います。
あと window の初期位置の設定も /tmp/sevilwm_$DISPLAY/windows の出力でできるようになっていて、これを config_win.def って名前で吐いてやって再コンパイルすればいいようになっているはずです。詳しくは config_win.def を参照。
あ、あとは CLICK_FOCUS がデフォになってて、ソースを統一しました。 CLICK_FOCUS いやな人は Makefile 修正してください。
TODO:
- バグとか適当に書いた部分をなおす
- ctrl に config_key.def を喰わせられるように
- config_win.def を吐けるように (confdata.o みたいなのを objcopy で作ればすぐできる)
- たぶん Ruby で unixclient.rb よりは便利なフロントエンドを書く
- info の吐いてる情報はこれで十分?
- ctrl にもっと機能を。具体的にはコマンドラインフラグで渡してるヤツとか
- ignores を入出力できるように
- つか ev_wm_restart するとコマンドラインフラグ忘れるのはなんとかすべき
- ev_wm_restart した時に window の順序が逆転するのをなんとかできるならする。(まぁ2回再起動すればなんか元に戻るんだが)
- ドキュメントとか
- コネクションのタイムアウト
- クライアントがソケットのバッファサイズ以上のものを出力させておいてそれを受け取らない…とかすると window manager が止まってしまう気がするので、 select で write もチェックした方が良いと言えば良い
ipc.c のいくつかの部分と (config_key.def を出力するとか)、いじろうというきっかけを下さった mitake さんに感謝。
まだもう少しはやる気が残ってそうなので希望とかあったら教えてくださるとすごく喜びます。
CIA
そろそろこの時のデータが溜まってきたので可視化してみました。
あとは URL に恥ずかしいのが出てこないのを祈らないばかりですね…!
気付いた問題としては
- SVN のログはそのままでは使いにくい
- つかどこから submit したかって情報残し忘れてないか
- IRC のログはもっと使いにくい
- URL のログは現状 TopCoder の Java applet のプロキシが大勢を占める
- Firefox が w3m より多いのは favicon やら CSS やら画像のせいだろう
- そして mixi や twitter が多いのは Firefox で見るからだとおもう
- はてなが無くなると死にそうですね
- いくらファンでも kmonos.net 多すぎではないか
- ところでこのシステム俺依存強すぎで配布しにくいよなー
TODO
そういえば以前から全タイプ記録を残したいと思ってるんですが、なかなか。
なんか
色々パッチとかもらっていたので色々上げておいた。
ウィンドウの resize のバグ修正をいただいていたのと、あとは kurimuraさんに色々指摘いただいていたものを今頃ちゃんと配ったり、クリックで focus 移動するバージョンも上げておいたり。
コンパイル通らなくなってたので。手元ではだいぶ前に修正してたけどめんどくさがっていた。
TUMIKI の readme をいただいたので置いておいた。
caddy
ゴルフをラクに楽しむために caddy というソフトを作ってみました。適当にコマンドラインオプションにコードを渡してやると、なんとなくローカルテストした後になんとなくコメントの除去とかをして、なんとなくサブミットしてくれます。
http://golf.shinh.org/caddy.tgz
% caddy delword.rb delword corresponds to 0: none of below 1: delete words (4166) 2: hello world (4545) 3: Ring world (6000) 4: Factorial (7777) 5: odd lines (7777) Input 0-5 [1] ? : Loading testcases of 'delete words' Test #1... OK Test #2... OK Test #3... OK Running squeezer... 669 => 80 #!ruby -pa gets(c=" "*-~~b=/.$/).map{sub$F[0],c;gsub(/.+/){scan(b)-[gsub b,""]}} Test #1... OK Test #2... OK Test #3... OK Submit this 80B code as shinh (Y/n) ? : Submitting... Success!
まず delword.rb ってファイル名から、問題名を適当に推測して聞いてきます。で今回は正しく推測してくれてるのでそのままリターンを押すとローカルでテストが走って、コメント除去とかをしてくれる squeezer が走って、その後でもう一度ローカルでテストが走って、うまいこといってるみたいなので submit するかい?と聞いてきても一度リターン押すと submit してくれたとかなんとか。
sevil 0.3
http://shinh.skr.jp/osx/sevil.tgz
OSX に嫌気がさしまくりだったのですが、その要因の一つは間違いなく sevil が遅いというか、 Apple Event 使ってるせいでなんか重い処理してるプロセスがあると、そのプロセスへの Apple Event の返事が遅れてスイッチが待たされる、という現象があったので、高速化してみました。
やってることとしては、まず Core Graphics Service だけ使ってウィンドウの位置を割り出して移動したいウィンドウを調べておいて、その対象のウィンドウの中心座標が他のウィンドウとかぶってなければその座標からそのウィンドウハンドル取り出して移動するって感じ。重なってれば見えてるウィンドウ全部に Apple Event 打ってなめていって対象のウィンドウが見つかったらそこに移動する。こっちのケースでもなめる量が平均半分になるのでまぁいいかも。
これでたぶん Witch より速いんじゃないかなー知らんけど。ホントは常駐して Observe がどうとかもした方がいいのかもしれないけどまぁ十分マシになったので良いことに。
sevil 自体の説明はこのへんにあるらしい。