# HG changeset patch # User Kenichi Handa # Date 1204693926 0 # Node ID 88d1a8b0752e573d5c9bcec47919580ea59b66b1 # Parent eb2dddded6bc23e06b11e6eb2922cebb71814ccb (char_resolve_modifier_mask): Fix previous change. diff -r eb2dddded6bc -r 88d1a8b0752e src/character.c --- a/src/character.c Wed Mar 05 04:29:53 2008 +0000 +++ b/src/character.c Wed Mar 05 05:12:06 2008 +0000 @@ -115,24 +115,18 @@ 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 @@ 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; }