summary refs log tree commit diff
path: root/gnu/installer/newt/keymap.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/installer/newt/keymap.scm')
-rw-r--r--gnu/installer/newt/keymap.scm36
1 files changed, 31 insertions, 5 deletions
diff --git a/gnu/installer/newt/keymap.scm b/gnu/installer/newt/keymap.scm
index 55a0aa6bf9..6211af2bc5 100644
--- a/gnu/installer/newt/keymap.scm
+++ b/gnu/installer/newt/keymap.scm
@@ -24,6 +24,7 @@
   #:use-module (guix records)
   #:use-module (newt)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
   #:export (run-keymap-page))
@@ -35,6 +36,7 @@
      #:info-text (G_ "Please choose your keyboard layout.")
      #:listbox-items layouts
      #:listbox-item->text layout->text
+     #:sort-listbox-items? #f
      #:button-text (G_ "Exit")
      #:button-callback-procedure
      (lambda _
@@ -49,6 +51,7 @@
      #:info-text (G_ "Please choose a variant for your keyboard layout.")
      #:listbox-items variants
      #:listbox-item->text variant->text
+     #:sort-listbox-items? #f
      #:button-text (G_ "Back")
      #:button-callback-procedure
      (lambda _
@@ -56,6 +59,28 @@
         (condition
          (&installer-step-abort)))))))
 
+(define (sort-layouts layouts)
+  "Sort LAYOUTS list by putting the US layout ahead and return it."
+  (call-with-values
+      (lambda ()
+        (partition
+         (lambda (layout)
+           (let ((name (x11-keymap-layout-name layout)))
+             (string=? name "us")))
+         layouts))
+    (cut append <> <>)))
+
+(define (sort-variants variants)
+  "Sort VARIANTS list by putting the internation variant ahead and return it."
+  (call-with-values
+      (lambda ()
+        (partition
+         (lambda (variant)
+           (let ((name (x11-keymap-variant-name variant)))
+             (string=? name "altgr-intl")))
+         variants))
+    (cut append <> <>)))
+
 (define* (run-keymap-page layouts)
   "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
@@ -67,7 +92,7 @@ names of the selected keyboard layout and variant."
       (compute
        (lambda _
          (run-layout-page
-          layouts
+          (sort-layouts layouts)
           (lambda (layout)
             (x11-keymap-layout-description layout))))))
      ;; Propose the user to select a variant among those supported by the
@@ -80,10 +105,11 @@ names of the selected keyboard layout and variant."
                 (variants (x11-keymap-layout-variants layout)))
            ;; Return #f if the layout does not have any variant.
            (and (not (null? variants))
-                (run-variant-page variants
-                                  (lambda (variant)
-                                    (x11-keymap-variant-description
-                                     variant))))))))))
+                (run-variant-page
+                 (sort-variants variants)
+                 (lambda (variant)
+                   (x11-keymap-variant-description
+                    variant))))))))))
 
   (define (format-result result)
     (let ((layout (x11-keymap-layout-name