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


From: Richard M . Stallman
Subject: [Emacs-diffs] Changes to emacs/src/xdisp.c
Date: Thu, 15 Sep 2005 09:16:55 -0400

Index: emacs/src/xdisp.c
diff -c emacs/src/xdisp.c:1.1053 emacs/src/xdisp.c:1.1054
*** emacs/src/xdisp.c:1.1053    Thu Sep 15 12:06:39 2005
--- emacs/src/xdisp.c   Thu Sep 15 13:16:53 2005
***************
*** 10019,10030 ****
--- 10019,10032 ----
          if (FRAME_WINDOW_P (it->f)
              && WINDOW_LEFT_FRINGE_WIDTH (it->w) > 0)
            {
+ #ifdef HAVE_WINDOW_SYSTEM
              if (val = Fget (var, Qoverlay_arrow_bitmap), SYMBOLP (val))
                {
                  int fringe_bitmap;
                  if ((fringe_bitmap = lookup_fringe_bitmap (val)) != 0)
                    return make_number (fringe_bitmap);
                }
+ #endif
              return make_number (-1); /* Use default arrow bitmap */
            }
          return overlay_arrow_string_or_property (var);
***************
*** 15959,15965 ****
        {
        /* A string: output it and check for %-constructs within it.  */
        unsigned char c;
!       const unsigned char *this, *lisp_string;
  
        if (!NILP (props) || risky)
          {
--- 15961,15967 ----
        {
        /* A string: output it and check for %-constructs within it.  */
        unsigned char c;
!       int offset = 0;
  
        if (!NILP (props) || risky)
          {
***************
*** 16017,16024 ****
              }
          }
  
!       this = SDATA (elt);
!       lisp_string = this;
  
        if (literal)
          {
--- 16019,16025 ----
              }
          }
  
!       offset = 0;
  
        if (literal)
          {
***************
*** 16041,16082 ****
            break;
          }
  
        while ((precision <= 0 || n < precision)
!              && *this
               && (mode_line_target != MODE_LINE_DISPLAY
                   || it->current_x < it->last_visible_x))
          {
!           const unsigned char *last = this;
  
            /* Advance to end of string or next format specifier.  */
!           while ((c = *this++) != '\0' && c != '%')
              ;
  
!           if (this - 1 != last)
              {
                int nchars, nbytes;
  
                /* Output to end of string or up to '%'.  Field width
                   is length of string.  Don't output more than
                   PRECISION allows us.  */
!               --this;
  
!               prec = c_string_width (last, this - last, precision - n,
                                       &nchars, &nbytes);
  
                switch (mode_line_target)
                  {
                  case MODE_LINE_NOPROP:
                  case MODE_LINE_TITLE:
!                   n += store_mode_line_noprop (last, 0, prec);
                    break;
                  case MODE_LINE_STRING:
                    {
!                     int bytepos = last - lisp_string;
                      int charpos = string_byte_to_char (elt, bytepos);
                      int endpos = (precision <= 0
!                                   ? string_byte_to_char (elt,
!                                                          this - lisp_string)
                                    : charpos + nchars);
  
                      n += store_mode_line_string (NULL,
--- 16042,16085 ----
            break;
          }
  
+       /* Handle the non-literal case.  */
+ 
        while ((precision <= 0 || n < precision)
!              && SREF (elt, offset) != 0
               && (mode_line_target != MODE_LINE_DISPLAY
                   || it->current_x < it->last_visible_x))
          {
!           int last_offset = offset;
  
            /* Advance to end of string or next format specifier.  */
!           while ((c = SREF (elt, offset++)) != '\0' && c != '%')
              ;
  
!           if (offset - 1 != last_offset)
              {
                int nchars, nbytes;
  
                /* Output to end of string or up to '%'.  Field width
                   is length of string.  Don't output more than
                   PRECISION allows us.  */
!               offset--;
  
!               prec = c_string_width (SDATA (elt) + last_offset,
!                                      offset - last_offset, precision - n,
                                       &nchars, &nbytes);
  
                switch (mode_line_target)
                  {
                  case MODE_LINE_NOPROP:
                  case MODE_LINE_TITLE:
!                   n += store_mode_line_noprop (SDATA (elt) + last_offset, 0, 
prec);
                    break;
                  case MODE_LINE_STRING:
                    {
!                     int bytepos = last_offset;
                      int charpos = string_byte_to_char (elt, bytepos);
                      int endpos = (precision <= 0
!                                   ? string_byte_to_char (elt, offset)
                                    : charpos + nchars);
  
                      n += store_mode_line_string (NULL,
***************
*** 16087,16093 ****
                    break;
                  case MODE_LINE_DISPLAY:
                    {
!                     int bytepos = last - lisp_string;
                      int charpos = string_byte_to_char (elt, bytepos);
                      n += display_string (NULL, elt, Qnil, 0, charpos,
                                           it, 0, prec, 0,
--- 16090,16096 ----
                    break;
                  case MODE_LINE_DISPLAY:
                    {
!                     int bytepos = last_offset;
                      int charpos = string_byte_to_char (elt, bytepos);
                      n += display_string (NULL, elt, Qnil, 0, charpos,
                                           it, 0, prec, 0,
***************
*** 16098,16109 ****
              }
            else /* c == '%' */
              {
!               const unsigned char *percent_position = this;
  
                /* Get the specified minimum width.  Zero means
                   don't pad.  */
                field = 0;
!               while ((c = *this++) >= '0' && c <= '9')
                  field = field * 10 + c - '0';
  
                /* Don't pad beyond the total padding allowed.  */
--- 16101,16112 ----
              }
            else /* c == '%' */
              {
!               int percent_position = offset;
  
                /* Get the specified minimum width.  Zero means
                   don't pad.  */
                field = 0;
!               while ((c = SREF (elt, offset++)) >= '0' && c <= '9')
                  field = field * 10 + c - '0';
  
                /* Don't pad beyond the total padding allowed.  */
***************
*** 16123,16129 ****
                    int bytepos, charpos;
                    unsigned char *spec;
  
!                   bytepos = percent_position - lisp_string;
                    charpos = (STRING_MULTIBYTE (elt)
                               ? string_byte_to_char (elt, bytepos)
                               : bytepos);
--- 16126,16132 ----
                    int bytepos, charpos;
                    unsigned char *spec;
  
!                   bytepos = percent_position;
                    charpos = (STRING_MULTIBYTE (elt)
                               ? string_byte_to_char (elt, bytepos)
                               : bytepos);
***************
*** 16181,16188 ****
                else /* c == 0 */
                  break;
              }
-           this += SDATA (elt) - lisp_string;
-           lisp_string = SDATA (elt);
          }
        }
        break;
--- 16184,16189 ----




reply via email to

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