aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/keyboard.c35
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. */
8206typedef struct keyremap 8215typedef 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
8272static int 8281static int
8273keyremap_step (keybuf, bufsize, fkey, input, doit, diff, parent, prompt) 8282keyremap_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 {