aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDima Kogan2016-10-15 17:18:40 +0300
committerEli Zaretskii2016-10-15 17:18:40 +0300
commita38096f8e2978a14f3bc8fa0dc3e0c9d0f753c3c (patch)
treed7577f27589e17386e097fea2c09d1057aa40908 /src
parent07c0db4344072895726101e39eb92a26e1d2d3d1 (diff)
downloademacs-a38096f8e2978a14f3bc8fa0dc3e0c9d0f753c3c.tar.gz
emacs-a38096f8e2978a14f3bc8fa0dc3e0c9d0f753c3c.zip
Undo the effect of CapsLock when other modifiers are present
* src/keyboard.c (make_lispy_event): Effectively undo the effect of CapsLock if any modifiers other than Shift are present in a key. (Bug#24456)
Diffstat (limited to 'src')
-rw-r--r--src/keyboard.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index ca40c6e7ad0..87a68511052 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -5417,6 +5417,36 @@ make_lispy_event (struct input_event *event)
5417 { 5417 {
5418 c &= 0377; 5418 c &= 0377;
5419 eassert (c == event->code); 5419 eassert (c == event->code);
5420 }
5421
5422 /* Caps-lock shouldn't affect interpretation of key chords:
5423 Control+s should produce C-s whether caps-lock is on or
5424 not. And Control+Shift+s should produce C-S-s whether
5425 caps-lock is on or not. */
5426 if (event->modifiers & ~shift_modifier)
5427 {
5428 /* this is a key chord: some non-shift modifier is
5429 depressed */
5430
5431 if (uppercasep (c) &&
5432 !(event->modifiers & shift_modifier))
5433 {
5434 /* Got a capital letter without a shift. The caps
5435 lock is on. Un-capitalize the letter */
5436 c = downcase(c);
5437 }
5438 else if (lowercasep (c) &&
5439 (event->modifiers & shift_modifier))
5440 {
5441 /* Got a lower-case letter even though shift is
5442 depressed. The caps lock is on. Capitalize the
5443 letter */
5444 c = upcase(c);
5445 }
5446 }
5447
5448 if (event->kind == ASCII_KEYSTROKE_EVENT)
5449 {
5420 /* Turn ASCII characters into control characters 5450 /* Turn ASCII characters into control characters
5421 when proper. */ 5451 when proper. */
5422 if (event->modifiers & ctrl_modifier) 5452 if (event->modifiers & ctrl_modifier)