画面のスクロールを変えたいとか
xyzzyは移動の時の画面の切り替えが、基本の一種類で特に疑問もなく使ってたので
もう少し自由に歩く。 - 自称リバースエンジニアの詰め所
http://d.hatena.ne.jp/knenet/20080510/1210428837
こういう風な色々な移動があって、そこから選べる方が本当はいいじゃないのかと思ってみた。で、自分も自分が良くやる手癖的に好みのを適当に試してみた。
(defun walk-down-as-scroll (&optional (arg 1)) "ループ動作で移動" (interactive "p") (if ;この条件にあったらscroll、会わなかったら行移動 (if (minusp arg) (or (and (= (save-excursion (beginning-of-virtual-line)(point)) (point-min)) (goto-char (point-max)) nil) (= (get-window-line) 0)) (or (and (= (save-excursion (end-of-virtual-line)(point)) (point-max)) (goto-char (point-min)) nil) (= (get-window-line)(1- (window-lines))))) (save-excursion(scroll-window(* (if (plusp arg) 1 -1)(window-height)))) (next-virtual-line arg))) (defun walk-up-as-scroll(&optional (arg 1)) (interactive "p") (walk-down-as-scroll (- arg)))
knenetさんのはコードが綺麗だったので、何か自分のが酷く汚く見える、というか、何かこれはコード重複してる感じ。まあ、それは動けばいい事にして。こういう移動がいいかなぁと思った理由は、自分の手癖で指的にC-lで直ぐrecenterするというのと、あと、画面が動いてると文字が読みにくいので画面の移動は成るべく少なくて、カーソル位置の方を動かしたい派だから。画面が切り替わった所付近が丁度読みたい関数とかで画面が切れる問題があるけど、これはC-lを癖で直ぐ押す自分的には殆ど問題ないというか、そんな感じ。
普通の移動で使ってた時は、もうちょっと上を見たいんだけどとか言う時に、キャレットを上まで動かして、少し上のほうに目的のものが見つかったら、又もとの場所にキャレットを戻してとか結構面倒な事をしてた。これはマークしておいてC-x C-xでやるのが好きだけど、本当はC-upとかで動かせばいいのかもしれないし、結構人によって色々違いそう。こういう細かい画面の動かし方とかは結構個人の手癖の影響が大きいので、やっぱり数種類あって選べるとか、そういうモードに適当に設定を渡すと切り替えれるとかあるといいのかもしれない。