カーソル位置を維持したままスクロールするelisp

でも、Emacs デフォルトの半画面スクロールのままだと、気持ち悪いので1行スクロールの設定も追加してみた。

(setq scroll-conservatively 35
      scroll-margin 0
      scroll-step 1)

半画面スクロールになれてしまってたけど、やっぱりこっちのほうがいい。

この設定だとウィンドウの上下端に行かないとスクロールできないので、自分はカーソル位置を維持したまま1行スクロールできる以下のelispを使っています。学生の頃友達に教えてもらったものです。

(defun scroll-up-in-place (n)
  (interactive "p")
  (previous-line n)
  (scroll-down n))

(defun scroll-down-in-place (n)
  (interactive "p")
  (next-line n)
  (scroll-up n))

(global-set-key "\M-p" 'scroll-up-in-place)
(global-set-key [M-up] 'scroll-up-in-place)
(global-set-key "\M-n" 'scroll-down-in-place)
(global-set-key [M-down] 'scroll-down-in-place)

キーバインドは、C-p,C-nでカーソル1行移動なのでそれに合わせてM-p,M-nとしています。ひょっとしたらEmacs自体に用意されている気がしないでもないですが。。。