emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: New multi-command facility displays in the wrong echo area.


From: Gregory Heytings
Subject: Re: New multi-command facility displays in the wrong echo area.
Date: Tue, 13 Oct 2020 21:22:46 +0000
User-agent: Alpine 2.22 (NEB 394 2020-01-19)


Hi Eli,


Here is a slightly improved version of the code, which removes the (minibuffer-message-mode-line-string ...) from mode-line-format when clearing the minibuffer message.


Please ignore the code I sent you two hours ago, and replace it with the following one:

(defvar minibuffer-message-mode-line-string nil)
(defvar minibuffer-message-mode-line-buffer nil)
(defun clear-minibuffer-message ()
  (when (not noninteractive)
    (when (timerp minibuffer-message-timer)
      (cancel-timer minibuffer-message-timer)
      (setq minibuffer-message-timer nil))
    (setq minibuffer-message-mode-line-string nil)
    (when (bufferp minibuffer-message-mode-line-buffer)
      (with-current-buffer minibuffer-message-mode-line-buffer
        (let ((mls (and (listp mode-line-format)
                        (assq 'minibuffer-message-mode-line-string
                              mode-line-format))))
          (if mls (setq mode-line-format (cadr (remq mls mode-line-format))))))
      (setq minibuffer-message-mode-line-buffer nil))))
(defface minibuffer-message-face
  `((t (:background ,(face-attribute 'default :background)
        :foreground ,(face-attribute 'default :foreground)))) "")
(defun set-minibuffer-message (message)
  (when (and (not noninteractive)
             (window-live-p (active-minibuffer-window))
             (eq (window-frame) (window-frame (active-minibuffer-window))))
    (progn
      (when (numberp minibuffer-message-clear-timeout)
        (setq minibuffer-message-timer
              (run-with-timer minibuffer-message-clear-timeout nil
                              #'clear-minibuffer-message)))
      (with-current-buffer
          (window-buffer
           (or (window-in-direction 'above (minibuffer-window))
               (minibuffer-selected-window)
               (get-largest-window)))
        (clear-minibuffer-message)
        (when (and mode-line-format
                   (not (and (listp mode-line-format)
                             (assq 'minibuffer-message-mode-line-string
                                   mode-line-format))))
          (setq minibuffer-message-mode-line-buffer (current-buffer))
          (setq mode-line-format
                (list "" '(minibuffer-message-mode-line-string
                           (" " (:propertize minibuffer-message-mode-line-string
                                             face minibuffer-message-face) " "))
                      mode-line-format)))
        (setq minibuffer-message-mode-line-string (substring-no-properties 
message))
        (force-mode-line-update))
      t)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]