Mercurial > emacs
changeset 2950:6dee690ddac5
* 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.
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Sat, 22 May 1993 07:51:26 +0000 |
parents | 632fcf130734 |
children | e77738f737d8 |
files | src/keyboard.c |
diffstat | 1 files changed, 33 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- 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 ();