Re: [hackers] [svkbd][PATCH] this patch fixes uppercase in armenian (and perhaps some other) layouts. svkbd was previously registering a key in one modification (xorg accepts up to 4 modifications). with this patch svkbd registers 2 modifications - upper and lower case. function tmp_remap changed in a way that if the key is not found in a current layout, it is temporary added to it. for cyrillic layout uppercase (when shift is pressed) letters were showing anyway, because those are somehow found (modified) by xorg. but for armenian layout that did not work. now works.

From: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
Date: Sun, 3 Dec 2023 21:48:09 +0100

On Sun, Dec 03, 2023 at 08:22:04PM +0400, norayr chilingarian wrote:
> ---
> svkbd.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/svkbd.c b/svkbd.c
> index e4dbd15..cce2463 100644
> --- a/svkbd.c
> +++ b/svkbd.c
> _AT_@ -481,9 +481,18 @@ press(Key *k, KeySym buttonmod)
> int
> tmp_remap(KeySym keysym)
> {
> - XChangeKeyboardMapping(dpy, tmp_keycode, 1, &keysym, 1);
> + /* map lower and upper case of keysym to the temporary keycode */
> + KeySym syms[2];
> + XConvertCase(keysym, &syms[0], &syms[1]);
> +
> + /* if keysym is capital letter then swap upper and lower case */
> + if (keysym == syms[1])
> + syms[1] = syms[0], syms[0] = keysym;
> +
> + XChangeKeyboardMapping(dpy, tmp_keycode, syms[0] == syms[1] ? 1 : 2, syms, 1);
> XSync(dpy, False);
>
> + printdbg("Temorary map keysym %ld (%ld, %ld) to keycode %d\n", keysym, syms[0], syms[1], tmp_keycode);
> return tmp_keycode;
> }
>
> --
> 2.41.0
>
>

Thanks for the patch,

I'm not a svkbd user right now and also not Armenian.

Can anyone test this and report if it makes sense?

Thanks,

-- 
Kind regards,
Hiltjo
Received on Sun Dec 03 2023 - 21:48:09 CET

This archive was generated by hypermail 2.3.0 : Sun Dec 03 2023 - 21:48:39 CET