]> git.eshelyaron.com Git - emacs.git/commitdiff
(char_resolve_modifier_mask): Fix previous change.
authorKenichi Handa <handa@m17n.org>
Wed, 5 Mar 2008 05:12:06 +0000 (05:12 +0000)
committerKenichi Handa <handa@m17n.org>
Wed, 5 Mar 2008 05:12:06 +0000 (05:12 +0000)
src/character.c

index f34e30912dc2125bbeda7060366de973d4fa2b56..457d57f9251ce53320b5193daf7f0919cd869c5f 100644 (file)
@@ -115,24 +115,18 @@ char_resolve_modifier_mask (c)
        c &= ~CHAR_SHIFT;
       else if ((c & 0377) >= 'a' && (c & 0377) <= 'z')
        c = (c & ~CHAR_SHIFT) - ('a' - 'A');
-      /* Shift modifier with ASCII control characters should be
-        ignored.  */
-      else if ((c & ~CHAR_MODIFIER_MASK) < 0x20)
+      /* Shift modifier for control characters and SPC is ignored.  */
+      else if ((c & ~CHAR_MODIFIER_MASK) <= 0x20)
        c &= ~CHAR_SHIFT;
     }
-  if (c & CHAR_META)
-    {
-      /* Move the meta bit to the right place for a string.  */
-      c = (c & ~CHAR_META) | 0x80;
-    }
   if (c & CHAR_CTL)
     {
       /* Simulate the code in lread.c.  */
       /* Allow `\C- ' and `\C-?'.  */
-      if ((c & ~CHAR_CTL) == ' ')
-       c = 0;
-      else if ((c & ~CHAR_CTL) == '?')
-       c = 127;
+      if ((c & 0377) == ' ')
+       c &= ~0177 & ~ CHAR_CTL;
+      else if ((c & 0377) == '?')
+       c = 0177 | (c & ~0177 & ~CHAR_CTL);
       /* ASCII control chars are made from letters (both cases),
         as well as the non-letters within 0100...0137.  */
       else if ((c & 0137) >= 0101 && (c & 0137) <= 0132)
@@ -140,6 +134,11 @@ char_resolve_modifier_mask (c)
       else if ((c & 0177) >= 0100 && (c & 0177) <= 0137)
        c &= (037 | (~0177 & ~CHAR_CTL));
     }
+  if (c & CHAR_META)
+    {
+      /* Move the meta bit to the right place for a string.  */
+      c = (c & ~CHAR_META) | 0x80;
+    }
 
   return c;
 }