[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/el-search 1aded2b 172/332: Make amount of context aroun
From: |
Stefan Monnier |
Subject: |
[elpa] externals/el-search 1aded2b 172/332: Make amount of context around occur matches adjustable |
Date: |
Tue, 1 Dec 2020 15:48:38 -0500 (EST) |
branch: externals/el-search
commit 1aded2b8c69832a2958c1a09cbebe9ade8f431ed
Author: Michael Heerdegen <michael_heerdegen@web.de>
Commit: Michael Heerdegen <michael_heerdegen@web.de>
Make amount of context around occur matches adjustable
Make the amount of context included around each match in
*El Occur* buffers adjustable via new commands
`el-search-occur-defun-context', `el-search-occur-no-context' and
`el-search-occur-some-context'.
---
el-search.el | 93 ++++++++++++++++++++++++++++++++++++++++++------------------
1 file changed, 65 insertions(+), 28 deletions(-)
diff --git a/el-search.el b/el-search.el
index 7625b8c..f1dd8b4 100644
--- a/el-search.el
+++ b/el-search.el
@@ -2176,6 +2176,10 @@ Prompt for a new pattern and revert the occur buffer."
(define-key map [?p] #'el-search-occur-previous-match)
(define-key map [?n] #'el-search-occur-next-match)
(define-key map [?e] #'el-search-edit-occur-pattern)
+ (define-key map [?c ?n] #'el-search-occur-no-context)
+ (define-key map [?c ?d] #'el-search-occur-defun-context)
+ (define-key map [?c ?a] #'el-search-occur-defun-context)
+ (define-key map [?c ?s] #'el-search-occur-some-context)
(set-keymap-parent map (make-composed-keymap special-mode-map
emacs-lisp-mode-map))
map))
@@ -2190,6 +2194,55 @@ Prompt for a new pattern and revert the occur buffer."
(put 'el-search-occur-mode 'mode-class 'special)
+(defun el-search-occur-get-some-context (match-beg)
+ (let ((context-beg nil)
+ (need-more-context-p
+ (lambda (start)
+ (let (end)
+ (pcase (save-excursion
+ (goto-char start)
+ (prog1 (read (current-buffer))
+ (setq end (point))))
+ ((or (pred atom) `(,(pred atom))) t)
+ ((guard (< (- end start) 100)) t)))))
+ (try-go-upwards (lambda (pos) (condition-case nil (scan-lists pos -1 1)
+ (scan-error)))))
+ (when (funcall need-more-context-p match-beg)
+ (setq context-beg (funcall try-go-upwards match-beg))
+ (when (and context-beg (funcall need-more-context-p context-beg))
+ (setq context-beg (or (funcall try-go-upwards context-beg)
+ context-beg))))
+ (cons (or context-beg match-beg)
+ (if context-beg (scan-lists context-beg 1 0)
+ (scan-sexps match-beg 1)))))
+
+(defun el-search-occur-get-defun-context (match-beg)
+ (el-search--bounds-of-defun match-beg))
+
+(defun el-search-occur-get-null-context (match-beg)
+ (cons match-beg (scan-sexps match-beg 1)))
+
+(defvar el-search-get-occur-context-function #'el-search-occur-get-some-context
+ "Function determining amount of context shown in *El Occur* buffers.")
+
+(defun el-search-occur-defun-context ()
+ "Show complete top-level expressions in *El Occur*."
+ (interactive)
+ (setq el-search-get-occur-context-function
#'el-search-occur-get-defun-context)
+ (revert-buffer))
+
+(defun el-search-occur-no-context ()
+ "Show no context around matches in *El Occur*."
+ (interactive)
+ (setq el-search-get-occur-context-function
#'el-search-occur-get-null-context)
+ (revert-buffer))
+
+(defun el-search-occur-some-context ()
+ "Show some context around matches in *El Occur*."
+ (interactive)
+ (setq el-search-get-occur-context-function
#'el-search-occur-get-some-context)
+ (revert-buffer))
+
(declare-function which-func-ff-hook which-func)
(defun el-search--occur (search &optional buffer)
(unwind-protect
@@ -2249,33 +2302,15 @@ Prompt for a new pattern and revert the occur buffer."
(insert (format " (%d match%s)\n"
buffer-matches
(if (> buffer-matches 1) "es" "")))
- (let* ((get-context
- (lambda (match-beg)
- (let ((context-beg nil)
- (need-more-context-p
- (lambda (start)
- (let (end)
- (pcase (save-excursion
- (goto-char start)
- (prog1 (read
(current-buffer))
- (setq end (point))))
- ((or (pred atom) `(,(pred atom)))
t)
- ((guard (< (- end start) 100))
t)))))
- (try-go-upwards (lambda (pos)
(condition-case nil (scan-lists pos -1 1)
-
(scan-error)))))
- (with-current-buffer buffer
- (when (funcall need-more-context-p
match-beg)
- (setq context-beg (funcall
try-go-upwards match-beg))
- (when (and context-beg (funcall
need-more-context-p context-beg))
- (setq context-beg (or (funcall
try-go-upwards context-beg)
- context-beg))))
- (cons (or context-beg match-beg)
- (if context-beg (scan-lists
context-beg 1 0)
- (scan-sexps match-beg 1)))))))
- (buffer-matches+contexts
- (seq-map (pcase-lambda ((and match `(,_
,match-beg ,_)))
- (cons match (funcall get-context
match-beg)))
- stream-of-buffer-matches)))
+ (let ((buffer-matches+contexts
+ (seq-map (pcase-lambda ((and match `(,_
,match-beg ,_)))
+ (with-current-buffer buffer
+ (cons match
+ (let
((open-paren-in-column-0-is-defun-start nil))
+ (save-excursion
+ (funcall
el-search-get-occur-context-function
+ match-beg))))))
+ stream-of-buffer-matches)))
(while (not (stream-empty-p buffer-matches+contexts))
(pcase-let ((`((,_ ,match-beg ,_) . (,context-beg .
,context-end))
(stream-first buffer-matches+contexts)))
@@ -2357,7 +2392,9 @@ Prompt for a new pattern and revert the occur buffer."
(unless (zerop matching-buffers) (format "%d buffers"
matching-buffers))
".")))
(goto-char (point-min))
- (when (bound-and-true-p which-function-mode)
+ (when (and (bound-and-true-p which-function-mode)
+ (eq el-search-get-occur-context-function
+ #'el-search-occur-get-defun-context))
(which-func-ff-hook)))
(quit (insert "\n\n;;; * Aborted"))
(error (insert "\n\n;;; * Error: " (error-message-string err)
- [elpa] externals/el-search 806bfc4 157/332: Add new command `el-search-this-sexp', (continued)
- [elpa] externals/el-search 806bfc4 157/332: Add new command `el-search-this-sexp', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search c66d1da 160/332: Make the el-search-object struct contain an alist of properties, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 4a6c3e2 162/332: Some details, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search d412688 199/332: Update copyrights of some packages, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search cf465e0 203/332: * el-search/el-search.el: Add two more autoload cookies, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 42c776a 207/332: * el-search/el-search.el: Tweak el-search-jump-to-search-head, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search ce97e9d 108/332: el-search: bump version to 0.2.2, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search e5bd647 214/332: * el-search/el-search.el: Work around Emacs Bug#29857, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search d995af1 166/332: Don't let el-search-pattern resume a paused search, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search ceb23fc 169/332: More multi query-replace related improvements, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 1aded2b 172/332: Make amount of context around occur matches adjustable,
Stefan Monnier <=
- [elpa] externals/el-search dc1d703 175/332: Require the new rmc.el lib when available, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 419a9c2 176/332: Improve jumping to matches in *El Occur* buffers, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 8c3213f 182/332: Bump el-search version to 1.4, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search d3eaaf0 198/332: Make the some-context function include an opening backquote, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 85fdccc 202/332: New option value ask-multi for `el-search-auto-save-buffers', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 92efda8 101/332: Add comment about (pcase) backquote inside (real) backquote, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 33c14a4 103/332: Move some pattern definitions to new file "el-search-x", Stefan Monnier, 2020/12/01
- [elpa] externals/el-search c4d8e00 105/332: el-search--make-docstring: exclude some specially named patterns, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 0735984 120/332: el-search: more cleanup and minor tweaks; version 1.0.1, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 6292dcc 130/332: Fix disregarding compressed elisp files, Stefan Monnier, 2020/12/01