海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
ひょっとしたら、解決方法を捜し出すかもしれないシリーズ。
w3m で閲覧中に、CTRL+l で recenter (現在のカーソル位置がまんなかにくるように再描画) してほしい。
ソースちら見なので、おお外ししているかもしれませんが、
/* Redraw screen */ DEFUN(rdrwSc, REDRAW, "Redraw screen") { clear(); arrangeCursor(Currentbuf); displayBuffer(Currentbuf, B_FORCE_REDRAW); }
arrangeCursor の前に buf->topLine->linenumber を書き換えてやればいいように思う。 (改悪路線まっしぐら)
と思って少し上をみると (main.c のね)、ちょうどその機能があった。デフォルトで z にバインドされている。
DEFUN(ctrCsrH, CENTER_H, "Move to the center line") { int offsetx; if (Currentbuf->firstLine == NULL) return; offsetx = Currentbuf->cursorX - Currentbuf->COLS / 2; if (offsetx != 0) { columnSkip(Currentbuf, offsetx); arrangeCursor(Currentbuf); displayBuffer(Currentbuf, B_NORMAL); } }
おお、ずばりじゃないか。
……と思ったが、思い通りにいかないな。 ~/.w3m/keymap で C-l と z のキーバインドを変更してみたりしても、どうも CTRL-l の方が意図通りにならない。
なんかあるのか。困っているわけでもないので、しばらく保留。
z になれるという選択肢もある。
→ ぼくの欲しかった recenter は、CENTER_H じゃなくて、CENTER_V でした orz.
もこの機会に覚えてしまおう。特に、CENTER_H が欲しい場面はいままでもあった。
一応、普段使う w3m は、Redraw で CENTER_V 相当の移動も行うように変更した。 改悪っぽい気もするが、個人的には、とても気持ちがいい。
そんなことより、ちらっとだけど、ソースを読むのがおもしろかった。