(defvar popup-buffer-minibuffer-message-window nil) (defun popup-buffer-minibuffer-message-clear () (when (not noninteractive) (when (timerp minibuffer-message-timer) (cancel-timer popup-buffer-minibuffer-message-timer) (when (live-window-p popup-buffer-minibuffer-message-window) (delete-window popup-buffer-minibuffer-message-window))))) (defun popup-buffer-minibuffer-message-set (message) (let* ((minibuf-window (active-minibuffer-window)) (minibuf-frame (and (window-live-p minibuf-window) (window-frame minibuf-window)))) (when (and (not noninteractive) (window-live-p minibuf-window) (or (eq (window-frame) minibuf-frame) (eq (frame-parameter minibuf-frame 'minibuffer) 'only))) (progn (when (numberp minibuffer-message-clear-timeout) (setq popup-buffer-minibuffer-message-timer (run-with-timer minibuffer-message-clear-timeout nil #'popup-buffer-minibuffer-message-clear))) (let ((buffer (get-buffer-create " *Popup Echo Area*"))) (unless (window-live-p popup-buffer-minibuffer-message-window) (setq popup-buffer-minibuffer-message-window (display-buffer buffer '(display-buffer-in-side-window (side . bottom) (window-height . 1))))) (with-current-buffer buffer (setq-local mode-line-format nil cursor-type nil) (erase-buffer) (insert message))) t)))) (setq clear-message-function #'popup-buffer-minibuffer-message-clear) (setq set-message-function #'popup-buffer-minibuffer-message-set)