« Ruby 1.8.6 & Rails 1.2.3 | Main | LeopardのKeychainはいかがなものか »
2007年10月10日
recenter-masahiro
[ カテゴリ:
Emacsen
]
たまにはなにか書いてみる。Emacsでプロジェクタに表示しながらログを採るってことがあるかと思います。いやぼくはあまりロガーやんないですけど、まあそういうことはよくあるよねってことで。
で、ロガーは自分のラップトップの画面を見て書きたいけど、他のこともしたいので画面のミラーはしたくないわけです。そこで、Emacsちゅうくらいでmake-frame-commandとかやって、 違うフレームにログのバッファを表示させ、そのフレームだけをプロジェクタの画面に持って行ったりするわけですが、こいつがちょっとうまくいかない。つまり、同じバッファでもwindowごとにポイントは違うので、がんがんログをとって気がつくとプロジェクタではwindowの外、なんてことになったりするのですな。
その昔、そんなことがあったので、それを解消するべくrecenter-masahiroってのを書きました。 名前の由来はともかく(ぉ、それを懐かしむとともに、折角なので今ならこう書くぜというバージョンを晒しておきます。
(defadvice recenter (around recenter-masahiro activate)
(let ((current-frame (selected-frame))
(current-buffer (current-buffer))
(current-point (point)))
ad-do-it
(mapc
(lambda (frame)
(mapc
(lambda (window)
(select-window window)
(goto-char current-point)
ad-do-it)
(get-buffer-window-list current-buffer nil frame)))
(delq current-frame (frame-list)))))
要するに、recenterするときに他のwindowで表示されている同一バッファもrecenterしちゃおう、 というだけだったりします。