branch: externals/consult commit 704eb983cc801ac0d403a6deb1b102698e65c26f Author: Daniel Mendler <m...@daniel-mendler.de> Commit: Daniel Mendler <m...@daniel-mendler.de>
Update consult-register-window for Emacs 31 --- consult-register.el | 23 ++++++++++++----------- consult.el | 5 +++-- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/consult-register.el b/consult-register.el index 7f6d71b80f..6508a5eb8a 100644 --- a/consult-register.el +++ b/consult-register.el @@ -116,12 +116,13 @@ Each element of the list must have the form (char . name).") (list (consult-register--format-value val) 'consult--type ?t))) ;;;###autoload -(defun consult-register-window (buffer &optional show-empty) +(defun consult-register-window (buffer &optional show-empty pred) "Enhanced drop-in replacement for `register-preview'. BUFFER is the window buffer. -SHOW-EMPTY must be t if the window should be shown for an empty register list." - (let ((regs (consult-register--alist 'noerror)) +SHOW-EMPTY must be t if the window should be shown for an empty register list. +Optional argument PRED specifies the types of register to show." + (let ((regs (consult-register--alist 'noerror pred)) (separator (and (display-graphic-p) (propertize #(" \n" 0 1 (display (space :align-to right))) @@ -168,24 +169,24 @@ If COMPLETION is non-nil format the register for completion." str)) str)) -(defun consult-register--alist (&optional noerror filter) - "Return register list, sorted and filtered with FILTER. +(defun consult-register--alist (&optional noerror pred) + "Return register list, sorted and filtered with PRED. Raise an error if the list is empty and NOERROR is nil." (or (sort (cl-loop for reg in register-alist ;; Sometimes, registers are made without a `cdr' or with ;; invalid markers. Such registers don't do anything, and ;; can be ignored. - if (and (cdr reg) - (or (not (markerp (cdr reg))) (marker-buffer (cdr reg))) - (or (not filter) (funcall filter reg))) + if (when-let ((val (cdr reg))) + (and (or (not (markerp val)) (marker-buffer val)) + (or (not pred) (funcall pred val)))) collect reg) #'car-less-than-car) (and (not noerror) (user-error "All registers are empty")))) -(defun consult-register--candidates (&optional filter) - "Return formatted completion candidates, filtered with FILTER." +(defun consult-register--candidates (&optional pred) + "Return formatted completion candidates, filtered with PRED." (mapcar (lambda (reg) (consult-register-format reg 'completion)) - (consult-register--alist nil filter))) + (consult-register--alist nil pred))) ;;;###autoload (defun consult-register (&optional arg) diff --git a/consult.el b/consult.el index 6bc9ffdc80..39d8608d99 100644 --- a/consult.el +++ b/consult.el @@ -4918,7 +4918,7 @@ If NORECORD is non-nil, do not record the buffer switch in the buffer list." (defun consult--file-register-p (reg) "Return non-nil if REG is a file register." - (memq (car-safe (cdr reg)) '(file-query file))) + (memq (car-safe reg) '(file-query file))) (autoload 'consult-register--candidates "consult-register") (defvar consult--source-file-register @@ -4926,7 +4926,8 @@ If NORECORD is non-nil, do not record the buffer switch in the buffer list." :narrow (?r . "Register") :category file :state ,#'consult--file-state - :enabled ,(lambda () (seq-some #'consult--file-register-p register-alist)) + :enabled ,(lambda () (cl-loop for (_ . reg) in register-alist + thereis (consult--file-register-p reg))) :items ,(lambda () (consult-register--candidates #'consult--file-register-p))) "File register source.")