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,v


From: Kenichi Handa
Subject: [Emacs-diffs] Changes to emacs/src/xdisp.c,v
Date: Thu, 21 Feb 2008 07:03:57 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Kenichi Handa <handa>   08/02/21 07:03:57

Index: xdisp.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/xdisp.c,v
retrieving revision 1.1185
retrieving revision 1.1186
diff -u -b -r1.1185 -r1.1186
--- xdisp.c     17 Feb 2008 21:56:39 -0000      1.1185
+++ xdisp.c     21 Feb 2008 07:03:56 -0000      1.1186
@@ -917,7 +917,8 @@
 static int display_mode_line P_ ((struct window *, enum face_id, Lisp_Object));
 static int display_mode_element P_ ((struct it *, int, int, int, Lisp_Object, 
Lisp_Object, int));
 static int store_mode_line_string P_ ((char *, Lisp_Object, int, int, int, 
Lisp_Object));
-static char *decode_mode_spec P_ ((struct window *, int, int, int, int *));
+static char *decode_mode_spec P_ ((struct window *, int, int, int, int *,
+                                  Lisp_Object *));
 static void display_menu_bar P_ ((struct window *));
 static int display_count_lines P_ ((int, int, int, int, int *));
 static int display_string P_ ((unsigned char *, Lisp_Object, Lisp_Object,
@@ -17234,14 +17235,14 @@
                    int multibyte;
                    int bytepos, charpos;
                    unsigned char *spec;
+                   Lisp_Object string;
 
                    bytepos = percent_position;
                    charpos = (STRING_MULTIBYTE (elt)
                               ? string_byte_to_char (elt, bytepos)
                               : bytepos);
-
-                   spec
-                     = decode_mode_spec (it->w, c, field, prec, &multibyte);
+                   spec = decode_mode_spec (it->w, c, field, prec, &multibyte,
+                                            &string);
 
                    switch (mode_line_target)
                      {
@@ -17251,8 +17252,11 @@
                        break;
                      case MODE_LINE_STRING:
                        {
+                         if (NILP (string))
+                           {
                          int len = strlen (spec);
-                         Lisp_Object tem = make_string (spec, len);
+                             string = make_string (spec, len);
+                           }
                          props = Ftext_properties_at (make_number (charpos), 
elt);
                          /* Should only keep face property in props */
                          n += store_mode_line_string (NULL, tem, 0, field, 
prec, props);
@@ -17262,8 +17266,10 @@
                        {
                          int nglyphs_before, nwritten;
 
+                         if (STRINGP (string))
+                           spec = NULL;
                          nglyphs_before = it->glyph_row->used[TEXT_AREA];
-                         nwritten = display_string (spec, Qnil, elt,
+                         nwritten = display_string (spec, string, elt,
                                                     charpos, 0, it,
                                                     field, prec, 0,
                                                     multibyte);
@@ -17927,18 +17933,19 @@
 static char lots_of_dashes[] = 
"--------------------------------------------------------------------------------------------------------------------------------------------";
 
 static char *
-decode_mode_spec (w, c, field_width, precision, multibyte)
+decode_mode_spec (w, c, field_width, precision, multibyte, string)
      struct window *w;
      register int c;
      int field_width, precision;
      int *multibyte;
+     Lisp_Object *string;
 {
   Lisp_Object obj;
   struct frame *f = XFRAME (WINDOW_FRAME (w));
   char *decode_mode_spec_buf = f->decode_mode_spec_buffer;
   struct buffer *b = current_buffer;
 
-  obj = Qnil;
+  *string = obj = Qnil;
   *multibyte = 0;
 
   switch (c)
@@ -18331,6 +18338,7 @@
   if (STRINGP (obj))
     {
       *multibyte = STRING_MULTIBYTE (obj);
+      *string = obj;
       return (char *) SDATA (obj);
     }
   else




reply via email to

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