Ticket #208 (assigned 不具合)

Opened 3 years ago

Last modified 3 years ago

Infoバッファなどでマウスホイールによるスクロールが不自然

Reported by: anonymous Assigned to: horiguti (accepted)
Priority: minor Milestone: ver 3.00
Component: Emacs Lisp Version: 3.00 (開発中)
Keywords: Cc:

Description

3.0 の r3918 での現象ですが、 ある程度の行数がある Info バッファ(たとえば、Emacs Manual のTOP ノード)で マウスホイールで下方向へスクロールすると、同じ間隔でホイールをまわしていても、 スクロールしたり、しばらくスクロールしなかったりといった動作をします。 ホイールをまわしてもスクロールしなくなっている状態では、 スクロールバーの下ボタンをクリックしてもやはりスクロールしませんでした。

Attachments

Change History

10/18/05 21:06:27 changed by gotoh

r3924で meadow -q で起動して、直ちに M-x info して Emacs に移動し、 ゆっくりと回して最後までスクロールさせてみたのですが、症状はでませんでした。 2度ほど試したのですが再現せず。 たたた、と早くもまわしてみましたが、特に気になるところも無く。

そちらではEmacs Manual で再現性が高いのですか? meadow -q でも再現しますか?

11/08/05 23:57:01 changed by miyoshi

  • status changed from new to closed.
  • resolution set to worksforme.

私の環境でも再現しないので一旦閉じます。

11/10/05 02:11:01 changed by anonymous

反応がわるくてすみません。 わたしのひとつの環境(WindowsXP SP2 Pentium4 HT有効)では meadow -q で Emacs Manual で確実に発生します。でも別の環境(Windows2000SP4 Pentium3)では発生しませんでした。もうちょっと条件をよく調べてみます。

11/10/05 12:46:13 changed by horiguti

これと同じかは微妙ですが, 私の環境でもホイールによるスクロールの異常が時々起きます.

私が経験したのは .c .el ファイルです. フレーム中に複数のウィンドウがある状態でアクティブでないほうのウィンドウをマウスホイールでスクロールすると, 半ページから1ページくらいスクロールした瞬間に(たぶん)もとの場所(point)に戻されています. これを繰り返すので延々同じ場所を行ったりきたりすることになります. このウィンドウを一度クリックしてクティブにすると普通にスクロールできるようになります.

11/10/05 13:12:23 changed by horiguti

  • status changed from closed to reopened.
  • resolution deleted.

たぶん再現の条件がわかったと思います. これで再現しますか?

  • まずホイールスクロールを試してみて, 一度に何行移動しているかを確認します. この行数を Ns とします. Nsは普通は3行だと思います.
  • フレームを2分割して, 上のウィンドウのバッファの内容表示の部分の高さを Ns の倍数 - 1 でかつ偶数に設定します. ( (window-height)が Ns の倍数)
  • 上のフレームの行数を最下行からNs行上に戻った行をクリックしてポイントを設定します. 一番上が1行目で最下行が20行目でNs=3 なら 17行目に設定します.
  • 下のフレームをクリックしてアクティブにしたら上のウィンドウ内でホイールを下スクロールの方向に回します.

そうすると下に向かってスクロールした瞬間にポイントがウィンドウの内容が上のほうに戻ってしまって, スクロールを続けるとスクロールと戻るのを繰り返すようになると思います.

スクロールの結果最下行になったときの処理がいけないのだと思います.

11/10/05 13:14:12 changed by horiguti

  • owner set to horiguti.
  • status changed from reopened to new.

11/10/05 13:14:24 changed by horiguti

  • status changed from new to assigned.

11/10/05 13:25:25 changed by horiguti

ポイントが最下行にあるときにウィンドウの選択が外れる(deselected)と勝手に recenter しますね.
emacsにはない挙動です.

11/10/05 14:42:40 changed by horiguti

たぶん#225の問題が原因だと思います. というわけでこれの結果待ちとします.

11/11/05 14:20:50 changed by horiguti

というわけで ticket:225 は解決すべき問題ではないと思われるため, スクロールの方で対処しました.

r3961 です.

11/24/05 12:26:33 changed by anonymous

