diff --git a/lisp/mb-depth.el b/lisp/mb-depth.el index 88003afb40..ed0ebf800b 100644 --- a/lisp/mb-depth.el +++ b/lisp/mb-depth.el @@ -47,11 +47,36 @@ minibuffer-depth-indicator :group 'minibuffer :version "28.1") +(defface minibuffer-depth-nonselected + '((t (:background "yellow" :foreground "dark red" :weight bold))) + "Face for non-selected minibuffer prompts. +It's used after leaving the minibuffer window while the minibuffer remains active." + :group 'minibuffer + :version "28.1") + +(defcustom minibuffer-depth-indicate-nonselected t + "If non-nil, indicate the non-selected minibuffer. +Use the face `minibuffer-depth-nonselected'." + :type 'boolean + :group 'minibuffer + :version "28.1") + ;; An overlay covering the prompt. This is a buffer-local variable in ;; each affected minibuffer. ;; -(defvar minibuffer-depth-overlay) -(make-variable-buffer-local 'minibuffer-depth-overlay) +(defvar-local minibuffer-depth-overlay nil) +(defvar-local minibuffer-depth-nonselected-overlay nil) + +(defun minibuffer-depth-select (w) + (if (eq (window-buffer w) (current-buffer)) + (when (overlayp minibuffer-depth-nonselected-overlay) + (delete-overlay minibuffer-depth-nonselected-overlay)) + (unless (eq major-mode 'completion-list-mode) + (with-current-buffer (window-buffer w) + (let ((ov (make-overlay (point-min) (point-max)))) + (overlay-put ov 'face 'minibuffer-depth-nonselected) + (overlay-put ov 'evaporate t) + (setq minibuffer-depth-nonselected-overlay ov)))))) ;; This function goes on minibuffer-setup-hook (defun minibuffer-depth-setup () @@ -68,7 +93,9 @@ minibuffer-depth-setup 'face 'minibuffer-depth-indicator) " "))) - (overlay-put minibuffer-depth-overlay 'evaporate t)))) + (overlay-put minibuffer-depth-overlay 'evaporate t))) + (when minibuffer-depth-indicate-nonselected + (add-hook 'window-state-change-functions 'minibuffer-depth-select nil t))) ;;;###autoload (define-minor-mode minibuffer-depth-indicate-mode