Helm: Allow optional helm-lister in helm-defswitcher

master
Pierre Neidhardt 2019-03-03 11:59:27 +01:00
parent f5d0a63598
commit 8aaa29084a
1 changed files with 4 additions and 3 deletions

View File

@ -20,7 +20,7 @@
(switch-to-buffer buffer))
(switch-to-buffer (funcall ,new-fn candidate))))))))
(defmacro helm-deflister (name predicate new-fn &optional extra-sources)
(defmacro helm-deflister (name predicate new-fn &rest extra-sources)
(let ((buffer-source-name (format "%s buffers" name)))
(add-to-list 'helm-source-names-using-follow buffer-source-name)
`(defun ,(intern (format "helm-%s-buffers" (downcase name))) ()
@ -39,7 +39,7 @@
,new-fn)))))
:buffer ,(format "*helm-%s-buffers*" name)))))
(defmacro helm-defswitcher (name predicate new-fn &optional extra-sources)
(defmacro helm-defswitcher (name predicate new-fn &optional helm-lister &rest extra-sources)
"Create an interactive buffer switcher for NAME.
When current buffer is not of NAME, switch to last NAME session if any.
Otherwise create a new one and switch to it.
@ -51,7 +51,8 @@ If current buffer is of NAME, show the buffer list."
(interactive "P")
(if (or menu (funcall ,predicate (current-buffer)))
;; TODO: Funcall the return value of helm-deflister.
(funcall ',(intern (format "helm-%s-buffers" (downcase name))))
(funcall ',(or helm-lister
(intern (format "helm-%s-buffers" (downcase name)))))
(let ((last (cl-loop for buffer in (buffer-list)
when (funcall ,predicate buffer)
return buffer)))