From: Kenichi Handa Date: Wed, 5 Mar 2008 05:12:06 +0000 (+0000) Subject: (char_resolve_modifier_mask): Fix previous change. X-Git-Tag: emacs-pretest-23.0.90~7450 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=03365d0eb5c09d346c56437912a4ddd9b0884ac9;p=emacs.git (char_resolve_modifier_mask): Fix previous change. --- diff --git a/src/character.c b/src/character.c index f34e30912dc..457d57f9251 100644 --- a/src/character.c +++ b/src/character.c @@ -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; }