1 ;;; mb-depth.el --- Indicate minibuffer-depth in prompt -*- lexical-binding: t -*-
3 ;; Copyright (C) 2006-2018 Free Software Foundation, Inc.
5 ;; Author: Miles Bader <miles@gnu.org>
6 ;; Keywords: convenience
8 ;; This file is part of GNU Emacs.
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation, either version 3 of the License, or
13 ;; (at your option) any later version.
15 ;; GNU Emacs is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;; GNU General Public License for more details.
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
25 ;; Defines the minor mode `minibuffer-depth-indicate-mode'.
27 ;; When active, any recursive use of the minibuffer will show
28 ;; the recursion depth in the minibuffer prompt. This is only
29 ;; useful if `enable-recursive-minibuffers' is non-nil.
33 (defvar minibuffer-depth-indicator-function nil
34 "If non-nil, function to set up the minibuffer depth indicator.
35 It is called with one argument, the minibuffer depth,
36 and must return a string.")
38 ;; An overlay covering the prompt. This is a buffer-local variable in
39 ;; each affected minibuffer.
41 (defvar minibuffer-depth-overlay
)
42 (make-variable-buffer-local 'minibuffer-depth-overlay
)
44 ;; This function goes on minibuffer-setup-hook
45 (defun minibuffer-depth-setup ()
46 "Set up a minibuffer for `minibuffer-depth-indicate-mode'.
47 The prompt should already have been inserted."
48 (let ((depth (minibuffer-depth)))
50 (let ((pos (point-min)))
51 (setq minibuffer-depth-overlay
(make-overlay pos
(1+ pos
))))
52 (overlay-put minibuffer-depth-overlay
'before-string
53 (if minibuffer-depth-indicator-function
54 (funcall minibuffer-depth-indicator-function depth
)
55 (propertize (format "[%d]" depth
) 'face
'highlight
)))
56 (overlay-put minibuffer-depth-overlay
'evaporate t
))))
59 (define-minor-mode minibuffer-depth-indicate-mode
60 "Toggle Minibuffer Depth Indication mode.
62 Minibuffer Depth Indication mode is a global minor mode. When
63 enabled, any recursive use of the minibuffer will show the
64 recursion depth in the minibuffer prompt. This is only useful if
65 `enable-recursive-minibuffers' is non-nil."
68 (if minibuffer-depth-indicate-mode
70 (add-hook 'minibuffer-setup-hook
'minibuffer-depth-setup
)
72 (remove-hook 'minibuffer-setup-hook
'minibuffer-depth-setup
)))
76 ;;; mb-depth.el ends here