diff --git a/gnu/installer.scm b/gnu/installer.scm index 9f39191d54..084f437604 100644 --- a/gnu/installer.scm +++ b/gnu/installer.scm @@ -172,7 +172,7 @@ been performed at build time." (kmscon-update-keymap (default-keyboard-model) layout variant)))) -(define* (compute-keymap-step) +(define* (compute-keymap-step context) "Return a gexp that runs the keymap-page of INSTALLER and install the selected keymap." #~(lambda (current-installer) @@ -184,7 +184,7 @@ selected keymap." "/share/X11/xkb/rules/base.xml"))) (lambda (models layouts) ((installer-keymap-page current-installer) - layouts))))) + layouts '#$context))))) (#$apply-keymap result) result))) @@ -193,10 +193,15 @@ selected keymap." #:locales-name "locales" #:iso639-languages-name "iso639-languages" #:iso3166-territories-name "iso3166-territories")) - (keymap-step (compute-keymap-step)) (timezone-data #~(string-append #$tzdata "/share/zoneinfo/zone.tab"))) #~(lambda (current-installer) + ((installer-help-menu current-installer) + (lambda () + ((installer-help-page current-installer) + (lambda _ + (#$(compute-keymap-step 'help) + current-installer))))) (list ;; Ask the user to choose a locale among those supported by ;; the glibc. Install the selected locale right away, so that @@ -238,7 +243,8 @@ selected keymap." (id 'keymap) (description (G_ "Keyboard mapping selection")) (compute (lambda _ - (#$keymap-step current-installer))) + (#$(compute-keymap-step 'default) + current-installer))) (configuration-formatter keyboard-layout->configuration)) ;; Ask the user to input a hostname for the system. @@ -295,8 +301,8 @@ selected keymap." (define guile-newt ;; Guile-Newt with 'form-watch-fd'. ;; TODO: Remove once a new release is out. - (let ((commit "b3c885d42cfac327d3531c9d064939514ce6bf12") - (revision "1")) + (let ((commit "c3cdeb0b53ac71aedabee669f57d44563c662446") + (revision "2")) (package (inherit (@ (gnu packages guile-xyz) guile-newt)) (name "guile-newt") @@ -309,7 +315,7 @@ selected keymap." (file-name (git-file-name name version)) (sha256 (base32 - "02p0bi6c05699idgx6gfkljhqgi8zf09clhzx81i8wa064s70r1y"))))))) + "1gksd1lzgjjh1p9vczghg8jw995d22hm34kbsiv8rcryirv2xy09"))))))) (define (installer-program) "Return a file-like object that runs the given INSTALLER." diff --git a/gnu/installer/newt.scm b/gnu/installer/newt.scm index 6c44b4acf6..7ac015eaad 100644 --- a/gnu/installer/newt.scm +++ b/gnu/installer/newt.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2018 Mathieu Othacehe +;;; Copyright © 2018, 2020 Mathieu Othacehe ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,6 +21,7 @@ #:use-module (gnu installer utils) #:use-module (gnu installer newt ethernet) #:use-module (gnu installer newt final) + #:use-module (gnu installer newt help) #:use-module (gnu installer newt hostname) #:use-module (gnu installer newt keymap) #:use-module (gnu installer newt locale) @@ -44,7 +45,9 @@ (define (init) (newt-init) (clear-screen) - (set-screen-size!)) + (set-screen-size!) + (push-help-line + (format #f (G_ "Press for help.")))) (define (exit) (newt-finish) @@ -91,8 +94,8 @@ problem. The backtrace is displayed below. Please report it by email to \ (define (menu-page steps) (run-menu-page steps)) -(define* (keymap-page layouts) - (run-keymap-page layouts)) +(define* (keymap-page layouts context) + (run-keymap-page layouts #:context context)) (define (network-page) (run-network-page)) @@ -109,6 +112,12 @@ problem. The backtrace is displayed below. Please report it by email to \ (define (services-page) (run-services-page)) +(define (help-menu menu-proc) + (newt-set-help-callback menu-proc)) + +(define (help-page keyboard-layout-selection) + (run-help-page keyboard-layout-selection)) + (define newt-installer (installer (name 'newt) @@ -125,4 +134,6 @@ problem. The backtrace is displayed below. Please report it by email to \ (user-page user-page) (partition-page partition-page) (services-page services-page) - (welcome-page welcome-page))) + (welcome-page welcome-page) + (help-menu help-menu) + (help-page help-page))) diff --git a/gnu/installer/newt/help.scm b/gnu/installer/newt/help.scm new file mode 100644 index 0000000000..8d85832dc8 --- /dev/null +++ b/gnu/installer/newt/help.scm @@ -0,0 +1,43 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2020 Mathieu Othacehe +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu installer newt help) + #:use-module (gnu installer steps) + #:use-module (gnu installer newt page) + #:use-module (guix i18n) + #:use-module (ice-9 match) + #:use-module (newt) + #:export (run-help-page)) + +(define (run-help-page keyboard-layout-selection) + "Run a help page allowing to change the keyboard layout" + (let* ((items + (list + (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.") + #:title (G_ "Installation help") + #:listbox-items items + #:listbox-item->text car + #:sort-listbox-items? #f + #:button-text (G_ "Continue")))) + (match result + ((_ . proc) + (proc)) + (_ #f)))) diff --git a/gnu/installer/newt/keymap.scm b/gnu/installer/newt/keymap.scm index 2908ba7f0e..0147a0b9d5 100644 --- a/gnu/installer/newt/keymap.scm +++ b/gnu/installer/newt/keymap.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2018 Mathieu Othacehe +;;; Copyright © 2018, 2020 Mathieu Othacehe ;;; Copyright © 2019 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. @@ -33,20 +33,32 @@ #:export (run-keymap-page keyboard-layout->configuration)) -(define (run-layout-page layouts layout->text) +(define (run-layout-page layouts layout->text context) (let ((title (G_ "Layout"))) (run-listbox-selection-page #:title title - #:info-text (G_ "Please choose your keyboard layout.") + #:info-text + (case context + ((help) (G_ "Please choose your keyboard layout. \ +It will only be used during the installation process.")) + (else (G_ "Please choose your keyboard layout. \ +It will be used during the install process, and for the installed system. \ +You can switch to different layout at any time from the help menu."))) #:listbox-items layouts #:listbox-item->text layout->text #:sort-listbox-items? #f - #:button-text (G_ "Exit") + #:button-text + (case context + ((help) (G_ "Continue")) + (else (G_ "Exit"))) #:button-callback-procedure - (lambda _ - (raise - (condition - (&installer-step-abort))))))) + (case context + ((help) (const #t)) + (else + (lambda _ + (raise + (condition + (&installer-step-abort))))))))) (define (run-variant-page variants variant->text) (let ((title (G_ "Variant"))) @@ -100,7 +112,7 @@ variants)) (cut append <> <>))) -(define* (run-keymap-page layouts) +(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." @@ -114,7 +126,8 @@ names of the selected keyboard layout and variant." (sort-layouts layouts) (lambda (layout) (gettext (x11-keymap-layout-description layout) - "xkeyboard-config")))))) + "xkeyboard-config")) + context)))) ;; Propose the user to select a variant among those supported by the ;; previously selected layout. (installer-step diff --git a/gnu/installer/record.scm b/gnu/installer/record.scm index edf73b6215..78acf50c63 100644 --- a/gnu/installer/record.scm +++ b/gnu/installer/record.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2018 Mathieu Othacehe +;;; Copyright © 2018, 2020 Mathieu Othacehe ;;; ;;; This file is part of GNU Guix. ;;; @@ -37,7 +37,9 @@ installer-user-page installer-partition-page installer-services-page - installer-welcome-page)) + installer-welcome-page + installer-help-menu + installer-help-page)) ;;; @@ -61,7 +63,7 @@ (exit-error installer-exit-error) ;; procedure void -> void (final-page installer-final-page) - ;; procedure (layouts) -> (list layout variant) + ;; procedure (layouts context) -> (list layout variant) (keymap-page installer-keymap-page) ;; procedure: (#:key supported-locales iso639-languages iso3166-territories) ;; -> glibc-locale @@ -81,4 +83,8 @@ ;; procedure void -> void (services-page installer-services-page) ;; procedure (logo) -> void - (welcome-page installer-welcome-page)) + (welcome-page installer-welcome-page) + ;; procedure (menu-proc) -> void + (help-menu installer-help-menu) + ;; procedure (keyboard-layout-selection) -> void + (help-page installer-help-page)) diff --git a/gnu/local.mk b/gnu/local.mk index bc51fbb33b..77f9de2440 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -671,6 +671,7 @@ INSTALLER_MODULES = \ \ %D%/installer/newt/ethernet.scm \ %D%/installer/newt/final.scm \ + %D%/installer/newt/help.scm \ %D%/installer/newt/hostname.scm \ %D%/installer/newt/keymap.scm \ %D%/installer/newt/locale.scm \ diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in index 9c492997cf..4cc4fe7b31 100644 --- a/po/guix/POTFILES.in +++ b/po/guix/POTFILES.in @@ -16,6 +16,7 @@ gnu/installer/locale.scm gnu/installer/newt.scm gnu/installer/newt/ethernet.scm gnu/installer/newt/final.scm +gnu/installer/newt/help.scm gnu/installer/newt/hostname.scm gnu/installer/newt/keymap.scm gnu/installer/newt/locale.scm