* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords @ 2016-09-18 7:01 Dima Kogan 2016-09-18 14:04 ` npostavs 2016-09-18 14:41 ` Eli Zaretskii 0 siblings, 2 replies; 20+ messages in thread From: Dima Kogan @ 2016-09-18 7:01 UTC (permalink / raw) To: 24456 [-- Attachment #1: Type: text/plain, Size: 938 bytes --] Hi. I noticed that on some platforms the caps-lock state can affect how key chords are interpreted. It is currently inconsistent across platforms. The behavior that feels correct to me is that caps-lock should affect the case of letters as they are typed, and NOTHING else. On gtk, if caps-lock is ON then Control+s produces C-S-s and Control+Shift+s produces C-s; this is backwards from what I think it should do. On OSX it looks like with caps-lock, both shifted and non-shifted presses produce C-s, which is 50% wrong regardless of how one thinks this SHOULD work. On Windows it does the right thing. In a console on Debian it looks like Control+Shift+s produces C-s regardless of caps-lock, but I suspect this has a deeper cause than what this patch touches. I have tested this patch on gtk (fixes it) and the console (doesn't change anything). Hopefully it makes osx work properly while letting windows builds keep working. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Caps-lock-doesn-t-affect-interpretation-of-key-chord.patch --] [-- Type: text/x-diff, Size: 2143 bytes --] From 7e34d122ff981c4a9eb671aa2400efbf65144506 Mon Sep 17 00:00:00 2001 From: Dima Kogan <dima@secretsauce.net> Date: Sat, 17 Sep 2016 23:47:48 -0700 Subject: [PATCH] Caps-lock doesn't affect interpretation of key chords * src/keyboard.c (make_lispy_event): when a user pressed key-chords the caps-lock no longer affects the "shift" state of the generated chord. For instance Control+s produces C-s regardless of the caps-lock state. And Control+Shift+s produces C-S-s regardless of the caps-lock state. --- src/keyboard.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/keyboard.c b/src/keyboard.c index b8bc361..a977de5 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -5415,6 +5415,32 @@ make_lispy_event (struct input_event *event) EMACS_INT c = event->code; if (event->kind == ASCII_KEYSTROKE_EVENT) { + /* Caps-lock shouldn't affect interpretation of key chords: + Control+s should produce C-s whether caps-lock is on or + not. And Control+Shift+s should produce C-S-s whether + caps-lock is on or not. */ + if (event->modifiers & ~shift_modifier) + { + /* this is a key chord: some non-shift modifier is + depressed */ + + if ('A' <= c && c <= 'Z' && + !(event->modifiers & shift_modifier) ) + { + /* Got a capital letter without a shift. The caps + lock is on. Un-capitalize the letter */ + c |= (unsigned)('a' - 'A'); + } + else if (('a' <= c && c <= 'z') && + (event->modifiers & shift_modifier) ) + { + /* Got a lower-case letter even though shift is + depressed. The caps lock is on. Capitalize the + letter */ + c &= ~(unsigned)('a' - 'A'); + } + } + c &= 0377; eassert (c == event->code); /* Turn ASCII characters into control characters -- 2.9.3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-18 7:01 bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords Dima Kogan @ 2016-09-18 14:04 ` npostavs 2016-09-18 18:25 ` Dima Kogan 2016-09-18 14:41 ` Eli Zaretskii 1 sibling, 1 reply; 20+ messages in thread From: npostavs @ 2016-09-18 14:04 UTC (permalink / raw) To: Dima Kogan; +Cc: 24456 forcemerge 4931 24456 quit Dima Kogan <dima@secretsauce.net> writes: > > In a console on Debian it looks like Control+Shift+s produces C-s > regardless of caps-lock, but I suspect this has a deeper cause than what > this patch touches. Yeah, I think for terminals the keystrokes have to fit in bytes, so there is no room for both a Ctrl and Shift bit to be set. > > > I have tested this patch on gtk (fixes it) and the console (doesn't > change anything). Hopefully it makes osx work properly while letting > windows builds keep working. After applying the patch to emacs-25, I built --with-x-toolkit=lucid and --enable-checking; I get an assertion violation when hitting C-n with capslock on. In GNU Emacs 25.1.28 (x86_64-unknown-linux-gnu, X toolkit) of 2016-09-18 built on zony Repository revision: 76981c4457682ae8699789b334a3be7b60ad301d Windowing system distributor 'The X.Org Foundation', version 11.0.11804000 Configured using: 'configure --cache-file=../debug-config.cache 'CFLAGS=-O0 -g3 -march=native' --enable-checking MAKEINFO=makeinfo-4.13a --with-x-toolkit=lucid --without-toolkit-scroll-bars --with-gif=no --with-jpeg=no' #0 terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:354 #1 0x00000000005fa996 in die (msg=0x7273e6 "c == event->code", file=0x7259b0 "keyboard.c", line=5415) at alloc.c:7223 #2 0x000000000057d40e in make_lispy_event (event=0xd2ab68 <kbd_buffer+2632>) at keyboard.c:5415 #3 0x000000000057a2e3 in kbd_buffer_get_event (kbp=0x7fffffffddc8, used_mouse_menu=0x7fffffffe3af, end_time=0x0) at keyboard.c:4071 #4 0x000000000057514a in read_event_from_main_queue (end_time=0x0, local_getcjmp=0x7fffffffe170, used_mouse_menu=0x7fffffffe3af) at keyboard.c:2148 #5 0x0000000000575410 in read_decoded_event_from_main_queue (end_time=0x0, local_getcjmp=0x7fffffffe170, prev_event=0, used_mouse_menu=0x7fffffffe3af) at keyboard.c:2211 #6 0x0000000000576fa7 in read_char (commandflag=1, map=28530083, prev_event=0, used_mouse_menu=0x7fffffffe3af, end_time=0x0) at keyboard.c:2799 #7 0x0000000000585fe3 in read_key_sequence (keybuf=0x7fffffffe560, bufsize=30, prompt=0, dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false) at keyboard.c:9089 #8 0x00000000005730f0 in command_loop_1 () at keyboard.c:1365 #9 0x000000000061a8c2 in internal_condition_case (bfun=0x572cb4 <command_loop_1>, handlers=19056, hfun=0x572346 <cmd_error>) at eval.c:1309 #10 0x00000000005728f6 in command_loop_2 (ignore=0) at keyboard.c:1107 #11 0x0000000000619e91 in internal_catch (tag=45840, func=0x5728cd <command_loop_2>, arg=0) at eval.c:1074 #12 0x0000000000572898 in command_loop () at keyboard.c:1086 #13 0x0000000000571e36 in recursive_edit_1 () at keyboard.c:692 #14 0x0000000000572036 in Frecursive_edit () at keyboard.c:763 #15 0x000000000056fde3 in main (argc=2, argv=0x7fffffffe9f8) at emacs.c:1626 ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-18 14:04 ` npostavs @ 2016-09-18 18:25 ` Dima Kogan 2016-09-18 18:54 ` npostavs 2016-09-19 2:23 ` Eli Zaretskii 0 siblings, 2 replies; 20+ messages in thread From: Dima Kogan @ 2016-09-18 18:25 UTC (permalink / raw) To: npostavs; +Cc: 24456 [-- Attachment #1: Type: text/plain, Size: 647 bytes --] npostavs@users.sourceforge.net writes: > After applying the patch to emacs-25, I built --with-x-toolkit=lucid and > --enable-checking; I get an assertion violation when hitting C-n with > capslock on. Thanks for testing. I didn't realize that assertions are disabled by default. Fixed patch attached. Eli Zaretskii writes: > Doesn't this mean that ASCII keys will behave differently from > non-ASCII when Caps Lock is ON? If you're talking about characters used in non-English languages, then I really have no idea what the current behavior is, or how to test it. I'm hoping one of yall who actually use these languages will tell me. dima [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Caps-lock-doesn-t-affect-interpretation-of-key-chord.patch --] [-- Type: text/x-diff, Size: 2143 bytes --] From 66510839464f0efdc625790f3e64091012408dda Mon Sep 17 00:00:00 2001 From: Dima Kogan <dima@secretsauce.net> Date: Sat, 17 Sep 2016 23:47:48 -0700 Subject: [PATCH] Caps-lock doesn't affect interpretation of key chords * src/keyboard.c (make_lispy_event): when a user pressed key-chords the caps-lock no longer affects the "shift" state of the generated chord. For instance Control+s produces C-s regardless of the caps-lock state. And Control+Shift+s produces C-S-s regardless of the caps-lock state. --- src/keyboard.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/keyboard.c b/src/keyboard.c index b8bc361..cd8413b 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -5417,6 +5417,33 @@ make_lispy_event (struct input_event *event) { c &= 0377; eassert (c == event->code); + + /* Caps-lock shouldn't affect interpretation of key chords: + Control+s should produce C-s whether caps-lock is on or + not. And Control+Shift+s should produce C-S-s whether + caps-lock is on or not. */ + if (event->modifiers & ~shift_modifier) + { + /* this is a key chord: some non-shift modifier is + depressed */ + + if ('A' <= c && c <= 'Z' && + !(event->modifiers & shift_modifier) ) + { + /* Got a capital letter without a shift. The caps + lock is on. Un-capitalize the letter */ + c |= (unsigned)('a' - 'A'); + } + else if (('a' <= c && c <= 'z') && + (event->modifiers & shift_modifier) ) + { + /* Got a lower-case letter even though shift is + depressed. The caps lock is on. Capitalize the + letter */ + c &= ~(unsigned)('a' - 'A'); + } + } + /* Turn ASCII characters into control characters when proper. */ if (event->modifiers & ctrl_modifier) -- 2.9.3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-18 18:25 ` Dima Kogan @ 2016-09-18 18:54 ` npostavs 2016-09-19 2:23 ` Eli Zaretskii 1 sibling, 0 replies; 20+ messages in thread From: npostavs @ 2016-09-18 18:54 UTC (permalink / raw) To: Dima Kogan; +Cc: 24456 Dima Kogan <dima@secretsauce.net> writes: > npostavs@users.sourceforge.net writes: > >> After applying the patch to emacs-25, I built --with-x-toolkit=lucid and >> --enable-checking; I get an assertion violation when hitting C-n with >> capslock on. > > Thanks for testing. I didn't realize that assertions are disabled by > default. Fixed patch attached. New patch works well. ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-18 18:25 ` Dima Kogan 2016-09-18 18:54 ` npostavs @ 2016-09-19 2:23 ` Eli Zaretskii 2016-09-19 5:22 ` Dima Kogan 1 sibling, 1 reply; 20+ messages in thread From: Eli Zaretskii @ 2016-09-19 2:23 UTC (permalink / raw) To: Dima Kogan; +Cc: 24456, npostavs > From: Dima Kogan <dima@secretsauce.net> > Cc: 24456@debbugs.gnu.org, Eli Zaretskii <eliz@gnu.org> > Date: Sun, 18 Sep 2016 11:25:46 -0700 > > Eli Zaretskii writes: > > > Doesn't this mean that ASCII keys will behave differently from > > non-ASCII when Caps Lock is ON? > > If you're talking about characters used in non-English languages, then I > really have no idea what the current behavior is, or how to test it. I'm > hoping one of yall who actually use these languages will tell me. I don't understand what you mean by that. The effect of Caps Lock on non-ASCII letters is clear: to produce the upper-case variant of the letter. My point is that treating ASCII letters differently from non-ASCII in this regard should not be taken lightly. We should at least discuss whether the results are acceptable. ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-19 2:23 ` Eli Zaretskii @ 2016-09-19 5:22 ` Dima Kogan 2016-09-19 16:43 ` Eli Zaretskii 0 siblings, 1 reply; 20+ messages in thread From: Dima Kogan @ 2016-09-19 5:22 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 24456, npostavs Eli Zaretskii <eliz@gnu.org> writes: >> If you're talking about characters used in non-English languages, then I >> really have no idea what the current behavior is, or how to test it. I'm >> hoping one of yall who actually use these languages will tell me. > > I don't understand what you mean by that. The effect of Caps Lock on > non-ASCII letters is clear: to produce the upper-case variant of the > letter. > > My point is that treating ASCII letters differently from non-ASCII in > this regard should not be taken lightly. We should at least discuss > whether the results are acceptable. I just meant that as someone who uses English almost exclusively, I don't ordinarily encounter wide chars and unicode, and I don't know how they apply here. The hope was that somebody who IS familiar with non-English keyboards would point out the shortcomings, and would know how to address them. Eli, do you know how caps-lock works on foreign keyboards? ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-19 5:22 ` Dima Kogan @ 2016-09-19 16:43 ` Eli Zaretskii 2016-09-19 18:15 ` Dima Kogan 0 siblings, 1 reply; 20+ messages in thread From: Eli Zaretskii @ 2016-09-19 16:43 UTC (permalink / raw) To: Dima Kogan; +Cc: 24456, npostavs > From: Dima Kogan <dima@secretsauce.net> > Cc: npostavs@users.sourceforge.net, 24456@debbugs.gnu.org > Date: Sun, 18 Sep 2016 22:22:09 -0700 > > Eli, do you know how caps-lock works on foreign keyboards? They capitalize letters, AFAIK. Of course, the effect also depends on the OS and the application that receives the keys. ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-19 16:43 ` Eli Zaretskii @ 2016-09-19 18:15 ` Dima Kogan 2016-09-19 18:50 ` Eli Zaretskii 0 siblings, 1 reply; 20+ messages in thread From: Dima Kogan @ 2016-09-19 18:15 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 24456, npostavs Eli Zaretskii <eliz@gnu.org> writes: >> From: Dima Kogan <dima@secretsauce.net> >> Cc: npostavs@users.sourceforge.net, 24456@debbugs.gnu.org >> Date: Sun, 18 Sep 2016 22:22:09 -0700 >> >> Eli, do you know how caps-lock works on foreign keyboards? > > They capitalize letters, AFAIK. Of course, the effect also depends on > the OS and the application that receives the keys. OK. So how do we test this? The current patch fixes the ASCII case and has no effect on the non-ASCII case. Maybe this is OK, actually, since the only potentially broken remaining cases are with people binding things like C-ó. ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-19 18:15 ` Dima Kogan @ 2016-09-19 18:50 ` Eli Zaretskii 2016-09-19 20:28 ` Dima Kogan 0 siblings, 1 reply; 20+ messages in thread From: Eli Zaretskii @ 2016-09-19 18:50 UTC (permalink / raw) To: Dima Kogan; +Cc: 24456, npostavs > From: Dima Kogan <dima@secretsauce.net> > Cc: npostavs@users.sourceforge.net, 24456@debbugs.gnu.org > Date: Mon, 19 Sep 2016 11:15:37 -0700 > > The current patch fixes the ASCII case and has no effect on the > non-ASCII case. Maybe this is OK, actually, since the only > potentially broken remaining cases are with people binding things > like C-ó. The likes of C-ó and M-ó is precisely what I'm worried about. I don't think it's right to support only ASCII letters in this use case. We should support the non-ASCII letters as well. What exactly requires testing for ASCII lower-case letters in your patch? Why only ASCII? ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-19 18:50 ` Eli Zaretskii @ 2016-09-19 20:28 ` Dima Kogan 2016-09-21 14:56 ` Eli Zaretskii 0 siblings, 1 reply; 20+ messages in thread From: Dima Kogan @ 2016-09-19 20:28 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 24456, npostavs Eli Zaretskii <eliz@gnu.org> writes: > What exactly requires testing for ASCII lower-case letters in your > patch? Why only ASCII? I'm trying to detect the caps-lock by finding capital letters that were produced without Shift (and vice versa). I can do something like !shift_pressed && isupper(c) but that doesn't work with wide characters. There's iswupper(c). Are the wide chars it takes the same ones we get in that function? How about non-latin scripts? Fundamentally I'm the worst person to be testing this, sadly. ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-19 20:28 ` Dima Kogan @ 2016-09-21 14:56 ` Eli Zaretskii 2016-09-21 23:30 ` Dima Kogan 0 siblings, 1 reply; 20+ messages in thread From: Eli Zaretskii @ 2016-09-21 14:56 UTC (permalink / raw) To: Dima Kogan; +Cc: 24456, npostavs > From: Dima Kogan <dima@secretsauce.net> > Cc: npostavs@users.sourceforge.net, 24456@debbugs.gnu.org > Date: Mon, 19 Sep 2016 13:28:56 -0700 > > Eli Zaretskii <eliz@gnu.org> writes: > > > What exactly requires testing for ASCII lower-case letters in your > > patch? Why only ASCII? > > I'm trying to detect the caps-lock by finding capital letters that were > produced without Shift (and vice versa). I can do something like > > !shift_pressed && isupper(c) > > but that doesn't work with wide characters. There's iswupper(c). Are the > wide chars it takes the same ones we get in that function? How about > non-latin scripts? We already have an inline function 'uppercasep', which you could use; it supports any character that Emacs supports. > Fundamentally I'm the worst person to be testing this, sadly. Once the code is written, we can ask people to test it in different locales, I don't expect problems in this area. Thanks. ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-21 14:56 ` Eli Zaretskii @ 2016-09-21 23:30 ` Dima Kogan 2016-09-22 15:22 ` Eli Zaretskii 0 siblings, 1 reply; 20+ messages in thread From: Dima Kogan @ 2016-09-21 23:30 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 24456, npostavs [-- Attachment #1: Type: text/plain, Size: 232 bytes --] Eli Zaretskii <eliz@gnu.org> writes: > We already have an inline function 'uppercasep', which you could use; > it supports any character that Emacs supports. OK. In that case, how about the attached patch? Tested working on gtk. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Caps-lock-doesn-t-affect-interpretation-of-key-chord.patch --] [-- Type: text/x-diff, Size: 2102 bytes --] From 2b81504e1f34fed36c5ec1ee95dbceaf8df9d321 Mon Sep 17 00:00:00 2001 From: Dima Kogan <dima@secretsauce.net> Date: Sat, 17 Sep 2016 23:47:48 -0700 Subject: [PATCH] Caps-lock doesn't affect interpretation of key chords * src/keyboard.c (make_lispy_event): when a user pressed key-chords the caps-lock no longer affects the "shift" state of the generated chord. For instance Control+s produces C-s regardless of the caps-lock state. And Control+Shift+s produces C-S-s regardless of the caps-lock state. --- src/keyboard.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/keyboard.c b/src/keyboard.c index b8bc361..ed0d9db 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -5417,6 +5417,33 @@ make_lispy_event (struct input_event *event) { c &= 0377; eassert (c == event->code); + + /* Caps-lock shouldn't affect interpretation of key chords: + Control+s should produce C-s whether caps-lock is on or + not. And Control+Shift+s should produce C-S-s whether + caps-lock is on or not. */ + if (event->modifiers & ~shift_modifier) + { + /* this is a key chord: some non-shift modifier is + depressed */ + + if (uppercasep(c) && + !(event->modifiers & shift_modifier) ) + { + /* Got a capital letter without a shift. The caps + lock is on. Un-capitalize the letter */ + c = downcase(c); + } + else if (lowercasep(c) && + (event->modifiers & shift_modifier) ) + { + /* Got a lower-case letter even though shift is + depressed. The caps lock is on. Capitalize the + letter */ + c = upcase(c); + } + } + /* Turn ASCII characters into control characters when proper. */ if (event->modifiers & ctrl_modifier) -- 2.9.3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-21 23:30 ` Dima Kogan @ 2016-09-22 15:22 ` Eli Zaretskii 2016-09-25 18:44 ` Dima Kogan 0 siblings, 1 reply; 20+ messages in thread From: Eli Zaretskii @ 2016-09-22 15:22 UTC (permalink / raw) To: Dima Kogan; +Cc: 24456, npostavs > From: Dima Kogan <dima@secretsauce.net> > Cc: npostavs@users.sourceforge.net, 24456@debbugs.gnu.org > Date: Wed, 21 Sep 2016 16:30:21 -0700 > > > We already have an inline function 'uppercasep', which you could use; > > it supports any character that Emacs supports. > > OK. In that case, how about the attached patch? Tested working on gtk. Thanks. However, this doesn't look right to me: your code is entirely inside the following condition: if (event->kind == ASCII_KEYSTROKE_EVENT) So it will not do anything for non-ASCII keystrokes. You should move the code out of that condition, I think. > + if (uppercasep(c) && > + !(event->modifiers & shift_modifier) ) A nit: our coding standards request a space between the function name and the opening parenthesis that follows it, and no spaces between closing parentheses. ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-22 15:22 ` Eli Zaretskii @ 2016-09-25 18:44 ` Dima Kogan 2016-10-01 8:28 ` Eli Zaretskii 2016-10-01 8:37 ` Andreas Schwab 0 siblings, 2 replies; 20+ messages in thread From: Dima Kogan @ 2016-09-25 18:44 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 24456, npostavs [-- Attachment #1: Type: text/plain, Size: 603 bytes --] Eli Zaretskii <eliz@gnu.org> writes: > Thanks. However, this doesn't look right to me: your code is entirely > inside the following condition: > > if (event->kind == ASCII_KEYSTROKE_EVENT) > > So it will not do anything for non-ASCII keystrokes. You should move > the code out of that condition, I think. > >> + if (uppercasep(c) && >> + !(event->modifiers & shift_modifier) ) > > A nit: our coding standards request a space between the function name > and the opening parenthesis that follows it, and no spaces between > closing parentheses. OK. How about this? [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Caps-lock-doesn-t-affect-interpretation-of-key-chord.patch --] [-- Type: text/x-diff, Size: 2063 bytes --] From e3a0375ea66a746a6a02e94f85ef71bf7fe9db5d Mon Sep 17 00:00:00 2001 From: Dima Kogan <dima@secretsauce.net> Date: Sat, 17 Sep 2016 23:47:48 -0700 Subject: [PATCH] Caps-lock doesn't affect interpretation of key chords * src/keyboard.c (make_lispy_event): when a user pressed key-chords the caps-lock no longer affects the "shift" state of the generated chord. For instance Control+s produces C-s regardless of the caps-lock state. And Control+Shift+s produces C-S-s regardless of the caps-lock state. --- src/keyboard.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/keyboard.c b/src/keyboard.c index b8bc361..e8a199d 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -5417,6 +5417,37 @@ make_lispy_event (struct input_event *event) { c &= 0377; eassert (c == event->code); + } + + + /* Caps-lock shouldn't affect interpretation of key chords: + Control+s should produce C-s whether caps-lock is on or + not. And Control+Shift+s should produce C-S-s whether + caps-lock is on or not. */ + if (event->modifiers & ~shift_modifier) + { + /* this is a key chord: some non-shift modifier is + depressed */ + + if (uppercasep (c) && + !(event->modifiers & shift_modifier)) + { + /* Got a capital letter without a shift. The caps + lock is on. Un-capitalize the letter */ + c = downcase(c); + } + else if (lowercasep (c) && + (event->modifiers & shift_modifier)) + { + /* Got a lower-case letter even though shift is + depressed. The caps lock is on. Capitalize the + letter */ + c = upcase(c); + } + } + + if (event->kind == ASCII_KEYSTROKE_EVENT) + { /* Turn ASCII characters into control characters when proper. */ if (event->modifiers & ctrl_modifier) -- 2.9.3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-25 18:44 ` Dima Kogan @ 2016-10-01 8:28 ` Eli Zaretskii 2016-10-01 15:12 ` Dima Kogan 2016-10-01 8:37 ` Andreas Schwab 1 sibling, 1 reply; 20+ messages in thread From: Eli Zaretskii @ 2016-10-01 8:28 UTC (permalink / raw) To: Dima Kogan; +Cc: 24456, npostavs > From: Dima Kogan <dima@secretsauce.net> > Cc: npostavs@users.sourceforge.net, 24456@debbugs.gnu.org > Date: Sun, 25 Sep 2016 11:44:23 -0700 > > > Thanks. However, this doesn't look right to me: your code is entirely > > inside the following condition: > > > > if (event->kind == ASCII_KEYSTROKE_EVENT) > > > > So it will not do anything for non-ASCII keystrokes. You should move > > the code out of that condition, I think. > > > >> + if (uppercasep(c) && > >> + !(event->modifiers & shift_modifier) ) > > > > A nit: our coding standards request a space between the function name > > and the opening parenthesis that follows it, and no spaces between > > closing parentheses. > > OK. How about this? Looks okay, but you still didn't leave a space before the opening parentheses and the function name. Did you try this with a non-ASCII key (assuming you have one on your keyboard)? Thanks. ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-10-01 8:28 ` Eli Zaretskii @ 2016-10-01 15:12 ` Dima Kogan 2016-10-01 15:59 ` Eli Zaretskii 0 siblings, 1 reply; 20+ messages in thread From: Dima Kogan @ 2016-10-01 15:12 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 24456, npostavs [-- Attachment #1: Type: text/plain, Size: 541 bytes --] Andreas Schwab <schwab@linux-m68k.org> writes: > Line break before operator, not after. Eli Zaretskii <eliz@gnu.org> writes: > Looks okay, but you still didn't leave a space before the opening > parentheses and the function name. Attached. Is there a tool to automatically detect/fix these? > Did you try this with a non-ASCII key (assuming you have one on your > keyboard)? I did not try. I live in the US, and pretty much never see keyboards with anything non-trivial on them. If somebody else would test it, that would be great. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Caps-lock-doesn-t-affect-interpretation-of-key-chord.patch --] [-- Type: text/x-diff, Size: 2069 bytes --] From 9b12fff089dd3a4eb99373e92c635c20cebd0198 Mon Sep 17 00:00:00 2001 From: Dima Kogan <dima@secretsauce.net> Date: Sat, 17 Sep 2016 23:47:48 -0700 Subject: [PATCH] Caps-lock doesn't affect interpretation of key chords * src/keyboard.c (make_lispy_event): when a user pressed key-chords the caps-lock no longer affects the "shift" state of the generated chord. For instance Control+s produces C-s regardless of the caps-lock state. And Control+Shift+s produces C-S-s regardless of the caps-lock state. --- src/keyboard.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/keyboard.c b/src/keyboard.c index ccd3405..cdeea8e 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -5368,6 +5368,37 @@ make_lispy_event (struct input_event *event) { c &= 0377; eassert (c == event->code); + } + + + /* Caps-lock shouldn't affect interpretation of key chords: + Control+s should produce C-s whether caps-lock is on or + not. And Control+Shift+s should produce C-S-s whether + caps-lock is on or not. */ + if (event->modifiers & ~shift_modifier) + { + /* this is a key chord: some non-shift modifier is + depressed */ + + if (uppercasep (c) + && !(event->modifiers & shift_modifier)) + { + /* Got a capital letter without a shift. The caps + lock is on. Un-capitalize the letter */ + c = downcase (c); + } + else if (lowercasep (c) + && (event->modifiers & shift_modifier)) + { + /* Got a lower-case letter even though shift is + depressed. The caps lock is on. Capitalize the + letter */ + c = upcase (c); + } + } + + if (event->kind == ASCII_KEYSTROKE_EVENT) + { /* Turn ASCII characters into control characters when proper. */ if (event->modifiers & ctrl_modifier) -- 2.8.0.rc3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-10-01 15:12 ` Dima Kogan @ 2016-10-01 15:59 ` Eli Zaretskii 2016-10-15 14:23 ` Eli Zaretskii 0 siblings, 1 reply; 20+ messages in thread From: Eli Zaretskii @ 2016-10-01 15:59 UTC (permalink / raw) To: Dima Kogan; +Cc: 24456, npostavs > From: Dima Kogan <dima@secretsauce.net> > Cc: npostavs@users.sourceforge.net, 24456@debbugs.gnu.org > Date: Sat, 01 Oct 2016 08:12:27 -0700 > > > Looks okay, but you still didn't leave a space before the opening > > parentheses and the function name. > > Attached. Looks good, thanks. > Is there a tool to automatically detect/fix these? I'm not aware of any, but that doesn't mean there isn't one. > > Did you try this with a non-ASCII key (assuming you have one on your > > keyboard)? > > I did not try. I live in the US, and pretty much never see keyboards > with anything non-trivial on them. If somebody else would test it, that > would be great. Could someone please try that and see if it works correctly? ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-10-01 15:59 ` Eli Zaretskii @ 2016-10-15 14:23 ` Eli Zaretskii 0 siblings, 0 replies; 20+ messages in thread From: Eli Zaretskii @ 2016-10-15 14:23 UTC (permalink / raw) To: dima; +Cc: 24456-done, npostavs > Date: Sat, 01 Oct 2016 18:59:05 +0300 > From: Eli Zaretskii <eliz@gnu.org> > Cc: 24456@debbugs.gnu.org, npostavs@users.sourceforge.net > > > From: Dima Kogan <dima@secretsauce.net> > > Cc: npostavs@users.sourceforge.net, 24456@debbugs.gnu.org > > Date: Sat, 01 Oct 2016 08:12:27 -0700 > > > > > Looks okay, but you still didn't leave a space before the opening > > > parentheses and the function name. > > > > Attached. > > Looks good, thanks. > > > Is there a tool to automatically detect/fix these? > > I'm not aware of any, but that doesn't mean there isn't one. > > > > Did you try this with a non-ASCII key (assuming you have one on your > > > keyboard)? > > > > I did not try. I live in the US, and pretty much never see keyboards > > with anything non-trivial on them. If somebody else would test it, that > > would be great. > > Could someone please try that and see if it works correctly? No further comments, so I pushed this to the master branch, and I'm marking this bug done. Thanks. ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-25 18:44 ` Dima Kogan 2016-10-01 8:28 ` Eli Zaretskii @ 2016-10-01 8:37 ` Andreas Schwab 1 sibling, 0 replies; 20+ messages in thread From: Andreas Schwab @ 2016-10-01 8:37 UTC (permalink / raw) To: Dima Kogan; +Cc: 24456, npostavs On Sep 25 2016, Dima Kogan <dima@secretsauce.net> wrote: > + if (uppercasep (c) && Line break before operator, not after. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." ^ permalink raw reply [flat|nested] 20+ messages in thread
* bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords 2016-09-18 7:01 bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords Dima Kogan 2016-09-18 14:04 ` npostavs @ 2016-09-18 14:41 ` Eli Zaretskii 1 sibling, 0 replies; 20+ messages in thread From: Eli Zaretskii @ 2016-09-18 14:41 UTC (permalink / raw) To: Dima Kogan; +Cc: 24456 > From: Dima Kogan <dima@secretsauce.net> > Date: Sun, 18 Sep 2016 00:01:23 -0700 > > diff --git a/src/keyboard.c b/src/keyboard.c > index b8bc361..a977de5 100644 > --- a/src/keyboard.c > +++ b/src/keyboard.c > @@ -5415,6 +5415,32 @@ make_lispy_event (struct input_event *event) > EMACS_INT c = event->code; > if (event->kind == ASCII_KEYSTROKE_EVENT) > { > + /* Caps-lock shouldn't affect interpretation of key chords: > + Control+s should produce C-s whether caps-lock is on or > + not. And Control+Shift+s should produce C-S-s whether > + caps-lock is on or not. */ > + if (event->modifiers & ~shift_modifier) > + { > + /* this is a key chord: some non-shift modifier is > + depressed */ > + > + if ('A' <= c && c <= 'Z' && > + !(event->modifiers & shift_modifier) ) > + { > + /* Got a capital letter without a shift. The caps > + lock is on. Un-capitalize the letter */ > + c |= (unsigned)('a' - 'A'); > + } > + else if (('a' <= c && c <= 'z') && > + (event->modifiers & shift_modifier) ) > + { > + /* Got a lower-case letter even though shift is > + depressed. The caps lock is on. Capitalize the > + letter */ > + c &= ~(unsigned)('a' - 'A'); > + } > + } > + Doesn't this mean that ASCII keys will behave differently from non-ASCII when Caps Lock is ON? ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2016-10-15 14:23 UTC | newest] Thread overview: 20+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-09-18 7:01 bug#24456: 25.1; [PATCH] Caps-lock doesn't affect interpretation of key chords Dima Kogan 2016-09-18 14:04 ` npostavs 2016-09-18 18:25 ` Dima Kogan 2016-09-18 18:54 ` npostavs 2016-09-19 2:23 ` Eli Zaretskii 2016-09-19 5:22 ` Dima Kogan 2016-09-19 16:43 ` Eli Zaretskii 2016-09-19 18:15 ` Dima Kogan 2016-09-19 18:50 ` Eli Zaretskii 2016-09-19 20:28 ` Dima Kogan 2016-09-21 14:56 ` Eli Zaretskii 2016-09-21 23:30 ` Dima Kogan 2016-09-22 15:22 ` Eli Zaretskii 2016-09-25 18:44 ` Dima Kogan 2016-10-01 8:28 ` Eli Zaretskii 2016-10-01 15:12 ` Dima Kogan 2016-10-01 15:59 ` Eli Zaretskii 2016-10-15 14:23 ` Eli Zaretskii 2016-10-01 8:37 ` Andreas Schwab 2016-09-18 14:41 ` Eli Zaretskii
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).