aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzimoun <zimon.toutoune@gmail.com>2021-01-19 22:28:10 +0100
committerLudovic Courtès <ludo@gnu.org>2021-02-03 12:41:29 +0100
commitf0a1a55c66c9ad0e5af504907d9558e9d91f30eb (patch)
tree937000c49c347864c20b5767e89d6651c9d04b0d
parent0df4d5aa04b53e8a6842045deb323b785db5b20a (diff)
downloadguix-f0a1a55c66c9ad0e5af504907d9558e9d91f30eb.tar
guix-f0a1a55c66c9ad0e5af504907d9558e9d91f30eb.tar.gz
ui: Add hint for command typo.
* guix/ui.scm (command-hint): New variable (run-guix-command): Use it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r--guix/ui.scm18
1 files changed, 15 insertions, 3 deletions
diff --git a/guix/ui.scm b/guix/ui.scm
index 45ae14f83c..9cea405456 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -2123,6 +2123,14 @@ Run COMMAND with ARGS.\n"))
(define (run-guix-command command . args)
"Run COMMAND with the given ARGS. Report an error when COMMAND is not
found."
+ (define (command-hint guess commands)
+ (define command-names
+ (map (lambda (command)
+ (match (command-name command)
+ ((head tail ...) head)))
+ commands))
+ (string-closest (symbol->string guess) command-names #:threshold 3))
+
(define module
;; Check if there is a matching extension.
(match (search-path (extension-directories)
@@ -2132,9 +2140,13 @@ found."
(lambda ()
(resolve-interface `(guix scripts ,command)))
(lambda _
- (format (current-error-port)
- (G_ "guix: ~a: command not found~%") command)
- (show-guix-usage))))
+ (let ((hint (command-hint command (commands))))
+ (format (current-error-port)
+ (G_ "guix: ~a: command not found~%") command)
+ (when hint
+ (display-hint (format #f (G_ "Did you mean @code{~a}?")
+ hint)))
+ (show-guix-usage)))))
(file
(load file)
(resolve-interface `(guix extensions ,command)))))