emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] Changes to emacs/src/xdisp.c [emacs-unicode-2]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/src/xdisp.c [emacs-unicode-2]
Date: Thu, 09 Sep 2004 08:09:19 -0400

Index: emacs/src/xdisp.c
diff -c emacs/src/xdisp.c:1.843.2.20 emacs/src/xdisp.c:1.843.2.21
*** emacs/src/xdisp.c:1.843.2.20        Sat Sep  4 09:14:27 2004
--- emacs/src/xdisp.c   Thu Sep  9 09:36:35 2004
***************
*** 10759,10764 ****
--- 10759,10765 ----
    int string_before_pos;
    int x = row->x;
    int cursor_x = x;
+   int cursor_from_overlay_pos = 0;
    int pt_old = PT - delta;
  
    /* Skip over glyphs not having an object at the start of the row.
***************
*** 10784,10789 ****
--- 10785,10796 ----
          string_start = NULL;
          x += glyph->pixel_width;
          ++glyph;
+         if (cursor_from_overlay_pos
+             && last_pos > cursor_from_overlay_pos)
+           {
+             cursor_from_overlay_pos = 0;
+             cursor = 0;
+           }
        }
        else
        {
***************
*** 10793,10802 ****
          /* Skip all glyphs from string.  */
          do
            {
              if ((cursor == NULL || glyph > cursor)
                  && !NILP (Fget_char_property (make_number ((glyph)->charpos),
!                                               Qcursor, (glyph)->object)))
                {
                  cursor = glyph;
                  cursor_x = x;
                }
--- 10800,10820 ----
          /* Skip all glyphs from string.  */
          do
            {
+             int pos;
              if ((cursor == NULL || glyph > cursor)
                  && !NILP (Fget_char_property (make_number ((glyph)->charpos),
!                                               Qcursor, (glyph)->object))
!                 && (pos = string_buffer_position (w, glyph->object,
!                                                   string_before_pos),
!                     (pos == 0   /* From overlay */
!                      || pos == pt_old)))
                {
+                 /* Estimate overlay buffer position from the buffer
+                    positions of the glyphs before and after the overlay.
+                    Add 1 to last_pos so that if point corresponds to the
+                    glyph right after the overlay, we still use a 'cursor'
+                    property found in that overlay.  */
+                 cursor_from_overlay_pos = pos == 0 ? last_pos+1 : 0;
                  cursor = glyph;
                  cursor_x = x;
                }
***************
*** 15876,15890 ****
  
  
  DEFUN ("format-mode-line", Fformat_mode_line, Sformat_mode_line,
!        0, 3, 0,
         doc: /* Return the mode-line of selected window as a string.
  First optional arg FORMAT specifies a different format string (see
  `mode-line-format' for details) to use.  If FORMAT is t, return
  the buffer's header-line.  Second optional arg WINDOW specifies a
  different window to use as the context for the formatting.
! If third optional arg NO-PROPS is non-nil, string is not propertized.  */)
!      (format, window, no_props)
!      Lisp_Object format, window, no_props;
  {
    struct it it;
    int len;
--- 15894,15909 ----
  
  
  DEFUN ("format-mode-line", Fformat_mode_line, Sformat_mode_line,
!        0, 4, 0,
         doc: /* Return the mode-line of selected window as a string.
  First optional arg FORMAT specifies a different format string (see
  `mode-line-format' for details) to use.  If FORMAT is t, return
  the buffer's header-line.  Second optional arg WINDOW specifies a
  different window to use as the context for the formatting.
! If third optional arg NO-PROPS is non-nil, string is not propertized.
! Fourth optional arg BUFFER specifies which buffer to use.  */)
!   (format, window, no_props, buffer)
!      Lisp_Object format, window, no_props, buffer;
  {
    struct it it;
    int len;
***************
*** 15896,15907 ****
      window = selected_window;
    CHECK_WINDOW (window);
    w = XWINDOW (window);
-   CHECK_BUFFER (w->buffer);
  
!   if (XBUFFER (w->buffer) != current_buffer)
      {
        old_buffer = current_buffer;
!       set_buffer_internal_1 (XBUFFER (w->buffer));
      }
  
    if (NILP (format) || EQ (format, Qt))
--- 15915,15930 ----
      window = selected_window;
    CHECK_WINDOW (window);
    w = XWINDOW (window);
  
!   if (NILP (buffer))
!     buffer = w->buffer;
! 
!   CHECK_BUFFER (buffer);
! 
!   if (XBUFFER (buffer) != current_buffer)
      {
        old_buffer = current_buffer;
!       set_buffer_internal_1 (XBUFFER (buffer));
      }
  
    if (NILP (format) || EQ (format, Qt))




reply via email to

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