2011年9月
09/02
vim fileencodings
どういう順番で書けば良いのかいまいちよく分からず文字化けに悩まされていたが、ここを見てようやく理解した。
09/03
vim matchparen
vimを使っていると、かっこにカーソルが当たったときに対応するかっこがハイライトされるが、チカチカして目が痛くなったので切った。.vimrcに
set noshowmatch
と書くのは誤りで(これは対応するかっこに「一瞬移動」する。しかもデフォルトではoff)、こう書けば良い。
let loaded_matchparen=1
これでかっこをハイライトするプラグインが読み込まれなくなる。つり合いを確認したい場合は%を使えばいい。
FreeBSDでCDを再生したい with mplayer
CD-DAを扱うためにaudio/cdparanoiaが必要。mplayerのconfigオプションに項目があるので忘れずにチェックを入れること。
09/04
dwm patch
作りたい。
- ウィンドウ順序の回転(スタック配置時)
- zoom(Modkey+Enter)の挙動
- フォーカスのあるウィンドウとmasterを交換する
- masterにフォーカスがある時はスタックの一番上と交換する
- フォーカスは常にmasterに移動する
- スタックの一番下にフォーカスを合わせてzoomすれば回転相当のことはできるが、面倒なので無条件で回転させたい
- masterをスタックの一番上に持っていって、スタックの底がmasterになる
- zoom(Modkey+Enter)の挙動
- 設定ファイルによるフォント及び色の指定、できれば実行中のリロード
- 再コンパイルと再起動が面倒なので。一貫性の面では悪化するが……
- これ以上のことを変えたくなったときは素直にawesomeなりxmonadを使えばいいだろう
09/07
Window"s"なんだからウィンドウを重ねたくない
Windowsでもタイルっぽく配置してくれる何かが欲しくなってきた。以下考えたこととかを箇条書き。
http://www.atmarkit.co.jp/fwin2k/win2ktips/202quicktiling/quicktiling.html
- 単純なやつなら昔からあったらしい。知らなかった
- タイル「っぽく」というのはおそらく重要。1ピクセルの隙もなく詰めるとWindowsでは逆にやりにくいかもしれない
- まずは単純に重なりを除去するプログラムとかから試すべきか
- グローバルフック
SetWindowsHookEx()
- DLL
- dwm-win32のWin32部分のコードが参考になる
- サイズ変更不可能でないやつはスルーしないといけない
GetWindowLongPtr()で特定ウィンドウのスタイルを取得してWS_THICKFRAMEとかWS_MINIMIZEBOXとかWS_MAXIMIZEBOXを持っていればOKだろう
あとWS_EX_TOOLWINDOWとかWS_EX_TOPMOSTがついてるやつにも気をつけないといけない
- 前者は多分タイル化すべきでない。後者はどうするか
tile -> tiler -> 平ら -> ぺったんこ。よし名称は決まった
実現するかどうかは分からない。
focus-follows-mouse on Windows
上のを書いてて、グローバルフックでマウスを捕まえればWindowsでfocus-follows-mouseを実現できるのではないか、と考えた。滅茶苦茶重くなる可能性もあるが。
そんなことするまでも無く設定項目があった。コントロールパネル -> コンピューターの簡単操作 -> マウスの動作の変更 -> マウスポインターをウィンドウ上に合わせたときにウィンドウを選択します、にチェック。(Windows7、コントロールパネルは表示方法: カテゴリ)
ただし、フォーカスが当たったウィンドウは強制的に最前面に出てくる。twmとかdwmみたいにZオーダーが変わらないと便利な局面があるのだが……あと、小さいウィンドウはフォーカスを外してしまいがちで、捕まえるのが難しかったりする。
09/11
dwmでウィンドウの順序を回転する
1 --- dwm.original.c 2011-09-04 14:38:30.232071429 +0900
2 +++ dwm.c 2011-09-16 00:14:43.811560391 +0900
3 @@ -206,6 +206,7 @@
4 static void resizeclient(Client *c, int x, int y, int w, int h);
5 static void resizemouse(const Arg *arg);
6 static void restack(Monitor *m);
7 +static void rotate(const Arg *arg);
8 static void run(void);
9 static void scan(void);
10 static Bool sendevent(Client *c, Atom proto);
11 @@ -1403,6 +1404,18 @@
12 }
13
14 void
15 +rotate(const Arg *arg) {
16 + Client *c, *bottom;
17 +
18 + if(!selmon->lt[selmon->sellt]->arrange)
19 + return;
20 + for(bottom = c = nexttiled(selmon->clients); c; c = nexttiled(c->next))
21 + bottom = c;
22 + if(bottom)
23 + pop(bottom);
24 +}
25 +
26 +void
27 run(void) {
28 XEvent ev;
29 /* main event loop */
30 @@ -2067,3 +2080,4 @@
31 XCloseDisplay(dpy);
32 return EXIT_SUCCESS;
33 }
34 +
35
こういうことがしたかったので作った。dwm-5.9-rotate.diff
例によってconfig.hのkeys[]に追加する必要がある。実装は、オリジナルのzoom()(フォーカスの当たっているウィンドウをmasterに持ってくる関数)とほとんど変わらない。