[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/el-search 76d63d9 326/332: [el-search] Extend possible
From: |
Stefan Monnier |
Subject: |
[elpa] externals/el-search 76d63d9 326/332: [el-search] Extend possible search domains |
Date: |
Tue, 1 Dec 2020 15:49:15 -0500 (EST) |
branch: externals/el-search
commit 76d63d90d7e179bb95b25c71f1c4909ae1b8b592
Author: Michael Heerdegen <michael_heerdegen@web.de>
Commit: Michael Heerdegen <michael_heerdegen@web.de>
[el-search] Extend possible search domains
Allow search entities that are neither live buffers nor files. This
makes it possible to implement el-search commands that e.g. search old
revisions of a repository.
(el-search--get-buffer-fun): New buffer local helper var.
(el-search--occur): Use value of 'el-search--get-buffer-fun' when
bound in any buffer in the matches stream to enable
'el-search--occur-button-action' to recreate that buffer.
(el-search--occur-button-action): Allow the first argument to be a
function to create the match buffer.
---
el-search.el | 39 ++++++++++++++++++++++++++++++++-------
1 file changed, 32 insertions(+), 7 deletions(-)
diff --git a/el-search.el b/el-search.el
index c36f852..6e7f891 100644
--- a/el-search.el
+++ b/el-search.el
@@ -734,6 +734,18 @@ The non-nil value should be one of the symbols `forward'
and
(defvar el-search-occur-flag nil
"Non-nil when next search should be performed as occur.")
+(defvar-local el-search--get-buffer-fun nil
+ "How to recreate current buffer when non-nil.
+
+This buffer-local helper variable can be set in buffers that the
+get-buffer-stream method of el-search-objects returns to specify
+how to recreate that buffer. This is useful when the search
+domain contains places that are neither buffers nor files -
+former revisions of files for example. In this case
+`el-search-occur' can remember the value of this variable in
+the (temporary) buffers to implement to-match jumping after these
+buffers have been killed.")
+
(defun el-search-true (&rest _args)
"Ignore the arguments and return t."
t)
@@ -3556,9 +3568,12 @@ Prompt for a new pattern and revert."
(cl-defun el-search--occur-button-action
(filename-or-buffer &optional match-pos do-fun (display-buffer-action nil
action-specified))
- (let ((buffer (if (bufferp filename-or-buffer)
- filename-or-buffer
- (find-file-noselect filename-or-buffer)))
+ (let ((buffer (cond
+ ((bufferp filename-or-buffer)
+ filename-or-buffer)
+ ((functionp filename-or-buffer)
+ (funcall filename-or-buffer))
+ (t (find-file-noselect filename-or-buffer))))
(search-pattern (el-search-object-pattern
el-search-occur-search-object)))
(with-selected-window (display-buffer
buffer
@@ -3839,12 +3854,22 @@ addition from `special-mode-map':
(while (setq stream-of-buffer-matches (stream-pop
stream-of-matches))
(setq buffer-matches (seq-length stream-of-buffer-matches))
(cl-incf overall-matches buffer-matches)
- (pcase-let ((`(,buffer ,_ ,file) (stream-first
stream-of-buffer-matches)))
+ (pcase-let* ((`(,buffer ,_ ,file)
+ ;; This always binds BUFFER to a live buffer
+ (stream-first stream-of-buffer-matches))
+ (get-buffer (with-current-buffer buffer
el-search--get-buffer-fun)))
+ (when get-buffer
+ (let ((real-get-buffer get-buffer)
+ (buffer-name (buffer-name buffer)))
+ (setq get-buffer
+ (lambda (&optional arg)
+ (if arg buffer-name (funcall
real-get-buffer))))))
(if file (cl-incf matching-files) (cl-incf
matching-buffers))
(insert "\n\n;;; *** ")
(insert-button
(or file (format "%S" buffer))
- 'action (lambda (_) (el-search--occur-button-action (or
file buffer))))
+ 'action (lambda (_) (el-search--occur-button-action
+ (or get-buffer file buffer))))
(insert (format " (%d match%s)\n"
buffer-matches
(if (> buffer-matches 1) "es" "")))
@@ -3901,7 +3926,7 @@ addition from `special-mode-map':
(overlay-put ov 'face
'el-search-occur-match)
(overlay-put
ov el-search-occur-match-ov-prop
- `(,buffer ,match-beg ,file
,nbr)))
+ `(,(or get-buffer buffer)
,match-beg ,file ,nbr)))
(with-current-buffer buffer
(point)))))
(insert (format "\n;;;; Line %d\n"
(with-current-buffer buffer
@@ -3927,7 +3952,7 @@ addition from `special-mode-map':
(el-search--end-of-sexp
mb)))
nil 'front-advance) ;f-a is
needed for later indenting
el-search-occur-match-ov-prop
- `(,buffer ,mb ,file ,nbr)))
+ `(,(or get-buffer buffer) ,mb
,file ,nbr)))
(stream-pop matches)
t)))))
(insert
- [elpa] externals/el-search 01d4431 269/332: [el-search] Don't initially fold El Occur buffers, (continued)
- [elpa] externals/el-search 01d4431 269/332: [el-search] Don't initially fold El Occur buffers, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 1169ef1 294/332: [el-search] Add accessible buffer area to a validity check, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search c0947c3 295/332: [el-search] Minibuffer pattern prompt hints part 1: preparations, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 749aa0c 300/332: [el-search] Improvements for 'change' and 'changed', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search e522b71 305/332: [el-search] Enhance docstring of el-search-occur-mode, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search fdc4663 308/332: [el-search] Bump version to 1.11.1, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search e790747 309/332: [el-search] Fix quits in minibuffer in emacs -nw, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 39da179 313/332: [el-search] Minibuffer pattern prompt hints part 3, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 01c663b 315/332: [el-search] Make el-search-query-replace resumable, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search c95de2b 317/332: [el-search] Shorten el-search-query-replace prompt again, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 76d63d9 326/332: [el-search] Extend possible search domains,
Stefan Monnier <=
- [elpa] externals/el-search 0212cf9 328/332: * packages/el-search/el-search.el: New command el-search-repository, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 6df1362 332/332: * .gitignore: New file, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 6c0475e 212/332: Allow to save the current el-search to a register, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 7c19468 215/332: Fix el-search's to register save when no search started yet, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search c7709ab 233/332: Fix el-search's check for buffers visiting a given file, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search cda69ae 230/332: * el-search/el-search-x.el: New user option `el-search-lazy-l', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search ce8835b 242/332: [el-search] Factor out `el-search-backward', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search dfaa7f2 244/332: [el-search] Some more minor tweaks, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search a6c23b5 250/332: * el-search/el-search.el: Correct NOERROR argument uses, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 2a02a81 277/332: [el-search] Let el-search-query-replace add undo boundaries, Stefan Monnier, 2020/12/01