aboutsummaryrefslogtreecommitdiff
path: root/guix/ui.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2017-11-08 11:16:25 +0100
committerLudovic Courtès <ludo@gnu.org>2017-11-08 22:31:58 +0100
commit23735137eb666e9fe2e848563615bca5bcea1282 (patch)
tree5ce26b3954ef5401c1096bbce76fc2d65e3420cd /guix/ui.scm
parent37eed374d92e0fbb29701b072c3a39433fbba16d (diff)
downloadgnu-guix-23735137eb666e9fe2e848563615bca5bcea1282.tar
gnu-guix-23735137eb666e9fe2e848563615bca5bcea1282.tar.gz
ui: Define and honor '&error-location' and '&fix-hint' conditions.
* guix/utils.scm (&error-location, &fix-hint): New condition types. * guix/ui.scm (report-load-error): Handle them. (call-with-error-handling): Honor '&error-location'.
Diffstat (limited to 'guix/ui.scm')
-rw-r--r--guix/ui.scm23
1 files changed, 19 insertions, 4 deletions
diff --git a/guix/ui.scm b/guix/ui.scm
index 40371e4710..a1152605e6 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -251,10 +251,20 @@ ARGS is the list of arguments received by the 'throw' handler."
(location->string loc) message)))
(('srfi-34 obj)
(if (message-condition? obj)
- (report-error (G_ "~a~%")
- (gettext (condition-message obj)
- %gettext-domain))
- (report-error (G_ "exception thrown: ~s~%") obj)))
+ (if (error-location? obj)
+ (format (current-error-port)
+ (G_ "~a: error: ~a~%")
+ (location->string (error-location obj))
+ (gettext (condition-message obj)
+ %gettext-domain))
+ (report-error (G_ "~a~%")
+ (gettext (condition-message obj)
+ %gettext-domain)))
+ (report-error (G_ "exception thrown: ~s~%") obj))
+ (when (fix-hint? obj)
+ (format (current-error-port) (G_ "hint: ~a~%")
+ (fill-paragraph (texi->plain-text (condition-fix-hint obj))
+ (terminal-columns) 8))))
((error args ...)
(report-error (G_ "failed to load '~a':~%") file)
(apply display-error frame (current-error-port) args))))
@@ -517,6 +527,11 @@ interpreted."
directories:~{ ~a~}~%")
(file-search-error-file-name c)
(file-search-error-search-path c)))
+ ((and (error-location? c) (message-condition? c))
+ (format (current-error-port)
+ (G_ "~a: error: ~a~%")
+ (location->string (error-location c))
+ (gettext (condition-message c) %gettext-domain)))
((message-condition? c)
;; Normally '&message' error conditions have an i18n'd message.
(leave (G_ "~a~%")