diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/keyboard.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/keyboard.c b/src/keyboard.c index 5b5b78e634e..512755faf28 100644 --- a/src/keyboard.c +++ b/src/keyboard.c | |||
| @@ -5013,8 +5013,17 @@ make_lispy_event (event) | |||
| 5013 | case MULTIBYTE_CHAR_KEYSTROKE_EVENT: | 5013 | case MULTIBYTE_CHAR_KEYSTROKE_EVENT: |
| 5014 | { | 5014 | { |
| 5015 | Lisp_Object lispy_c; | 5015 | Lisp_Object lispy_c; |
| 5016 | int c = event->code; | ||
| 5016 | 5017 | ||
| 5017 | XSETFASTINT (lispy_c, event->code); | 5018 | /* Add in the other modifier bits. We took care of ctrl_modifier |
| 5019 | just above, and the shift key was taken care of by the X code, | ||
| 5020 | and applied to control characters by make_ctrl_char. */ | ||
| 5021 | c |= (event->modifiers | ||
| 5022 | & (meta_modifier | alt_modifier | ||
| 5023 | | hyper_modifier | super_modifier | ctrl_modifier)); | ||
| 5024 | /* What about the `shift' modifier ? */ | ||
| 5025 | button_down_time = 0; | ||
| 5026 | XSETFASTINT (lispy_c, c); | ||
| 5018 | return lispy_c; | 5027 | return lispy_c; |
| 5019 | } | 5028 | } |
| 5020 | 5029 | ||
| @@ -8205,7 +8214,7 @@ follow_key (key, nmaps, current, defs, next) | |||
| 8205 | such as Vfunction_key_map and Vkey_translation_map. */ | 8214 | such as Vfunction_key_map and Vkey_translation_map. */ |
| 8206 | typedef struct keyremap | 8215 | typedef struct keyremap |
| 8207 | { | 8216 | { |
| 8208 | Lisp_Object map; | 8217 | Lisp_Object map, parent; |
| 8209 | int start, end; | 8218 | int start, end; |
| 8210 | } keyremap; | 8219 | } keyremap; |
| 8211 | 8220 | ||
| @@ -8270,8 +8279,8 @@ access_keymap_keyremap (map, key, prompt, do_funcall) | |||
| 8270 | The return value is non-zero if the remapping actually took place. */ | 8279 | The return value is non-zero if the remapping actually took place. */ |
| 8271 | 8280 | ||
| 8272 | static int | 8281 | static int |
| 8273 | keyremap_step (keybuf, bufsize, fkey, input, doit, diff, parent, prompt) | 8282 | keyremap_step (keybuf, bufsize, fkey, input, doit, diff, prompt) |
| 8274 | Lisp_Object *keybuf, prompt, parent; | 8283 | Lisp_Object *keybuf, prompt; |
| 8275 | keyremap *fkey; | 8284 | keyremap *fkey; |
| 8276 | int input, doit, *diff, bufsize; | 8285 | int input, doit, *diff, bufsize; |
| 8277 | { | 8286 | { |
| @@ -8306,7 +8315,7 @@ keyremap_step (keybuf, bufsize, fkey, input, doit, diff, parent, prompt) | |||
| 8306 | = Faref (next, make_number (i)); | 8315 | = Faref (next, make_number (i)); |
| 8307 | 8316 | ||
| 8308 | fkey->start = fkey->end += *diff; | 8317 | fkey->start = fkey->end += *diff; |
| 8309 | fkey->map = parent; | 8318 | fkey->map = fkey->parent; |
| 8310 | 8319 | ||
| 8311 | return 1; | 8320 | return 1; |
| 8312 | } | 8321 | } |
| @@ -8318,7 +8327,7 @@ keyremap_step (keybuf, bufsize, fkey, input, doit, diff, parent, prompt) | |||
| 8318 | if (!CONSP (fkey->map)) | 8327 | if (!CONSP (fkey->map)) |
| 8319 | { | 8328 | { |
| 8320 | fkey->end = ++fkey->start; | 8329 | fkey->end = ++fkey->start; |
| 8321 | fkey->map = parent; | 8330 | fkey->map = fkey->parent; |
| 8322 | } | 8331 | } |
| 8323 | return 0; | 8332 | return 0; |
| 8324 | } | 8333 | } |
| @@ -8474,8 +8483,8 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last, | |||
| 8474 | last_nonmenu_event = Qnil; | 8483 | last_nonmenu_event = Qnil; |
| 8475 | 8484 | ||
| 8476 | delayed_switch_frame = Qnil; | 8485 | delayed_switch_frame = Qnil; |
| 8477 | fkey.map = Vfunction_key_map; | 8486 | fkey.map = fkey.parent = Vfunction_key_map; |
| 8478 | keytran.map = Vkey_translation_map; | 8487 | keytran.map = keytran.parent = Vkey_translation_map; |
| 8479 | /* If there is no translation-map, turn off scanning. */ | 8488 | /* If there is no translation-map, turn off scanning. */ |
| 8480 | fkey.start = fkey.end = KEYMAPP (fkey.map) ? 0 : bufsize + 1; | 8489 | fkey.start = fkey.end = KEYMAPP (fkey.map) ? 0 : bufsize + 1; |
| 8481 | keytran.start = keytran.end = KEYMAPP (keytran.map) ? 0 : bufsize + 1; | 8490 | keytran.start = keytran.end = KEYMAPP (keytran.map) ? 0 : bufsize + 1; |
| @@ -8631,9 +8640,9 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last, | |||
| 8631 | keybuf[i - first_unbound - 1] = keybuf[i]; | 8640 | keybuf[i - first_unbound - 1] = keybuf[i]; |
| 8632 | mock_input = t - first_unbound - 1; | 8641 | mock_input = t - first_unbound - 1; |
| 8633 | fkey.end = fkey.start -= first_unbound + 1; | 8642 | fkey.end = fkey.start -= first_unbound + 1; |
| 8634 | fkey.map = Vfunction_key_map; | 8643 | fkey.map = fkey.parent; |
| 8635 | keytran.end = keytran.start -= first_unbound + 1; | 8644 | keytran.end = keytran.start -= first_unbound + 1; |
| 8636 | keytran.map = Vkey_translation_map; | 8645 | keytran.map = keytran.parent; |
| 8637 | goto replay_sequence; | 8646 | goto replay_sequence; |
| 8638 | } | 8647 | } |
| 8639 | 8648 | ||
| @@ -9185,7 +9194,7 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last, | |||
| 9185 | invariant that keytran.end <= fkey.start). */ | 9194 | invariant that keytran.end <= fkey.start). */ |
| 9186 | { | 9195 | { |
| 9187 | if (fkey.start < t) | 9196 | if (fkey.start < t) |
| 9188 | (fkey.start = fkey.end = t, fkey.map = Vfunction_key_map); | 9197 | (fkey.start = fkey.end = t, fkey.map = fkey.parent); |
| 9189 | } | 9198 | } |
| 9190 | else | 9199 | else |
| 9191 | /* If the sequence is unbound, see if we can hang a function key | 9200 | /* If the sequence is unbound, see if we can hang a function key |
| @@ -9203,7 +9212,7 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last, | |||
| 9203 | first_binding >= nmaps) we don't want | 9212 | first_binding >= nmaps) we don't want |
| 9204 | to apply this function-key-mapping. */ | 9213 | to apply this function-key-mapping. */ |
| 9205 | fkey.end + 1 == t && first_binding >= nmaps, | 9214 | fkey.end + 1 == t && first_binding >= nmaps, |
| 9206 | &diff, Vfunction_key_map, prompt); | 9215 | &diff, prompt); |
| 9207 | UNGCPRO; | 9216 | UNGCPRO; |
| 9208 | if (done) | 9217 | if (done) |
| 9209 | { | 9218 | { |
| @@ -9221,7 +9230,7 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last, | |||
| 9221 | 9230 | ||
| 9222 | GCPRO3 (fkey.map, keytran.map, delayed_switch_frame); | 9231 | GCPRO3 (fkey.map, keytran.map, delayed_switch_frame); |
| 9223 | done = keyremap_step (keybuf, bufsize, &keytran, max (t, mock_input), | 9232 | done = keyremap_step (keybuf, bufsize, &keytran, max (t, mock_input), |
| 9224 | 1, &diff, Vkey_translation_map, prompt); | 9233 | 1, &diff, prompt); |
| 9225 | UNGCPRO; | 9234 | UNGCPRO; |
| 9226 | if (done) | 9235 | if (done) |
| 9227 | { | 9236 | { |