emacsのマウスホイールでのスクロールを1行単位でかつホイールのあるところを動かす
emacs24は字句的スコープが導入されるらしい。4/1にlexcal scopeブランチがマージされたそうだ。デフォルトだとDynamic Bindingのままで、-*- lexical-binding: t -*-って書いたファイルだけがlexical bindingになるみたい。
emacsではmwheel-follow-mouseを設定しておくとマウスホイールのあるウィンドウのところでスクロールしてくれるのだが、一度にスクロールする行数の方をカスタマイズしようとすると世間に出回っているカスタマイズのコードと両立できなかったので、mwheel.elを参考にしつつ自分で書いた。
.emacsに以下の設定を書くとそのような動作になる。scroll-up 1のところをscroll-up 3とかにすれば、3行単位でのスクロールになる。
; scroll by wheel (mouse-wheel-mode t) (defun scroll (event direction) (let ((curwin (prog1 (selected-window) (select-window (mwheel-event-window event))))) (if (eq direction 'up) (scroll-up 1) (scroll-down 1)) (if curwin (select-window curwin)))) (defun scroll-down-with-lines (event) "" (interactive "e") (scroll event 'down)) (defun scroll-up-with-lines (event) "" (interactive "e") (scroll event 'up)) (global-set-key [mouse-4] 'scroll-down-with-lines) (global-set-key [mouse-5] 'scroll-up-with-lines)
明らかにもっと短くできそうなコードだけど、あんまり手間かけてもしょうがないしまぁこんなもんでしょう。
Lisp書くのは久しぶりだったが、やはり書くのは楽しい。読むのはあまり好きではないけど。