branch: externals/taxy commit 1774dc34a04a375e9c142f293b0697c86004285e Author: Adam Porter <a...@alphapapa.net> Commit: Adam Porter <a...@alphapapa.net>
Change: (deffy-jump) Offer for file, project, all --- examples/deffy.el | 50 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/examples/deffy.el b/examples/deffy.el index 3126bd0336..4e2dc9ceca 100644 --- a/examples/deffy.el +++ b/examples/deffy.el @@ -242,26 +242,16 @@ Interactively, with prefix, display in dedicated side window." (defun deffy-jump (def) "Jump to definition DEF. Interactively, read DEF from current buffer with completion; with -prefix, from all `deffy-mode' buffers." +universal prefix, from project buffers; with two universal +prefixes, from all `deffy-mode' buffers." (interactive (list (deffy--read-def - (if current-prefix-arg - (cl-loop for buffer in (buffer-list) - when (eq 'deffy-mode (buffer-local-value 'major-mode buffer)) - collect buffer) - (or (cl-loop for buffer in (buffer-list) - when (and (eq 'deffy-mode (buffer-local-value 'major-mode buffer)) - (member (buffer-file-name) - (buffer-local-value 'deffy-files buffer))) - return (list buffer)) - (condition-case nil - (save-window-excursion - (deffy-buffer) - (list (current-buffer))) - (error (cl-loop for window in (window-list) - when (eq 'deffy-mode - (buffer-local-value 'major-mode (window-buffer window))) - return (list (window-buffer window)))))))))) + (pcase current-prefix-arg + (`nil (deffy--buffer-for (current-buffer))) + ('(4) (save-window-excursion + (deffy-project) + (list (current-buffer)))) + (_ (deffy--all-buffers)))))) (pcase-let (((cl-struct deffy-def file pos) def) (action (if (eq 'deffy-mode major-mode) `(display-buffer-in-previous-window @@ -402,6 +392,30 @@ prefix, from all `deffy-mode' buffers." (or (cl-find-if #'stringp form) "")))))))) +(defun deffy--all-buffers () + "Return list of all `deffy-mode' buffers." + (cl-loop for buffer in (buffer-list) + when (eq 'deffy-mode (buffer-local-value 'major-mode buffer)) + collect buffer)) + +(defun deffy--buffer-for (buffer) + "Return `deffy-mode' buffer having definitions for BUFFER. +Return value is actually a one-element list." + (or (cl-loop for other-buffer in (buffer-list) + when (and (eq 'deffy-mode (buffer-local-value 'major-mode other-buffer)) + (member (buffer-file-name buffer) + (buffer-local-value 'deffy-files other-buffer))) + return (list other-buffer)) + ;; Make a new deffy buffer for BUFFER. + (condition-case nil + (save-window-excursion + (deffy-buffer) + (list (current-buffer))) + (error (cl-loop for window in (window-list) + when (eq 'deffy-mode + (buffer-local-value 'major-mode (window-buffer window))) + return (list (window-buffer window))))))) + ;;;;; Bookmark support (defvar bookmark-make-record-function)