Hi, Thanks, I've applied the patch and fixed a tiny typo in the debug message.
I haven't tested the patch, but I trust you that it works. Of course if people notice bugs, feel free to report them. On Wed, Dec 13, 2023 at 04:30:17PM +0400, նորայր wrote: > also no need to know armenian to test. > just run ./svkbd-mobile-intl and type lowercase and uppercase in armenian > layout. > > do that for the patched version and you'll see the difference. > > for some reason on sxmo/postmarketos i have to restart the device in order to > run a newer binary. though i think i checked that when i remove the keyboard > with a gesture, the process gets killed. and if i replace the binary and get > the keyboard with a gesture again, it should run the newer binary. but maybe > something changed now, because last time i was testing it, i had to restart > the device. this is irrelevant to svkbd, i just think of how you will test > it, in case you will test it on sxmo/postmarketos the restart might be needed. > > On Wed, 13 Dec 2023 16:21:04 +0400 > նորայր <nor...@arnet.am> wrote: > > > ok let me try to explain this very simply. > > some time ago i have added armenian and dvorak layouts. > > i have noticed that in dvorak and all other layouts uppercase characters > > work. > > while you don't have to do any extra effort for that. let's say: > > > > ``` > > { 0, 0, XK_a, 1 }, > > { 0, 0, XK_o, 1 }, > > { 0, 0, XK_e, 1 }, > > { 0, 0, XK_u, 1 }, > > { 0, 0, XK_i, 1 }, > > { 0, 0, XK_d, 1 }, > > ``` > > > > notice that layout describes only the lowercase variant, and the uppercase > > works automagically. > > > > same with cyrillic: > > > > ``` > > { "й", 0, XK_Cyrillic_shorti, 1 }, > > { "ц", 0, XK_Cyrillic_tse, 1 }, > > { "у", 0, XK_Cyrillic_u, 1 }, > > { "к", 0, XK_Cyrillic_ka, 1 }, > > { "е", 0, XK_Cyrillic_ie, 1 }, > > ``` > > > > one doesn't even have to specify the uppercase variant. > > my guess is that the conversion is done by Xorg automatically for some > > layouts. i don't know why and how. > > > > however this approach didn't work with armenian layout (i guess it won't > > work with many other layouts), so i had to specify both uppercase and > > lowercase variants: > > > > ``` > > { "ճ", "Ճ", XK_Armenian_tche, 1 }, > > { "փ", "Փ", XK_Armenian_pyur, 1 }, > > { "բ", "Բ", XK_Armenian_ben, 1 }, > > { "ս", "Ս", XK_Armenian_se, 1 }, > > { "մ", "Մ", XK_Armenian_men, 1 }, > > { "ո", "Ո", XK_Armenian_vo, 1 }, > > { "ւ", "Ւ", XK_Armenian_vyun, 1 }, > > ``` > > > > though i have had specified the uppercase letters, they were painted on the > > keyboard, but didn't work. > > > > now with this patch (see the commit message for more details) uppercase > > letters work. > > my guess is this will fix the behaviour not only for armenian, but for many > > other layouts for which Xorg doesn't have a method to get the uppercase > > symbol automatically for some reason. > > my guess is that cyrillic and latin are for some reason handled differently > > by xorg than the majority of other character sets. > > > > and one more detail, though this commit fixes almost every letter in > > armenian layout, one thing still don't work. namely, this line: > > { "՝","՜", XK_Armenian_exclam, 1 }, > > > > for some reason only the second character described in this line ("՜") gets > > printed whether the shift is pressed or not. i will try to understand why > > this doesn't work some other day. > > > > but the commit fixes everything. i have this fix for a year already and i > > need to recompile svkbd every time after update, and restart the device, so > > if this is applied, it will simplify my life a lot. > > > > so to stress it again: this is not only relevant to armenian layout. > > > > > > > > > > On Sun, 3 Dec 2023 21:48:09 +0100 > > Hiltjo Posthuma <hil...@codemadness.org> wrote: > > > > > 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 > > > > @@ -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 > > > > > > > > > -- > > There are two ways of constructing a software design. One way is to make > > it so simple that there are obviously no deficiencies. And the other way is > > to make it so complicated that there are no obvious deficiencies. > > > > -- C.A.R. Hoare > > > > > -- > There are two ways of constructing a software design. One way is to make it > so simple that there are obviously no deficiencies. And the other way is to > make it so complicated that there are no obvious deficiencies. > > -- C.A.R. Hoare > -- Kind regards, Hiltjo