summaryrefslogtreecommitdiff
path: root/lisp/register.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/register.el')
-rw-r--r--lisp/register.el50
1 files changed, 33 insertions, 17 deletions
diff --git a/lisp/register.el b/lisp/register.el
index baad2c2a05d..822467a0d72 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -131,7 +131,12 @@ to the value of `register--read-with-preview-function'.")
(defcustom register-use-preview 'traditional
"Whether to show register preview when modifying registers.
-When set to `t', show a preview buffer with navigation and highlighting.
+When set to `t', show a preview buffer with navigation and
+highlighting.
+When set to \\='insist, behave as with `t', but allow exiting the
+minibuffer by pressing the register name a second time. E.g.,
+press \"a\" to select register \"a\", then press \"a\" again to
+exit the minibuffer.
When nil, show a preview buffer without navigation and highlighting, and
exit the minibuffer immediately after inserting response in minibuffer.
When set to \\='never, behave as with nil, but with no preview buffer at
@@ -141,6 +146,7 @@ according to `register-preview-delay'; this preserves the traditional
behavior of Emacs 29 and before."
:type '(choice
(const :tag "Use preview" t)
+ (const :tag "Use preview and exit by pressing register name" insist)
(const :tag "Use quick preview" nil)
(const :tag "Never use preview" never)
(const :tag "Basic preview like Emacs-29" traditional))
@@ -386,18 +392,21 @@ Format of each entry is controlled by the variable `register-preview-function'."
(setq register-preview-function (register--preview-function
register--read-with-preview-function)))
(when (or show-empty (consp register-alist))
- (with-current-buffer-window
- buffer
- (cons 'display-buffer-below-selected
- '((window-height . fit-window-to-buffer)
- (preserve-size . (nil . t))))
- nil
- (with-current-buffer standard-output
- (setq cursor-in-non-selected-windows nil)
- (mapc (lambda (elem)
- (when (get-register (car elem))
- (insert (funcall register-preview-function elem))))
- register-alist)))))
+ (with-current-buffer-window buffer
+ register-preview-display-buffer-alist
+ nil
+ (with-current-buffer standard-output
+ (setq cursor-in-non-selected-windows nil)
+ (mapc (lambda (elem)
+ (when (get-register (car elem))
+ (insert (funcall register-preview-function elem))))
+ register-alist)))))
+
+(defcustom register-preview-display-buffer-alist '(display-buffer-at-bottom
+ (window-height . fit-window-to-buffer)
+ (preserve-size . (nil . t)))
+ "Window configuration for the register preview buffer."
+ :type display-buffer--action-custom-type)
(defun register-preview-1 (buffer &optional show-empty types)
"Pop up a window showing the preview of registers in BUFFER.
@@ -415,9 +424,7 @@ Format of each entry is controlled by the variable `register-preview-function'."
(when (or show-empty (consp registers))
(with-current-buffer-window
buffer
- (cons 'display-buffer-below-selected
- '((window-height . fit-window-to-buffer)
- (preserve-size . (nil . t))))
+ register-preview-display-buffer-alist
nil
(with-current-buffer standard-output
(setq cursor-in-non-selected-windows nil)
@@ -540,7 +547,12 @@ or \\='never."
(member new strs))
new old))
(delete-minibuffer-contents)
- (insert input)))
+ (insert input)
+ ;; Exit minibuffer on second hit
+ ;; when *-use-preview == insist.
+ (when (and (string= new old)
+ (eq register-use-preview 'insist))
+ (setq noconfirm t))))
(when (and smatch (not (string= input ""))
(not (member input strs)))
(setq input "")
@@ -550,6 +562,10 @@ or \\='never."
(setq pat input))))
(if (setq win (get-buffer-window buffer))
(with-selected-window win
+ (when noconfirm
+ ;; Happen only when
+ ;; *-use-preview == insist.
+ (exit-minibuffer))
(let ((ov (make-overlay
(point-min) (point-min)))
;; Allow upper-case and lower-case letters