[xyzzy:07235] scroll-up, scroll-down 関数の実装
- Subject: [xyzzy:07235] scroll-up, scroll-down 関数の実装
- From: Hiroyasu Sunohara <suno@xxxxxxxxx>
- X-mailer: Denshin 8 Go V32.1.3.1
春原@ズーです。xyzzy を毎日便利に使わせていただいています。
さて、C-, と C-. で画面の 1 行スクロールをしようと、.xyzzy
に次のように書きました。
(defun scroll-up ()
(interactive)
(scroll-window -1))
(defun scroll-down ()
(interactive)
(scroll-window 1))
(global-set-key #\C-\, 'scroll-up)
(global-set-key #\C-. 'scroll-down)
しかし、これではスクロールとともにカーソルの位置がずれてしま
います。そこで、
(defun scroll-up ()
(interactive)
(save-excursion
(scroll-window -1)))
(defun scroll-down ()
(interactive)
(save-excursion
(scroll-window 1)))
(global-set-key #\C-\, 'scroll-up)
(global-set-key #\C-. 'scroll-down)
のように save-excursion でくくってみました。うまく動いている
かのように見えましたが、C-, を押しつづけてカーソルが画面の最
下行まで到達するとスクロールしなくなってしまいました。C-. に
ついても同様です。
前置きが長くなりましたが、Emacs の scroll-up, scroll-down の
ように、
・スクロールしてもテキストとカーソルの相対位置を変えない
・画面最下行での上スクロール、画面最上行での下スクロールは
素直にスクロールする
という動作を実現したいのです(すみません、説明があまりうまく
ありませんね)。このためには「現在カーソルが画面上の何行目に
あるか」を知る必要があると思うのですが、それらしき関数は存在
しますか。あるいは、もっとウマい手があるのでしょうか。
どなたかお知恵をお貸しください。
--
株式会社ズー http://www.zoo.co.jp
春原 宏保 (suno@xxxxxxxxxxxxx, suno@xxxxxxxxx)