emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] emacs/src keymap.c


From: Kenichi Handa
Subject: [Emacs-diffs] emacs/src keymap.c
Date: Thu, 27 Nov 2008 08:02:03 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Kenichi Handa <handa>   08/11/27 08:02:03

Modified files:
        src            : keymap.c 

Log message:
        (describe_vector): Adjusted for the change of
        char_table_ref_and_range.  For char-table, put boundary between
        non-ASCII and 8-bit characters.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/src/keymap.c?cvsroot=emacs&r1=1.376&r2=1.377

Patches:
Index: keymap.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/keymap.c,v
retrieving revision 1.376
retrieving revision 1.377
diff -u -b -r1.376 -r1.377
--- keymap.c    16 Jul 2008 19:23:49 -0000      1.376
+++ keymap.c    27 Nov 2008 08:02:02 -0000      1.377
@@ -3695,7 +3695,7 @@
   int first = 1;
   struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
   /* Range of elements to be handled.  */
-  int from, to;
+  int from, to, stop;
   Lisp_Object character;
   int starting_i;
 
@@ -3725,9 +3725,12 @@
     suppress = intern ("suppress-keymap");
 
   from = 0;
-  to = CHAR_TABLE_P (vector) ? MAX_CHAR + 1 : XVECTOR (vector)->size;
+  if (CHAR_TABLE_P (vector))
+    stop = MAX_5_BYTE_CHAR + 1, to = MAX_CHAR + 1;
+  else
+    stop = to = XVECTOR (vector)->size;
 
-  for (i = from; i < to; i++)
+  for (i = from; ; i++)
     {
       int this_shadowed = 0;
       int range_beg, range_end;
@@ -3735,10 +3738,21 @@
 
       QUIT;
 
+      if (i == stop)
+       {
+         if (i == to)
+           break;
+         stop = to;
+       }
+
       starting_i = i;
 
       if (CHAR_TABLE_P (vector))
-       val = char_table_ref_and_range (vector, i, &range_beg, &i);
+       {
+         range_beg = i;
+         i = stop - 1;
+         val = char_table_ref_and_range (vector, range_beg, &range_beg, &i);
+       }
       else
        val = AREF (vector, i);
       definition = get_keyelt (val, 0);
@@ -3799,19 +3813,22 @@
       insert1 (Fkey_description (kludge, prefix));
 
       /* Find all consecutive characters or rows that have the same
-         definition.  But, for elements of a top level char table, if
-         they are for charsets, we had better describe one by one even
-         if they have the same definition.  */
+         definition.  But, VECTOR is a char-table, we had better put a
+         boundary between normal characters (-#x3FFF7F) and 8-bit
+         characters (#x3FFF80-).  */
       if (CHAR_TABLE_P (vector))
-       while (i + 1 < to
-              && (val = char_table_ref_and_range (vector, i + 1,
+       {
+         while (i + 1 < stop
+                && (range_beg = i + 1, range_end = stop - 1,
+                  val = char_table_ref_and_range (vector, range_beg,
                                                   &range_beg, &range_end),
                   tem2 = get_keyelt (val, 0),
                   !NILP (tem2))
               && !NILP (Fequal (tem2, definition)))
          i = range_end;
+       }
       else
-       while (i + 1 < to
+       while (i + 1 < stop
               && (tem2 = get_keyelt (AREF (vector, i + 1), 0),
                   !NILP (tem2))
               && !NILP (Fequal (tem2, definition)))




reply via email to

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