[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:07235] scroll-up, scroll-down 関数の実装



春原@ズーです。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)

Index Home