From: Juri Linkov Date: Mon, 3 Jun 2019 20:27:19 +0000 (+0300) Subject: User-friendly display of error messages at the end of minibuffer X-Git-Tag: emacs-27.0.90~2712 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2aae063055283ee64ecf339c812a1fe6d1cb106e;p=emacs.git User-friendly display of error messages at the end of minibuffer * lisp/simple.el (minibuffer-setup-hook): Add minibuffer-error-initialize. (minibuffer-error-initialize, minibuffer-error-function): New functions. (Bug#34939) --- diff --git a/etc/NEWS b/etc/NEWS index 975fab495a9..980f5123a1d 100644 --- 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'. diff --git a/lisp/simple.el b/lisp/simple.el index 4454791ad20..6bc3bc5304c 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -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)) + +(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)))) + ;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")