* bug#40493: installer: Provide a way to select multiple keyboard layouts @ 2020-04-07 17:12 Mathieu Othacehe 2020-04-07 17:50 ` pelzflorian (Florian Pelz) 0 siblings, 1 reply; 12+ messages in thread From: Mathieu Othacehe @ 2020-04-07 17:12 UTC (permalink / raw) To: 40493 Hello, The installer gained support for keyboard layout switching from every step recently[1]. It is also possible with commit 2729cb406d9f3e9eb22cc660f887138134edb3a8 to specify comma-separated keyboard layouts, this way: --8<---------------cut here---------------start------------->8--- (keyboard-layout "ar,us" #:options '("grp:alt_shift_toggle")) --8<---------------cut here---------------end--------------->8--- Now it would be nice to support multiple keyboard layout selection from the installer, so that a configuration like to one above is generated. Thanks, Mathieu [1]: https://lists.gnu.org/archive/html/bug-guix/2020-03/msg00381.html ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#40493: installer: Provide a way to select multiple keyboard layouts 2020-04-07 17:12 bug#40493: installer: Provide a way to select multiple keyboard layouts Mathieu Othacehe @ 2020-04-07 17:50 ` pelzflorian (Florian Pelz) 2020-04-07 20:38 ` Ludovic Courtès 0 siblings, 1 reply; 12+ messages in thread From: pelzflorian (Florian Pelz) @ 2020-04-07 17:50 UTC (permalink / raw) To: Mathieu Othacehe; +Cc: 40493 [-- Attachment #1: Type: text/plain, Size: 1938 bytes --] On Tue, Apr 07, 2020 at 07:12:34PM +0200, Mathieu Othacehe wrote: > Now it would be nice to support multiple keyboard layout selection from > the installer, so that a configuration like to one above is generated. > > Thanks, > > Mathieu Ludo responded to the other bug: On Tue, Apr 07, 2020 at 11:49:09AM +0200, Ludovic Courtès wrote: > Ideally we’d also offer a way to choose multiple layouts in the > installer, so that one can end up with: > > (keyboard-layout "ar,us" #:options '("grp:alt_shift_toggle")) > I believe the user should not have to manually select the other layout (if the user wants they can select via F1 key). Instead there should be a sane default (typically U.S. layout). But since I am used to Latin script, I may not have good judgment. IMHO two things should be done: * Within the installer, a toggleable second keyboard layout should be available by default. Mathieu enabled changing the layout via the F1 help menu. This is good and more flexible and discoverable, but a key combination is more convenient and people appear to be used to Alt+Shift toggling. * In the config.scm created by the installer, the default keyboard-layout should include the second layout. Both the config.scm default and the installer layout should be the same, I think. I attach a proposed solution for the first thing, though it does not yet update the toggle option correctly. If you think the approach is OK, then I will add more default alternative layouts to the maybe-add-second-layout procedure. > Although that’s mostly useful for the console as GDM and GNOME should be > able to do the right thing. > > Anyway, we can discuss it in a separate issue. > > Ludo’. The GNOME session after login will ask the user what keyboard layout they want, but the (I believe changeable) default for GDM comes from config.scm. Regards, Florian [-- Attachment #2: 0001-installer-Allow-Alt-Shift-toggle-from-non-Latin-keyb.patch --] [-- Type: text/plain, Size: 10221 bytes --] From 0d3a1ecc214fe55d77f45f4b2e690a93978da9ec Mon Sep 17 00:00:00 2001 From: Florian Pelz <pelzflorian@pelzflorian.de> Date: Tue, 7 Apr 2020 19:06:31 +0200 Subject: [PATCH] installer: Allow Alt+Shift toggle from non-Latin keyboard layouts. See <https://bugs.gnu.org/40273>. * gnu/installer/newt/keymap.scm (run-keymap-page): Maybe add second layout. * gnu/installer/keymap.scm (kmscon-update-keymap): Pass on XKB options. * gnu/installer/records.scm (<installer>): Adjust code comments. * gnu/installer.scm (apply-keymap): Pass on XKB options. (installer-steps): Adjust code comments. * gnu/packages/patches/kmscon-runtime-keymap-switch.patch: Apply XKB options. --- gnu/installer.scm | 14 +++++----- gnu/installer/keymap.scm | 8 ++++-- gnu/installer/newt/keymap.scm | 19 ++++++++++--- gnu/installer/record.scm | 3 ++- .../kmscon-runtime-keymap-switch.patch | 27 ++++++------------- 5 files changed, 40 insertions(+), 31 deletions(-) diff --git a/gnu/installer.scm b/gnu/installer.scm index 75c5a01570..72b7d195fd 100644 --- a/gnu/installer.scm +++ b/gnu/installer.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com> ;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de> ;;; ;;; This file is part of GNU Guix. ;;; @@ -170,9 +171,9 @@ been performed at build time." (define apply-keymap ;; Apply the specified keymap. Use the default keyboard model. #~(match-lambda - ((layout variant) + ((layout variant options) (kmscon-update-keymap (default-keyboard-model) - layout variant)))) + layout variant options)))) (define* (compute-keymap-step context) "Return a gexp that runs the keymap-page of INSTALLER and install the @@ -235,12 +236,13 @@ selected keymap." ;; The installer runs in a kmscon virtual terminal where loadkeys ;; won't work. kmscon uses libxkbcommon as a backend for keyboard - ;; input. It is possible to update kmscon current keymap by sending it - ;; a keyboard model, layout and variant, in a somehow similar way as - ;; what is done with setxkbmap utility. + ;; input. It is possible to update kmscon current keymap by sending + ;; it a keyboard model, layout, variant and options, in a somehow + ;; similar way as what is done with setxkbmap utility. ;; ;; So ask for a keyboard model, layout and variant to update the - ;; current kmscon keymap. + ;; current kmscon keymap. For non-Latin layouts, we add an + ;; appropriate second layout and toggle via Alt+Shift. (installer-step (id 'keymap) (description (G_ "Keyboard mapping selection")) diff --git a/gnu/installer/keymap.scm b/gnu/installer/keymap.scm index df9fc5e441..d520b782fd 100644 --- a/gnu/installer/keymap.scm +++ b/gnu/installer/keymap.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de> ;;; ;;; This file is part of GNU Guix. ;;; @@ -154,8 +155,8 @@ Configuration Database, describing possible XKB configurations." ((models layouts) (values models layouts))))) -(define (kmscon-update-keymap model layout variant) - "Update kmscon keymap with the provided MODEL, LAYOUT and VARIANT." +(define (kmscon-update-keymap model layout variant options) + "Update kmscon keymap with the provided MODEL, LAYOUT, VARIANT and OPTIONS." (and=> (getenv "KEYMAP_UPDATE") (lambda (keymap-file) @@ -175,4 +176,7 @@ Configuration Database, describing possible XKB configurations." (put-u8 port 0) (format port variant) + (put-u8 port 0) + + (format port options) (put-u8 port 0)))))) diff --git a/gnu/installer/newt/keymap.scm b/gnu/installer/newt/keymap.scm index 0147a0b9d5..ba02085a44 100644 --- a/gnu/installer/newt/keymap.scm +++ b/gnu/installer/newt/keymap.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com> ;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de> ;;; ;;; This file is part of GNU Guix. ;;; @@ -114,8 +115,10 @@ You can switch to different layout at any time from the help menu."))) (define* (run-keymap-page layouts #:key (context #f)) "Run a page asking the user to select a keyboard layout and variant. LAYOUTS -is a list of supported X11-KEYMAP-LAYOUT. Return a list of two elements, the -names of the selected keyboard layout and variant." +is a list of supported X11-KEYMAP-LAYOUT. For non-Latin keyboard layouts, a +second layout and toggle options will be added automatically. Return a list +of three elements, the names of the selected keyboard layout, variant and +optionsxs." (define keymap-steps (list (installer-step @@ -144,6 +147,15 @@ names of the selected keyboard layout and variant." (gettext (x11-keymap-variant-description variant) "xkeyboard-config")))))))))) + (define (maybe-add-second-layout first-layout) + "Return for a chosen keyboard layout either the same layout or possibly +the layout plus a suitable second layout, and also variant and options." + (match first-layout + (("ar" "azerty") (list "ar,fr" "azerty," "grp:alt_shift_toggle")) + (("ar" variant) (list "ar,us" variant "grp:alt_shift_toggle")) + (("ja" variant) (list "ja,us" variant "grp:alt_shift_toggle")) + ((layout variant) (list layout variant "")))) + (define (format-result result) (let ((layout (x11-keymap-layout-name (result-step result 'layout))) @@ -151,7 +163,8 @@ names of the selected keyboard layout and variant." (lambda (variant) (gettext (x11-keymap-variant-name variant) "xkeyboard-config"))))) - (list layout (or variant "")))) + (maybe-add-second-layout + (list layout (or variant ""))))) (format-result (run-installer-steps #:steps keymap-steps))) diff --git a/gnu/installer/record.scm b/gnu/installer/record.scm index 78acf50c63..13acd33fc6 100644 --- a/gnu/installer/record.scm +++ b/gnu/installer/record.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de> ;;; ;;; This file is part of GNU Guix. ;;; @@ -63,7 +64,7 @@ (exit-error installer-exit-error) ;; procedure void -> void (final-page installer-final-page) - ;; procedure (layouts context) -> (list layout variant) + ;; procedure (layouts context) -> (list layout variant options) (keymap-page installer-keymap-page) ;; procedure: (#:key supported-locales iso639-languages iso3166-territories) ;; -> glibc-locale diff --git a/gnu/packages/patches/kmscon-runtime-keymap-switch.patch b/gnu/packages/patches/kmscon-runtime-keymap-switch.patch index 656c76fa40..deb5688daf 100644 --- a/gnu/packages/patches/kmscon-runtime-keymap-switch.patch +++ b/gnu/packages/patches/kmscon-runtime-keymap-switch.patch @@ -1,14 +1,5 @@ -From 360d44d67e7be46108bec982ff2e79b89f04a9a3 Mon Sep 17 00:00:00 2001 -From: Mathieu Othacehe <m.othacehe@gmail.com> -Date: Thu, 15 Nov 2018 14:34:40 +0900 -Subject: [PATCH] add runtime keymap switch support. - ---- - src/pty.c | 23 ++++++++++- - src/uterm_input.c | 2 + - src/uterm_input_internal.h | 5 +++ - src/uterm_input_uxkb.c | 83 ++++++++++++++++++++++++++++++++++++++ - 4 files changed, 111 insertions(+), 2 deletions(-) +By Mathieu Othacehe <m.othacehe@gmail.com>. +Modified by Florian Pelz <pelzflorian@pelzflorian.de>. diff --git a/src/pty.c b/src/pty.c index 1443f4a..f64cb5b 100644 @@ -124,7 +115,7 @@ index 04e6cc9..ec44459 100644 uint16_t key_state, uint16_t code); diff --git a/src/uterm_input_uxkb.c b/src/uterm_input_uxkb.c -index 925c755..4760972 100644 +index 925c755..5d5c22e 100644 --- a/src/uterm_input_uxkb.c +++ b/src/uterm_input_uxkb.c @@ -31,6 +31,9 @@ @@ -137,7 +128,7 @@ index 925c755..4760972 100644 #include <xkbcommon/xkbcommon.h> #include "shl_hook.h" #include "shl_llog.h" -@@ -178,6 +181,86 @@ static void timer_event(struct ev_timer *timer, uint64_t num, void *data) +@@ -178,6 +181,87 @@ static void timer_event(struct ev_timer *timer, uint64_t num, void *data) shl_hook_call(dev->input->hook, dev->input, &dev->repeat_event); } @@ -145,11 +136,11 @@ index 925c755..4760972 100644 +{ + struct uterm_input_dev *dev = data; + char in; -+ char keymap[3][255]; ++ char keymap[4][255]; + int pos = 0; + int curr_keymap = 0; + int ret; -+ char *model, *layout, *variant; ++ char *model, *layout, *variant, *options; + + if (!(mask & EV_READABLE)) + return; @@ -159,6 +150,7 @@ index 925c755..4760972 100644 + model = keymap[0]; + layout = keymap[1]; + variant = keymap[2]; ++ options = keymap[3]; + + do { + ret = read(dev->rupdate_fd, &in, sizeof(in)); @@ -175,7 +167,7 @@ index 925c755..4760972 100644 + + llog_info(dev->input, "HANDLER CALLED %s|%s|%s\n", + model, layout, variant); -+ uxkb_desc_init(dev->input, model, layout, variant, NULL, NULL); ++ uxkb_desc_init(dev->input, model, layout, variant, options, NULL); + + dev->state = xkb_state_new(dev->input->keymap); + if (!dev->state) { @@ -224,6 +216,3 @@ index 925c755..4760972 100644 int uxkb_dev_init(struct uterm_input_dev *dev) { int ret; --- -2.17.1 - -- 2.26.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* bug#40493: installer: Provide a way to select multiple keyboard layouts 2020-04-07 17:50 ` pelzflorian (Florian Pelz) @ 2020-04-07 20:38 ` Ludovic Courtès 2020-04-07 21:56 ` pelzflorian (Florian Pelz) 2020-04-08 9:58 ` pelzflorian (Florian Pelz) 0 siblings, 2 replies; 12+ messages in thread From: Ludovic Courtès @ 2020-04-07 20:38 UTC (permalink / raw) To: pelzflorian (Florian Pelz); +Cc: 40493 Good evening comrades! "pelzflorian (Florian Pelz)" <pelzflorian@pelzflorian.de> skribis: > IMHO two things should be done: > > * Within the installer, a toggleable second keyboard layout should be > available by default. > > Mathieu enabled changing the layout via the F1 help menu. This is > good and more flexible and discoverable, but a key combination is > more convenient and people appear to be used to Alt+Shift toggling. Agreed! > * In the config.scm created by the installer, the default > keyboard-layout should include the second layout. Yes. > I attach a proposed solution for the first thing, though it does not > yet update the toggle option correctly. If you think the > approach is OK, then I will add more default alternative layouts to > the maybe-add-second-layout procedure. I think the approach is OK, even as-is. We can then improve it by (hopefully) replacing the hard-coded list of non-Latin layouts (ar, jp, etc.) with code that determines whether the main layout is Latin or not. > From 0d3a1ecc214fe55d77f45f4b2e690a93978da9ec Mon Sep 17 00:00:00 2001 > From: Florian Pelz <pelzflorian@pelzflorian.de> > Date: Tue, 7 Apr 2020 19:06:31 +0200 > Subject: [PATCH] installer: Allow Alt+Shift toggle from non-Latin keyboard > layouts. > > See <https://bugs.gnu.org/40273>. > > * gnu/installer/newt/keymap.scm (run-keymap-page): Maybe add second layout. > * gnu/installer/keymap.scm (kmscon-update-keymap): Pass on XKB options. > * gnu/installer/records.scm (<installer>): Adjust code comments. > * gnu/installer.scm (apply-keymap): Pass on XKB options. > (installer-steps): Adjust code comments. > * gnu/packages/patches/kmscon-runtime-keymap-switch.patch: Apply XKB options. Overall LGTM! Minor suggestion below: > (define* (run-keymap-page layouts #:key (context #f)) > "Run a page asking the user to select a keyboard layout and variant. LAYOUTS > -is a list of supported X11-KEYMAP-LAYOUT. Return a list of two elements, the > -names of the selected keyboard layout and variant." > +is a list of supported X11-KEYMAP-LAYOUT. For non-Latin keyboard layouts, a > +second layout and toggle options will be added automatically. Return a list > +of three elements, the names of the selected keyboard layout, variant and > +optionsxs." ^ You forgot to hold the “Control” key. :-) > + (define (maybe-add-second-layout first-layout) > + "Return for a chosen keyboard layout either the same layout or possibly > +the layout plus a suitable second layout, and also variant and options." To leave room for improvement, how about making it a top-level procedure along these lines: (define (switchable-latin-layout layout variant) "If LAYOUT is a non-Latin layout, return a new combined layout, a variant, and options that allow the user to switch between the non-Latin and the Latin layout. Otherwise, return LAYOUT, VARIANT, and #f." (if (member layout '("ar" …)) …)) ? Eventually we can replace ‘member’ or ‘match’ with something more fancy, assuming the xkeyboard-config databases contain the relevant info (‘base.xml’ doesn’t say what’s Latin and what’s not apparently.) > + (match first-layout > + (("ar" "azerty") (list "ar,fr" "azerty," "grp:alt_shift_toggle")) ^ Remove comma? Thank you! Ludo’. ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#40493: installer: Provide a way to select multiple keyboard layouts 2020-04-07 20:38 ` Ludovic Courtès @ 2020-04-07 21:56 ` pelzflorian (Florian Pelz) 2020-04-08 9:58 ` pelzflorian (Florian Pelz) 1 sibling, 0 replies; 12+ messages in thread From: pelzflorian (Florian Pelz) @ 2020-04-07 21:56 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 40493 On Tue, Apr 07, 2020 at 10:38:16PM +0200, Ludovic Courtès wrote: > Overall LGTM! Minor suggestion below: I will make a new patch tonight and follow your suggestions. Thank you! The layout toggling worked fine btw, except Arabic layout is called "ara" and not "ar" in base.xml … Regards, Florian ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#40493: installer: Provide a way to select multiple keyboard layouts 2020-04-07 20:38 ` Ludovic Courtès 2020-04-07 21:56 ` pelzflorian (Florian Pelz) @ 2020-04-08 9:58 ` pelzflorian (Florian Pelz) 2020-04-08 13:22 ` Ludovic Courtès 1 sibling, 1 reply; 12+ messages in thread From: pelzflorian (Florian Pelz) @ 2020-04-08 9:58 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 40493 [-- Attachment #1: Type: text/plain, Size: 725 bytes --] On Tue, Apr 07, 2020 at 10:38:16PM +0200, Ludovic Courtès wrote: > I think the approach is OK, even as-is. We can then improve it by > (hopefully) replacing the hard-coded list of non-Latin layouts (ar, jp, > etc.) with code that determines whether the main layout is Latin or not. > I am still doing final testing, but I believe I can push the attached patch. > > + (match first-layout > > + (("ar" "azerty") (list "ar,fr" "azerty," "grp:alt_shift_toggle")) > ^ > Remove comma? The comma is needed, for example the Japanese Kana ("jp" "kana") layout breaks otherwise. I believe the reason is that the "kana" variant gets applied to "us" layout. Regards, Florian [-- Attachment #2: 0001-installer-Allow-Alt-Shift-toggle-from-non-Latin-keyb.patch --] [-- Type: text/plain, Size: 12075 bytes --] From 68fc18d2816e3997f38d0a3c69566d85b26c8719 Mon Sep 17 00:00:00 2001 From: Florian Pelz <pelzflorian@pelzflorian.de> Date: Wed, 8 Apr 2020 11:46:16 +0200 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [PATCH] installer: Allow Alt+Shift toggle from non-Latin keyboard layouts. Fixes <https://bugs.gnu.org/40493>. * gnu/installer/newt/keymap.scm (%non-latin-layouts): New variable. (toggleable-latin-layout): New procedure to compute combined layouts. (run-keymap-page): Use it. (keyboard-layout->configuration): Apply it in config.scm. * gnu/installer/newt/help.scm (run-help-page): Mention Alt+Shift. * gnu/installer/keymap.scm (kmscon-update-keymap): Pass on XKB options. * gnu/installer/record.scm (<installer>): Adjust code comments. * gnu/installer.scm (apply-keymap): Pass on XKB options. (installer-steps): Adjust code comments. * gnu/packages/patches/kmscon-runtime-keymap-switch.patch: Apply XKB options. --- gnu/installer.scm | 14 ++++--- gnu/installer/keymap.scm | 8 +++- gnu/installer/newt/help.scm | 5 ++- gnu/installer/newt/keymap.scm | 40 ++++++++++++++++--- gnu/installer/record.scm | 3 +- .../kmscon-runtime-keymap-switch.patch | 27 ++++--------- 6 files changed, 63 insertions(+), 34 deletions(-) diff --git a/gnu/installer.scm b/gnu/installer.scm index 75c5a01570..72b7d195fd 100644 --- a/gnu/installer.scm +++ b/gnu/installer.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com> ;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de> ;;; ;;; This file is part of GNU Guix. ;;; @@ -170,9 +171,9 @@ been performed at build time." (define apply-keymap ;; Apply the specified keymap. Use the default keyboard model. #~(match-lambda - ((layout variant) + ((layout variant options) (kmscon-update-keymap (default-keyboard-model) - layout variant)))) + layout variant options)))) (define* (compute-keymap-step context) "Return a gexp that runs the keymap-page of INSTALLER and install the @@ -235,12 +236,13 @@ selected keymap." ;; The installer runs in a kmscon virtual terminal where loadkeys ;; won't work. kmscon uses libxkbcommon as a backend for keyboard - ;; input. It is possible to update kmscon current keymap by sending it - ;; a keyboard model, layout and variant, in a somehow similar way as - ;; what is done with setxkbmap utility. + ;; input. It is possible to update kmscon current keymap by sending + ;; it a keyboard model, layout, variant and options, in a somehow + ;; similar way as what is done with setxkbmap utility. ;; ;; So ask for a keyboard model, layout and variant to update the - ;; current kmscon keymap. + ;; current kmscon keymap. For non-Latin layouts, we add an + ;; appropriate second layout and toggle via Alt+Shift. (installer-step (id 'keymap) (description (G_ "Keyboard mapping selection")) diff --git a/gnu/installer/keymap.scm b/gnu/installer/keymap.scm index df9fc5e441..d520b782fd 100644 --- a/gnu/installer/keymap.scm +++ b/gnu/installer/keymap.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de> ;;; ;;; This file is part of GNU Guix. ;;; @@ -154,8 +155,8 @@ Configuration Database, describing possible XKB configurations." ((models layouts) (values models layouts))))) -(define (kmscon-update-keymap model layout variant) - "Update kmscon keymap with the provided MODEL, LAYOUT and VARIANT." +(define (kmscon-update-keymap model layout variant options) + "Update kmscon keymap with the provided MODEL, LAYOUT, VARIANT and OPTIONS." (and=> (getenv "KEYMAP_UPDATE") (lambda (keymap-file) @@ -175,4 +176,7 @@ Configuration Database, describing possible XKB configurations." (put-u8 port 0) (format port variant) + (put-u8 port 0) + + (format port options) (put-u8 port 0)))))) diff --git a/gnu/installer/newt/help.scm b/gnu/installer/newt/help.scm index a488f5fa2a..3ccfaf2e54 100644 --- a/gnu/installer/newt/help.scm +++ b/gnu/installer/newt/help.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de> ;;; ;;; This file is part of GNU Guix. ;;; @@ -31,7 +32,9 @@ (cons (G_ "Change keyboard layout") keyboard-layout-selection))) (result (run-listbox-selection-page - #:info-text (G_ "This is the help menu, please choose an action.") + #:info-text (G_ "This is the help menu. Here you can change your +keyboard layout. Non-Latin layouts can also be toggled with Alt+Shift. +Please choose an action.") #:title (G_ "Installation help") #:listbox-items items #:listbox-item->text car diff --git a/gnu/installer/newt/keymap.scm b/gnu/installer/newt/keymap.scm index 0147a0b9d5..475ffc2261 100644 --- a/gnu/installer/newt/keymap.scm +++ b/gnu/installer/newt/keymap.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com> ;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de> ;;; ;;; This file is part of GNU Guix. ;;; @@ -112,10 +113,35 @@ You can switch to different layout at any time from the help menu."))) variants)) (cut append <> <>))) +(define %non-latin-layouts + ;; List of keyboard layouts marked as $nonlatin in xkeyboard-config. + '("am" "ara" "ben" "bd" "bg" "bt" "by" "cs" "deva" "ge" "gh" + "gr" "guj" "guru" "il" "in" "ir" "iku" "jp" "kan" "kh" "kr" + "la" "lao" "lk" "mk" "mm" "mn" "mv" "mal" "olck" "ori" "pk" + "ru" "scc" "sy" "syr" "tel" "th" "tj" "tam" "ua" "uz" + ;; The list from xkeyboard-config is incomplete. Add more layouts when + ;; noticed: + "et")) + +(define (toggleable-latin-layout layout variant) + "If LAYOUT is a non-Latin layout, return a new combined layout, +a variant, and options that allow the user to switch between the +non-Latin and the Latin layout. Otherwise, return LAYOUT, VARIANT, +and the empty string." + (if (member layout %non-latin-layouts) + (let ((latin-layout (if (string=? variant "azerty") "fr" "us"))) + (list + (string-append layout "," latin-layout) + (string-append variant ",") ;comma to use variant only for non-Latin + "grp:alt_shift_toggle")) + (list layout variant ""))) + (define* (run-keymap-page layouts #:key (context #f)) "Run a page asking the user to select a keyboard layout and variant. LAYOUTS -is a list of supported X11-KEYMAP-LAYOUT. Return a list of two elements, the -names of the selected keyboard layout and variant." +is a list of supported X11-KEYMAP-LAYOUT. For non-Latin keyboard layouts, a +second layout and toggle options will be added automatically. Return a list +of three elements, the names of the selected keyboard layout, variant and +options." (define keymap-steps (list (installer-step @@ -151,14 +177,18 @@ names of the selected keyboard layout and variant." (lambda (variant) (gettext (x11-keymap-variant-name variant) "xkeyboard-config"))))) - (list layout (or variant "")))) + (apply toggleable-latin-layout + (list layout (or variant ""))))) (format-result (run-installer-steps #:steps keymap-steps))) (define (keyboard-layout->configuration keymap) "Return the operating system configuration snippet to install KEYMAP." (match keymap - ((name "") + ((name "" "") `((keyboard-layout (keyboard-layout ,name)))) - ((name variant) + ((name variant "grp:alt_shift_toggle") + `((keyboard-layout (keyboard-layout ,name ,variant + #:options '("grp:alt_shift_toggle"))))) + ((name variant _) `((keyboard-layout (keyboard-layout ,name ,variant)))))) diff --git a/gnu/installer/record.scm b/gnu/installer/record.scm index 78acf50c63..13acd33fc6 100644 --- a/gnu/installer/record.scm +++ b/gnu/installer/record.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de> ;;; ;;; This file is part of GNU Guix. ;;; @@ -63,7 +64,7 @@ (exit-error installer-exit-error) ;; procedure void -> void (final-page installer-final-page) - ;; procedure (layouts context) -> (list layout variant) + ;; procedure (layouts context) -> (list layout variant options) (keymap-page installer-keymap-page) ;; procedure: (#:key supported-locales iso639-languages iso3166-territories) ;; -> glibc-locale diff --git a/gnu/packages/patches/kmscon-runtime-keymap-switch.patch b/gnu/packages/patches/kmscon-runtime-keymap-switch.patch index 656c76fa40..deb5688daf 100644 --- a/gnu/packages/patches/kmscon-runtime-keymap-switch.patch +++ b/gnu/packages/patches/kmscon-runtime-keymap-switch.patch @@ -1,14 +1,5 @@ -From 360d44d67e7be46108bec982ff2e79b89f04a9a3 Mon Sep 17 00:00:00 2001 -From: Mathieu Othacehe <m.othacehe@gmail.com> -Date: Thu, 15 Nov 2018 14:34:40 +0900 -Subject: [PATCH] add runtime keymap switch support. - ---- - src/pty.c | 23 ++++++++++- - src/uterm_input.c | 2 + - src/uterm_input_internal.h | 5 +++ - src/uterm_input_uxkb.c | 83 ++++++++++++++++++++++++++++++++++++++ - 4 files changed, 111 insertions(+), 2 deletions(-) +By Mathieu Othacehe <m.othacehe@gmail.com>. +Modified by Florian Pelz <pelzflorian@pelzflorian.de>. diff --git a/src/pty.c b/src/pty.c index 1443f4a..f64cb5b 100644 @@ -124,7 +115,7 @@ index 04e6cc9..ec44459 100644 uint16_t key_state, uint16_t code); diff --git a/src/uterm_input_uxkb.c b/src/uterm_input_uxkb.c -index 925c755..4760972 100644 +index 925c755..5d5c22e 100644 --- a/src/uterm_input_uxkb.c +++ b/src/uterm_input_uxkb.c @@ -31,6 +31,9 @@ @@ -137,7 +128,7 @@ index 925c755..4760972 100644 #include <xkbcommon/xkbcommon.h> #include "shl_hook.h" #include "shl_llog.h" -@@ -178,6 +181,86 @@ static void timer_event(struct ev_timer *timer, uint64_t num, void *data) +@@ -178,6 +181,87 @@ static void timer_event(struct ev_timer *timer, uint64_t num, void *data) shl_hook_call(dev->input->hook, dev->input, &dev->repeat_event); } @@ -145,11 +136,11 @@ index 925c755..4760972 100644 +{ + struct uterm_input_dev *dev = data; + char in; -+ char keymap[3][255]; ++ char keymap[4][255]; + int pos = 0; + int curr_keymap = 0; + int ret; -+ char *model, *layout, *variant; ++ char *model, *layout, *variant, *options; + + if (!(mask & EV_READABLE)) + return; @@ -159,6 +150,7 @@ index 925c755..4760972 100644 + model = keymap[0]; + layout = keymap[1]; + variant = keymap[2]; ++ options = keymap[3]; + + do { + ret = read(dev->rupdate_fd, &in, sizeof(in)); @@ -175,7 +167,7 @@ index 925c755..4760972 100644 + + llog_info(dev->input, "HANDLER CALLED %s|%s|%s\n", + model, layout, variant); -+ uxkb_desc_init(dev->input, model, layout, variant, NULL, NULL); ++ uxkb_desc_init(dev->input, model, layout, variant, options, NULL); + + dev->state = xkb_state_new(dev->input->keymap); + if (!dev->state) { @@ -224,6 +216,3 @@ index 925c755..4760972 100644 int uxkb_dev_init(struct uterm_input_dev *dev) { int ret; --- -2.17.1 - -- 2.26.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* bug#40493: installer: Provide a way to select multiple keyboard layouts 2020-04-08 9:58 ` pelzflorian (Florian Pelz) @ 2020-04-08 13:22 ` Ludovic Courtès 2020-04-09 4:14 ` pelzflorian (Florian Pelz) 0 siblings, 1 reply; 12+ messages in thread From: Ludovic Courtès @ 2020-04-08 13:22 UTC (permalink / raw) To: pelzflorian (Florian Pelz); +Cc: 40493 Hi, "pelzflorian (Florian Pelz)" <pelzflorian@pelzflorian.de> skribis: > The comma is needed, for example the Japanese Kana ("jp" "kana") > layout breaks otherwise. I believe the reason is that the "kana" > variant gets applied to "us" layout. I see. > From 68fc18d2816e3997f38d0a3c69566d85b26c8719 Mon Sep 17 00:00:00 2001 > From: Florian Pelz <pelzflorian@pelzflorian.de> > Date: Wed, 8 Apr 2020 11:46:16 +0200 > Content-Type: text/plain; charset=UTF-8 > Content-Transfer-Encoding: 8bit > Subject: [PATCH] installer: Allow Alt+Shift toggle from non-Latin keyboard > layouts. > > Fixes <https://bugs.gnu.org/40493>. > > * gnu/installer/newt/keymap.scm (%non-latin-layouts): New variable. > (toggleable-latin-layout): New procedure to compute combined layouts. > (run-keymap-page): Use it. > (keyboard-layout->configuration): Apply it in config.scm. > * gnu/installer/newt/help.scm (run-help-page): Mention Alt+Shift. > * gnu/installer/keymap.scm (kmscon-update-keymap): Pass on XKB options. > * gnu/installer/record.scm (<installer>): Adjust code comments. > * gnu/installer.scm (apply-keymap): Pass on XKB options. > (installer-steps): Adjust code comments. > * gnu/packages/patches/kmscon-runtime-keymap-switch.patch: Apply XKB options. [...] > +(define %non-latin-layouts > + ;; List of keyboard layouts marked as $nonlatin in xkeyboard-config. Out of curiosity, where did you find that info? Perhaps add the name of the relevant file or XML tag here. > + (apply toggleable-latin-layout > + (list layout (or variant ""))))) Simply: (toggleable-latin-layout layout (or variant "")) This allows the compiler to detect a wrong number of arguments. Go for it, thank you! Ludo’. ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#40493: installer: Provide a way to select multiple keyboard layouts 2020-04-08 13:22 ` Ludovic Courtès @ 2020-04-09 4:14 ` pelzflorian (Florian Pelz) 2020-04-09 4:21 ` pelzflorian (Florian Pelz) ` (2 more replies) 0 siblings, 3 replies; 12+ messages in thread From: pelzflorian (Florian Pelz) @ 2020-04-09 4:14 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 40493-done On Wed, Apr 08, 2020 at 03:22:34PM +0200, Ludovic Courtès wrote: > Go for it, thank you! I added some more heuristics on whether a layout is Latin or not and after much testing pushed as 91c231a2223440081426929828a23c7baa0214fd. There are still few false positives like non-Kana Japanese layouts that are Latin but toggle to U.S. They can be fixed later. More importantly with 7bc71025ccd0fabd739803889825e10341fbabdf I also fixed a layout’s empty variant "" not being a choice in the installer. The "" variant is the only variant of the Azerbaijani layout providing the Latin script Azerbaijan uses since a few decades, so it is important. I hope the code is alright; maybe I should not have just pushed, but I believe it is alright. Marking as done. Regards, Florian ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#40493: installer: Provide a way to select multiple keyboard layouts 2020-04-09 4:14 ` pelzflorian (Florian Pelz) @ 2020-04-09 4:21 ` pelzflorian (Florian Pelz) 2020-04-09 7:25 ` Mathieu Othacehe 2020-04-09 7:54 ` Ludovic Courtès 2 siblings, 0 replies; 12+ messages in thread From: pelzflorian (Florian Pelz) @ 2020-04-09 4:21 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 40493-done On Thu, Apr 09, 2020 at 06:14:11AM +0200, pelzflorian (Florian Pelz) wrote: > Marking as done. P.S. Don’t brag with Arabic support in Guix’ installer just yet because Arabs still have to confusedly read from left to right. https://bugs.gnu.org/35319 But that is something to solve later. ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#40493: installer: Provide a way to select multiple keyboard layouts 2020-04-09 4:14 ` pelzflorian (Florian Pelz) 2020-04-09 4:21 ` pelzflorian (Florian Pelz) @ 2020-04-09 7:25 ` Mathieu Othacehe 2020-04-09 7:36 ` pelzflorian (Florian Pelz) 2020-04-09 7:54 ` Ludovic Courtès 2 siblings, 1 reply; 12+ messages in thread From: Mathieu Othacehe @ 2020-04-09 7:25 UTC (permalink / raw) To: pelzflorian (Florian Pelz); +Cc: 40493-done Hello Florian, > I added some more heuristics on whether a layout is Latin or not and > after much testing pushed as 91c231a2223440081426929828a23c7baa0214fd. > There are still few false positives like non-Kana Japanese layouts > that are Latin but toggle to U.S. They can be fixed later. Nice! Thanks for taking care of this :) In the future it would be nice to be able to extract %non-latin-layout by parsing the base file in xkeyboard-config, rather than by maintaining this list, but that's a minor point, and I guess new keyboard layouts are not coming out every day :p Mathieu ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#40493: installer: Provide a way to select multiple keyboard layouts 2020-04-09 7:25 ` Mathieu Othacehe @ 2020-04-09 7:36 ` pelzflorian (Florian Pelz) 2020-04-09 15:24 ` Ludovic Courtès 0 siblings, 1 reply; 12+ messages in thread From: pelzflorian (Florian Pelz) @ 2020-04-09 7:36 UTC (permalink / raw) To: Mathieu Othacehe; +Cc: 40493-done On Thu, Apr 09, 2020 at 09:25:58AM +0200, Mathieu Othacehe wrote: > Nice! Thanks for taking care of this :) > :) > In the future it would be nice to be able to extract %non-latin-layout > by parsing the base file in xkeyboard-config, rather than by maintaining > this list, but that's a minor point, and I guess new keyboard layouts > are not coming out every day :p Yes, but the source in /gnu/store/wsykijz9a1p7gx3z8hlmn58v5f5bswp7-xkeyboard-config-2.29/share/X11/xkb/rules/base looks like this: // If you want non-latin layouts implicitly include the en_US layout // uncomment lines below //! $nonlatin = am ara ben bd bg bt by cs deva ge gh gr guj guru il \ // in ir iku jp kan kh kr la lao lk mk mm mn mv mal olck \ // ori pk ru scc sy syr tel th tj tam ua uz I am not sure if parsing that (and filtering out "kr") is worth it. Regards, Florian ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#40493: installer: Provide a way to select multiple keyboard layouts 2020-04-09 7:36 ` pelzflorian (Florian Pelz) @ 2020-04-09 15:24 ` Ludovic Courtès 0 siblings, 0 replies; 12+ messages in thread From: Ludovic Courtès @ 2020-04-09 15:24 UTC (permalink / raw) To: pelzflorian (Florian Pelz); +Cc: 40493-done "pelzflorian (Florian Pelz)" <pelzflorian@pelzflorian.de> skribis: > On Thu, Apr 09, 2020 at 09:25:58AM +0200, Mathieu Othacehe wrote: [...] >> In the future it would be nice to be able to extract %non-latin-layout >> by parsing the base file in xkeyboard-config, rather than by maintaining >> this list, but that's a minor point, and I guess new keyboard layouts >> are not coming out every day :p > > Yes, but the source in > /gnu/store/wsykijz9a1p7gx3z8hlmn58v5f5bswp7-xkeyboard-config-2.29/share/X11/xkb/rules/base > looks like this: > > // If you want non-latin layouts implicitly include the en_US layout > // uncomment lines below > //! $nonlatin = am ara ben bd bg bt by cs deva ge gh gr guj guru il \ > // in ir iku jp kan kh kr la lao lk mk mm mn mv mal olck \ > // ori pk ru scc sy syr tel th tj tam ua uz > > I am not sure if parsing that (and filtering out "kr") is worth it. Uh, agreed, it doesn’t look like something parseable. Also, presumably that list won’t change much over time :-), so it’s OK to have it hard-coded in Guix IMO. Ludo’. ^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#40493: installer: Provide a way to select multiple keyboard layouts 2020-04-09 4:14 ` pelzflorian (Florian Pelz) 2020-04-09 4:21 ` pelzflorian (Florian Pelz) 2020-04-09 7:25 ` Mathieu Othacehe @ 2020-04-09 7:54 ` Ludovic Courtès 2 siblings, 0 replies; 12+ messages in thread From: Ludovic Courtès @ 2020-04-09 7:54 UTC (permalink / raw) To: pelzflorian (Florian Pelz); +Cc: 40493-done Hi Florian, "pelzflorian (Florian Pelz)" <pelzflorian@pelzflorian.de> skribis: > On Wed, Apr 08, 2020 at 03:22:34PM +0200, Ludovic Courtès wrote: >> Go for it, thank you! > > I added some more heuristics on whether a layout is Latin or not and > after much testing pushed as 91c231a2223440081426929828a23c7baa0214fd. > There are still few false positives like non-Kana Japanese layouts > that are Latin but toggle to U.S. They can be fixed later. Awesome! > More importantly with 7bc71025ccd0fabd739803889825e10341fbabdf I also > fixed a layout’s empty variant "" not being a choice in the installer. > The "" variant is the only variant of the Azerbaijani layout providing > the Latin script Azerbaijan uses since a few decades, so it is > important. I hope the code is alright; maybe I should not have just > pushed, but I believe it is alright. Good, it’s great you’re paying close attention to this. The patch seems reasonable to me. > P.S. Don’t brag with Arabic support in Guix’ installer just yet > because Arabs still have to confusedly read from left to right. > > https://bugs.gnu.org/35319 > > But that is something to solve later. Yeah. I’ll run the “gui-installed” tests to make sure everything’s is still fine, then run “make release” and upload files for testing later today. Thanks a lot, Florian! Ludo’. ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2020-04-09 15:25 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-04-07 17:12 bug#40493: installer: Provide a way to select multiple keyboard layouts Mathieu Othacehe 2020-04-07 17:50 ` pelzflorian (Florian Pelz) 2020-04-07 20:38 ` Ludovic Courtès 2020-04-07 21:56 ` pelzflorian (Florian Pelz) 2020-04-08 9:58 ` pelzflorian (Florian Pelz) 2020-04-08 13:22 ` Ludovic Courtès 2020-04-09 4:14 ` pelzflorian (Florian Pelz) 2020-04-09 4:21 ` pelzflorian (Florian Pelz) 2020-04-09 7:25 ` Mathieu Othacehe 2020-04-09 7:36 ` pelzflorian (Florian Pelz) 2020-04-09 15:24 ` Ludovic Courtès 2020-04-09 7:54 ` Ludovic Courtès
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/guix.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).