# HG changeset patch # User Jim Blandy # Date 738057086 0 # Node ID 6dee690ddac5c9694a1934b307552568ab8eac45 # Parent 632fcf130734f677645045ff413837ec3365c1c6 * keyboard.c (make_ctrl_char): New function. (read_char): Call it. (kbd_buffer_store_event): Call it to see if the new character is the quit character. diff -r 632fcf130734 -r 6dee690ddac5 src/keyboard.c --- a/src/keyboard.c Sat May 22 07:25:53 1993 +0000 +++ b/src/keyboard.c Sat May 22 07:51:26 1993 +0000 @@ -1231,6 +1231,35 @@ #endif } +/* Applying the control modifier to CHARACTER. */ +int +make_ctrl_char (c) + int c; +{ + /* If it's already a control character, don't mess with it. */ + if ((c & 0160) == 0) + ; + /* Making ? a control character should result in DEL. */ + + else if ((c & 0177) == '?') + c |= 0177; + + /* ASCII control chars are made from letters (both cases), + as well as the non-letters within 0100...0137. */ + else if ((c & 0137) >= 'A' && (c & 0137) <= 'Z') + c = (c & (037 | ~0177)); + else if ((c & 0177) >= 0100 && (c & 0177) <= 0137) + c = (c & (037 | ~0177)); + + /* Anything else must get its high control bit set. */ + else + c = c | ctrl_modifier; + + return c; +} + + + /* Input of single characters from keyboard */ Lisp_Object print_help (); @@ -1462,26 +1491,7 @@ if ((extra_keyboard_modifiers & CHAR_CTL) || ((extra_keyboard_modifiers & 0177) < ' ' && (extra_keyboard_modifiers & 0177) != 0)) - { - /* If it's already a control character, don't mess with it. */ - if ((c & 0177) == 0) - ; - - /* Making ? a control character should result in DEL. */ - else if ((c & 0177) == '?') - c |= 0177; - - /* 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) - c = (c & (037 | ~0177)); - else if ((c & 0177) >= 0100 && (c & 0177) <= 0137) - c = (c & (037 | ~0177)); - - /* Anything else must get its high control bit set. */ - else - c = c | ctrl_modifier; - } + XSETINT (c, make_ctrl_char (XINT (c))); /* Transfer any other modifier bits directly from extra_keyboard_modifiers to c. Ignore the actual character code @@ -1692,6 +1702,9 @@ { register int c = XFASTINT (event->code) & 0377; + if (event->modifiers & ctrl_modifier) + c = make_ctrl_char (c); + if (c == quit_char) { extern SIGTYPE interrupt_signal ();