This also makes automated ‘guix --h<Tab>’ completion possible.
* guix/ui.scm (show-guix-help): Document that an OPTION's an option,
and all valid options.
Previously 'guix search' & co. would crash when encountering invalid
Texinfo.
* guix/ui.scm (texi->plain-text*): New procedure.
(package-field-string, package->recutils): Use it.
* guix/ui.scm (display-profile-content-diff): Use pretty-print-table to format
output.
(display-profile-content): Likewise.
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
This reduces the number of syscalls for:
env -i $(type -P strace) -c $(type -P guix) help
from 4.3K to 2.2K, thereby reducing startup time.
Reported by Julien Lepiller.
* guix/ui.scm (run-guix-command): Move %FILE-PORT-NAME-CANONICALIZATION
to...
(run-guix): ... here.
With this change, the wall-clock time of:
guix system build --no-grafts -d gnu/system/install.scm
goes from 5.0s to 2.3s on Guile 3.0.5.
* guix/ui.scm (without-compiler-optimizations): New macro.
(load*): Use it.
Users (both old and new) struggling with locale warnings is a recurrent theme;
part of it may be due to the glibc-utf8-locales package being misleading, as
it only includes a subset of the UTF-8 locales. To prevent confusion, suggest
installing the glibc-locales package instead.
* guix/ui.scm (install-locale): Do not mention glibc-utf8-locales in the hint
message. Use glibc-locales instead of glibc-utf8-locales in the provided
example.
* guix/ui.scm (run-guix-command): Modify order so that extensions are allowed
to override default commands.
Co-authored-by: Ricardo Wurmus <rekado@elephly.net>
Fixes <https://bugs.gnu.org/45709>.
This is a follow-up to commit cf289d7cfa.
* guix/ui.scm (run-guix-command): Match for #false first.
Signed-off-by: Ricardo Wurmus <rekado@elephly.net>
* guix/scripts.scm (%command-categories): Add extension category.
* guix/ui.scm (source-file-command): Also parse extensions files.
(command-files): Accept an optional directory argument.
(extension-directories): New procedure.
(commands): Use it.
(show-guix-help): Hide empty categories.
(run-guix-command): Try loading an extension if there is no matching Guix
command.
* guix/ui.scm (call-with-paginated-output-port): Empty PAGER values
disable paging. Non-empty ones are split into command arguments.
Reported by Daniel Brooks <db48x@db48x.net>.
Fixes <https://bugs.gnu.org/43498>.
Reported by Tobias Geerinckx-Rice <me@tobias.gr>.
* guix/ui.scm (known-variable-definition): Check for variables in the
public interface of HEAD, not in HEAD itself.
* tests/guix-build.sh: Add test.
* guix/ui.scm (show-what-to-build): When VERBOSITY is 1, add a newline
before the "would/will be downloaded" line, and wrap that message in
'highlight'.
* guix/ui.scm (show-manifest-transaction)[package-strings]: Add an
OLD-VERSIONS keyword parameter. Absorb the code path previously found in the
upgrade-string. Remove upgrade-string.
(show-manifest-transaction): Adjust to the above changes.
Fixes <https://bugs.gnu.org/42601>.
Reported by Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>.
Regression introduced in efe037fc5c
whereby errors like 'wrong-type-arg' would be improperly reported:
guix environment: error: Wrong type argument in position ~A (expecting ~A): ~S
See also commit a07d5e558b.
* guix/ui.scm (call-with-error-handling): Move 'message-condition?'
clause after '&exception-with-kind-and-args' clause.
* guix/ui.scm (%default-verbosity): New variable.
(show-what-to-build): Add #:verbosity and honor it.
(build-notifier): Add #:verbosity and pass it to 'show-what-to-build'.
Until now, the first few lines in the output of 'guix processes' could
disappear in 'less'.
* guix/ui.scm (call-with-paginated-output-port): Add #:less-options
parameter and honor it.
(with-paginated-output-port): Allow callers to pass #:less-options.
* guix/scripts/processes.scm (guix-processes): Pass #:less-options to
'with-paginated-output-port'.
This allows 'gettext' to be called on the format string at the site
where the exception is caught (rather than the site where it's thrown).
It also allows for argument highlighting.
* guix/diagnostics.scm (&formatted-message): New condition type.
(check-format-string): New procedure.
(formatted-message): New macro.
* guix/ui.scm (report-load-error): Add clause for 'formatted-message?'.
(warn-about-load-error): Likewise.
(call-with-error-handling): Likewise.
(read/eval): Likewise.
Since a07d5e558b, we've been getting
useless backtraces upon unhandled errors, like this:
Backtrace:
1 (primitive-load "/home/…/bin/guix")
In guix/ui.scm:
1953:12 0 (run-guix-command _ . _)
guix/ui.scm:1953:12: In procedure run-guix-command:
In procedure struct-vtable: Wrong type argument in position 1 (expecting struct): #f
This change finally gives us real backtraces back.
* guix/ui.scm (guard*): New macro.
(call-with-error-handling): Use it instead of 'guard'.
* guix/ui.scm (with-paginated-output-port): Export.
* guix/scripts/processes.scm (guix-processes): Use it instead of writing
directly to (current-output-port).
* guix/ui.scm (call-with-paginated-output-port): New procedure.
(with-paginated-output-port): New macro.
(display-search-results): Use it instead of displaying a hint.
It also removes the store file name from the output.
* guix/ui.scm (show-manifest-transaction)[package-strings]: Rewrite to
use 'tabulate'. Remove 'item' parameter and adjust callers.
This also changes "1.0.0 → 1.0.0" to "(dependencies changed)", which is
probably less confusing.
* guix/ui.scm (tabulate): New procedure.
(show-manifest-transaction)[upgrade-string]: Rewrite to take lists of
names, versions, and outputs instead of single elements. Use
'tabulate'. Adjust callers accordingly.
* guix/scripts/pull.scm (display-news-entry): Remove extra space in
format string for 'indented-string'.
(indented-string): Remove.
(display-new/upgraded-packages)[pretty]: Pass #:initial-indent? to
'indented-string'.
* guix/ui.scm (indented-string): New procedure.