]> git.eshelyaron.com Git - emacs.git/commitdiff
User-friendly display of error messages at the end of minibuffer
authorJuri Linkov <juri@linkov.net>
Mon, 3 Jun 2019 20:27:19 +0000 (23:27 +0300)
committerJuri Linkov <juri@linkov.net>
Mon, 3 Jun 2019 20:27:19 +0000 (23:27 +0300)
* lisp/simple.el (minibuffer-setup-hook): Add minibuffer-error-initialize.
(minibuffer-error-initialize, minibuffer-error-function): New functions.
(Bug#34939)

etc/NEWS
lisp/simple.el

index 975fab495a9a5ef357eff78d9c7dfb2d86ee68c3..980f5123a1d6e7e2ad4467df62fa9653b925728f 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -471,6 +471,12 @@ its functions.
 names match certain regular expressions as big.  Ido won't attempt to
 list the contents of such directories when completing file names.
 
+** Minibuffer
+
+---
+*** Minibuffer now uses 'minibuffer-message' to display error messages
+at the end of the active minibuffer.
+
 ** map.el
 *** Now also understands plists.
 *** Now defined via generic functions that can be extended via 'cl-defmethod'.
index 4454791ad205cc8f3dfd4d975b76ea9a8207d7c7..6bc3bc5304c8d1f84e63ba99696f02a5aacdbe92 100644 (file)
@@ -2439,6 +2439,28 @@ in the search status stack."
 Go to the history element by the absolute history position HIST-POS."
   (goto-history-element hist-pos))
 
+\f
+(add-hook 'minibuffer-setup-hook 'minibuffer-error-initialize)
+
+(defun minibuffer-error-initialize ()
+  "Set up minibuffer error processing."
+  (setq-local command-error-function 'minibuffer-error-function))
+
+(defun minibuffer-error-function (data context caller)
+  "Display error messages in the active minibuffer.
+The same as `command-error-default-function' but display error messages
+at the end of the minibuffer using `minibuffer-message' to not obscure
+the minibuffer contents."
+  (discard-input)
+  (ding)
+  (let ((string (error-message-string data)))
+    ;; If we know from where the error was signaled, show it in
+    ;; *Messages*.
+    (let ((inhibit-message t))
+      (message "%s%s" (if caller (format "%s: " caller) "") string))
+    ;; Display an error message at the end of the minibuffer.
+    (minibuffer-message (concat context string))))
+
 \f
 ;Put this on C-x u, so we can force that rather than C-_ into startup msg
 (define-obsolete-function-alias 'advertised-undo 'undo "23.2")