emacs-devel
[Top][All Lists]
Advanced

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

Re: Contiguous redisplay of the menu and beeps


From: YAMAMOTO Mitsuharu
Subject: Re: Contiguous redisplay of the menu and beeps
Date: Mon, 28 May 2007 09:56:50 +0900
User-agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (Shijō) APEL/10.6 Emacs/22.0.990 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)

>>>>> On Sun, 27 May 2007 19:21:28 -0400, Richard Stallman <address@hidden> 
>>>>> said:

> Where is the actual call to `current_column' for which you
> specifically want to bind this?  Could you bind
> Qinhibit_point_motion_hooks for just that?

I meant the only direct call to `current_column' from
redisplay_internal:

  /* If %c is in the mode line, update it if needed.  */
  if (!NILP (w->column_number_displayed)
      /* This alternative quickly identifies a common case
         where no change is needed.  */
      && !(PT == XFASTINT (w->last_point)
           && XFASTINT (w->last_modified) >= MODIFF
           && XFASTINT (w->last_overlay_modified) >= OVERLAY_MODIFF)
      && (XFASTINT (w->column_number_displayed)
          != (int) current_column ()))  /* iftc */
    w->update_mode_line = Qt;

and as I said, binding Qinhibit_point_motion_hooks just around this
part as the following patch also works for me on Mac OS X.

Could someone check if this works on Windows for the original problem?

Index: src/xdisp.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/xdisp.c,v
retrieving revision 1.1149.2.2
diff -c -p -r1.1149.2.2 xdisp.c
*** src/xdisp.c 24 May 2007 23:21:32 -0000      1.1149.2.2
--- src/xdisp.c 28 May 2007 00:33:00 -0000
*************** redisplay_internal (preserve_echo_area)
*** 10836,10842 ****
    int must_finish = 0;
    struct text_pos tlbufpos, tlendpos;
    int number_of_visible_frames;
!   int count;
    struct frame *sf;
    int polling_stopped_here = 0;
  
--- 10836,10842 ----
    int must_finish = 0;
    struct text_pos tlbufpos, tlendpos;
    int number_of_visible_frames;
!   int count, count1;
    struct frame *sf;
    int polling_stopped_here = 0;
  
*************** redisplay_internal (preserve_echo_area)
*** 10974,10979 ****
--- 10974,10983 ----
        update_mode_lines++;
      }
  
+   /* Avoid invocation of point motion hooks by `current_column' below.  */
+   count1 = SPECPDL_INDEX ();
+   specbind (Qinhibit_point_motion_hooks, Qt);
+ 
    /* If %c is in the mode line, update it if needed.  */
    if (!NILP (w->column_number_displayed)
        /* This alternative quickly identifies a common case
*************** redisplay_internal (preserve_echo_area)
*** 10985,10990 ****
--- 10989,10996 ----
            != (int) current_column ()))  /* iftc */
      w->update_mode_line = Qt;
  
+   unbind_to (count1, Qnil);
+ 
    FRAME_SCROLL_BOTTOM_VPOS (XFRAME (w->frame)) = -1;
  
    /* The variable buffer_shared is set in redisplay_window and


> Or what about binding it in `current_column_1'?  Maybe that is the
> right thing to do.

Sorry, I'm afraid I'm not familiar enough with this matter.

                                     YAMAMOTO Mitsuharu
                                address@hidden




reply via email to

[Prev in Thread] Current Thread [Next in Thread]