元の報告者ですが、自分のところでは、ホイール1回で1行スクロールでした。(たぶんTweakUIで設定。) それで、r3981で試したのですが、1行スクロールでは、やはり発生するようです。

あと、horiguti さんの再現条件は、自分の環境(WindowsXP sp2)で、3行スクロールにしても発生しないようでした。

一応、確認時は 全て -q -no-site-file で実行しています。

11/25/05 12:58:04 changed by horiguti

どのようにしてインストールしたものでしょうか.

M-x describe-function<RET>scroll-but-point<RET>

で, 以下と異なるメッセージ("&optional window"がないとか)が出てきたら正しくバージョンアップできていません.

scroll-but-point is a compiled Lisp function in `mw32scroll.el'.
(scroll-but-point line &optional window)

Neglecting point, scroll current window.
If the point is out of the window, the point is moved to the
center of the window.
If window is nil, scroll current window.

11/28/05 12:31:13 changed by anonymous

Meadow は、以下のファイルをcygwin でコンパイルして使っています。

http://www.meadowy.org/meadow/dists/3.00/packages/Meadow-src-r3981.tar.bz2

scroll-but-pointのメッセージは同じものが表示されました。

11/28/05 18:42:34 changed by anonymous

行頭の text-property に display (space ...) が設定されていると vertical-motion の挙動がおかしいようです。

そのため、例えば Info: (dir) でスクロールバーの下にある三角の描かれたボタン (何て言うのか知らない)をクリックして下に一行ずつスクロールしようとすると

* Emacs Lisp Introduction: (eintr).

の次の行でひっかかってスクロールしません。

11/30/05 17:48:40 changed by horiguti

そのようです. 状況はわかりました. 同じことは emacs でも起きますね.

ご自分でコンパイルされているようですが, 以下のパッチで解消するかを確認してもらえないでしょうか.

Index: indent.c
===================================================================
--- indent.c	(revision 3993)
+++ indent.c	(working copy)
@@ -2074,7 +2074,7 @@
     {
       int it_start;
       int oselective;
-      int start_on_image_p;
+      int start_on_image_or_stretch_p;
 
       SET_TEXT_POS (pt, PT, PT_BYTE);
       start_display (&it, w, pt);
@@ -2086,7 +2086,8 @@
 	 while the end position is really at some X > 0, the same X that
 	 PT had.  */
       it_start = IT_CHARPOS (it);
-      start_on_image_p = (it.method == GET_FROM_IMAGE);
+      start_on_image_or_stretch_p = (it.method == GET_FROM_IMAGE
+				     || it.method == GET_FROM_STRETCH);
       reseat_at_previous_visible_line_start (&it);
       it.current_x = it.hpos = 0;
       /* Temporarily disable selective display so we don't move too far */
@@ -2097,9 +2098,10 @@
 
       /* Move back if we got too far.  This may happen if
 	 truncate-lines is on and PT is beyond right margin.
-	 It may also happen if it_start is on an image --
-	 in that case, don't go back.  */
-      if (IT_CHARPOS (it) > it_start && XINT (lines) > 0 && !start_on_image_p)
+	 It may also happen if it_start is on an image or a stretch
+	 glyph -- in that case, don't go back.  */
+      if (IT_CHARPOS (it) > it_start && XINT (lines) > 0
+	  && !start_on_image_or_stretch_p)
 	move_it_by_lines (&it, -1, 0);
 
       it.vpos = 0;

12/01/05 17:38:17 changed by anonymous

r3990に上記パッチをあてたところ、 直りました!! ありがとうございます。

ところで、emacsでも起きるという話ですが、 mouse-wheel-scroll-amount を 1 にしたらおきるはず ってことになるのでしょうか? 最近の 22.0.50 では、ちょっと発生させられなかったのでちょっと気になりました。

12/01/05 19:43:53 changed by anonymous

あ、マウスによる操作は、必ずしも関係なくて、 vertical-motion を直接使えば同じ動作になるってことですね。

12/02/05 13:20:12 changed by horiguti

  • priority changed from major to minor.

そうです. スクロールがおかしいのはその結果です. emacs 方面で報告はしたので修正されれば Meadow も直ります. しばらくお待ち下さい.


Add/Change #208 (Infoバッファなどでマウスホイールによるスクロールが不自然)




Change Properties
Action