Article View: fj.editor.xemacs
Article #321Re: スクロールの挙動
From: IMAI Hidetoshi
Date: Fri, 08 Jun 2001 04:32
Date: Fri, 08 Jun 2001 04:32
101 lines
6064 bytes
6064 bytes
今井です。 難波さんのニュースサーバーの調子が悪いらしく直接メールを いただきました。 環境: xemacs-21.1.14 On 07 Jun 2001 12:18:55 +0900, Seiichi Namba <sn@asahi-net.email.ne.jp> wrote: > 難波です。 > > 基本的には、こう > > (defun smooth-scroll-up (arg) > "Moves cursor down keeping cursor within 1/3 to 2/3 area of current window. > Scroll the window in need. > It's convenient to bind this command to down arrow key." > (interactive "p") > (let* ((height (window-height)) ;; ここも変えた。 > (parity (% height 2)) > (top-edge 0) > (btm-edge (- height 2)) ;; 本当は minibuffer があるかどうかも調べる。 > (c-line (current-line-in-window)) > (bob-not-shown ;; var. to duck ding. > (not (pos-visible-in-window-p (point-min))))) > : > > することで手元の emacs-21.0.103 では期待した通りになります。 ためしてみましたが、スクロールさせるとかなりの確率で windowの中央までジャンプしてしまいます。 > > ただし、emacs-21 では、frame-parameters の line-spacing (xemacs ではこ > のプロパティの名前は違うかもしれません)が nil (or 0) になっている時し > かうまくいきません。 > > つまり、この修正を書いた記事に述べたと思いますが、emacs-21 では > (window-height) の返り値が > (line-spacing . 3) のように frame-parameters を変更している時には実態と異なる > 値になっているので、この分の修正を行なう必要があるようです。 > > emacs-21 も xemacs も文字の描画については似たような(実際のコーディン > グは違うとしても)方式となっていると思うので、行間を変えている場合は同 > じ問題が起きるかもしれません。 > > (原因がこれだとして) > 対処方法としては let() で作っている height という変数の値を実際に > ウィンドウが表示している行数に合わせることが考えられます。 > > (前の記事にもこういうのを書いたような記憶あるんですが)、 > > (defun goddamn-emacs-get-window-height () > (count-lines > (save-excursion (move-to-window-line 0) (point)) > (save-excursion (move-to-window-line -1) (point)))) > > というのを作り(これは凄く効率悪そう。xemacs や emacs-21 にはこういう > 事をする関数がちゃんとあるかもしれません。)、 > > (let* (;;(height (window-height)) > (height (goddamn-emacs-get-window-height)) > (parity (% height 2)) > (top-edge 0) > (btm-edge height) ;; もはや minibuffer などの行数引く必要なし。 > (c-line (current-line-in-window)) > (bob-not-shown ;; var. to duck ding. > (not (pos-visible-in-window-p (point-min))))) > : 勉強不足で意味が理解できない点が多いですが、 実際にためしてみました。 しかし、やはり上記の場合と同じ結果になりました。 動きを目で見る限り、一番上もしくは下の行が半行しか表示されて いないときにカーソルが中央までジャンプするみたいです。 もしかしたら、簡単な解決方法は、windowの大きさ、もしくは文字の 大きさ行間を pixel単位で変更して半行表示されないようにすればい いのかもしれません。 > > edebug の使い方を覚えて、変数の値を確認(C-x C-e など)しつつ、1ステッ > プづつ実行してみると、関数やコマンドの動きがよく判ります。この件 > の場合はたぶん問題点がどこにあるのかすぐにつきとめることができると > 思います。 > > (defun smooth-scroll-up (arg) > > が表示されている次の行あたりに移動して、M-x edebug-defun RET し、 > 他のフレームで smooth-scroll-up を実行させるといいでしょう。 > smooth-scroll-up が表示されているバッファで SPC を押していけば > 実行が進みます。edebug は info で少し調べてからの方がいいかな。 > > なお、この記事は xemacs 使わずに書いてます(昨夜もう xemacs のソースは > 消してしまったので)ので、実態と違うこと書いてたらご容赦。 edebugについて調べてみましたが、これは mule の関数の様でした。 おそらく、xemacs は debug を使うみたいです。 土、日、月は用事があるので、アドバイスどうり火曜日に調べてみよ うと思います。
Technical Details
Message-ID:
<xl9vgm7sib2.wl@cal.infonets.hiroshima-u.ac.jp>Path:
arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!newsfeed.mesh.ad.jp!newsfeed.media.kyoto-u.ac.jp!onodera-news!onion.ish.org!honnetnews!fiasapnews!fiaskry!topic.ad.jp!news-sv.sinet!east-news.csi.ad.jp!hiroshima-u!not-for-mailReferences:
<xl9d78jgki9.wl@cal.infonets.hiroshima-u.ac.jp> <9fj2mh$8o1$1@sn.asahi-net.email.ne.jp> <xl94rtuomm1.wl@cal.infonets.hiroshima-u.ac.jp> <9fk0do$48j$1@sn.asahi-net.email.ne.jp> <xl9snhehw1z.wl@cal.infonets.hiroshima-u.ac.jp> <9fkvf1$fu9$1@sn.asahi-net.email.ne.jp> <xl9puchj0a5.wl@cal.infonets.hiroshima-u.ac.jp> <9fler4$sia$1@sn.asahi-net.email.ne.jp> <9flg0i$sia$2@sn.asahi-net.email.ne.jp> <xl9k82ptqrw.wl@cal.infonets.hiroshima-u.ac.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 1107f7,bc01201f0ce88c8c X-Google-Attributes: gid1107f7,public X-Google-ArrivalTime: 2001-06-07 21:50:07 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!newsfeed.mesh.ad.jp!newsfeed.media.kyoto-u.ac.jp!onodera-news!onion.ish.org!honnetnews!fiasapnews!fiaskry!topic.ad.jp!news-sv.sinet!east-news.csi.ad.jp!hiroshima-u!not-for-mail From: IMAI Hidetoshi <hidepin@infonets.hiroshima-u.ac.jp> Newsgroups: fj.editor.xemacs Subject: Re: スクロールの挙動 Date: Fri, 08 Jun 2001 13:32:17 +0900 Organization: Hiroshima University Lines: 103 Message-ID: <xl9vgm7sib2.wl@cal.infonets.hiroshima-u.ac.jp> References: <xl9d78jgki9.wl@cal.infonets.hiroshima-u.ac.jp> <9fj2mh$8o1$1@sn.asahi-net.email.ne.jp> <xl94rtuomm1.wl@cal.infonets.hiroshima-u.ac.jp> <9fk0do$48j$1@sn.asahi-net.email.ne.jp> <xl9snhehw1z.wl@cal.infonets.hiroshima-u.ac.jp> <9fkvf1$fu9$1@sn.asahi-net.email.ne.jp> <xl9puchj0a5.wl@cal.infonets.hiroshima-u.ac.jp> <9fler4$sia$1@sn.asahi-net.email.ne.jp> <9flg0i$sia$2@sn.asahi-net.email.ne.jp> <xl9k82ptqrw.wl@cal.infonets.hiroshima-u.ac.jp> NNTP-Posting-Host: cal.infonets.hiroshima-u.ac.jp Mime-Version: 1.0 (generated by SEMI 1.13.7 - "Awazu") Content-Type: text/plain; charset=ISO-2022-JP X-Trace: news.hiroshima-u.ac.jp 991974737 9144 133.41.33.61 (8 Jun 2001 04:32:17 GMT) X-Complaints-To: news-admin@hiroshima-u.ac.jp NNTP-Posting-Date: 8 Jun 2001 04:32:17 GMT In-Reply-To: <xl9k82ptqrw.wl@cal.infonets.hiroshima-u.ac.jp> User-Agent: Wanderlust/2.4.1 (Stand By Me) SEMI/1.13.7 (Awazu) FLIM/1.13.2 (Kasanui) MULE XEmacs/21.1 (patch 14) (Cuyahoga Valley) (i386--freebsd)