[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/el-search 749aa0c 300/332: [el-search] Improvements for
From: |
Stefan Monnier |
Subject: |
[elpa] externals/el-search 749aa0c 300/332: [el-search] Improvements for 'change' and 'changed' |
Date: |
Tue, 1 Dec 2020 15:49:08 -0500 (EST) |
branch: externals/el-search
commit 749aa0ca966dbeecef6ca52400431e24ca2507f0
Author: Michael Heerdegen <michael_heerdegen@web.de>
Commit: Michael Heerdegen <michael_heerdegen@web.de>
[el-search] Improvements for 'change' and 'changed'
* packages/el-search/el-search-x.el
(el-search--change-p, el-search--changed-p): Only 'user-error' in
the interactive case, else silently fail.
(change--1, changed--1): New internal helper patterns.
(change, changed): Use them. Add implicit test for an associated
file. Improve docstrings.
---
el-search-x.el | 78 +++++++++++++++++++++++++++++++++++-----------------------
1 file changed, 47 insertions(+), 31 deletions(-)
diff --git a/el-search-x.el b/el-search-x.el
index 06ebd78..34ef246 100644
--- a/el-search-x.el
+++ b/el-search-x.el
@@ -289,37 +289,41 @@ Uses variable `el-search--cached-changes' for caching."
(defun el-search--change-p (posn revision)
;; Non-nil when sexp after POSN is part of a change
- (when (buffer-modified-p)
- (user-error "Buffer is modified - please save"))
- (save-restriction
- (widen)
- (let ((changes (el-search--changes-from-diff-hl revision))
- (sexp-end (el-search--end-of-sexp posn))
- (atomic? (thunk-delay (el-search--atomic-p
- (save-excursion (goto-char posn)
- (el-search-read
(current-buffer)))))))
- (while (and changes (or (< (cdar changes) posn)
- (and
- ;; a string spanning multiple lines is a change
even when not all
- ;; lines are changed
- (< (cdar changes) sexp-end)
- (not (thunk-force atomic?)))))
- (pop changes))
- (and changes (or (<= (caar changes) posn)
- (and (thunk-force atomic?)
- (<= (caar changes) sexp-end)))))))
+ (if (buffer-modified-p)
+ (if (eq this-command 'el-search-pattern)
+ (user-error "Buffer is modified - please save")
+ nil)
+ (save-restriction
+ (widen)
+ (let ((changes (el-search--changes-from-diff-hl revision))
+ (sexp-end (el-search--end-of-sexp posn))
+ (atomic? (thunk-delay (el-search--atomic-p
+ (save-excursion (goto-char posn)
+ (el-search-read
(current-buffer)))))))
+ (while (and changes (or (< (cdar changes) posn)
+ (and
+ ;; a string spanning multiple lines is a
change even when not all
+ ;; lines are changed
+ (< (cdar changes) sexp-end)
+ (not (thunk-force atomic?)))))
+ (pop changes))
+ (and changes (or (<= (caar changes) posn)
+ (and (thunk-force atomic?)
+ (<= (caar changes) sexp-end))))))))
(defun el-search--changed-p (posn revision)
;; Non-nil when sexp after POSN contains a change
- (when (buffer-modified-p)
- (user-error "Buffer is modified - please save"))
- (save-restriction
- (widen)
- (let ((changes (el-search--changes-from-diff-hl revision)))
- (while (and changes (<= (cdar changes) posn))
- (pop changes))
- (and changes
- (< (caar changes) (el-search--end-of-sexp posn))))))
+ (if (buffer-modified-p)
+ (if (eq this-command 'el-search-pattern)
+ (user-error "Buffer is modified - please save")
+ nil)
+ (save-restriction
+ (widen)
+ (let ((changes (el-search--changes-from-diff-hl revision)))
+ (while (and changes (<= (cdar changes) posn))
+ (pop changes))
+ (and changes
+ (< (caar changes) (el-search--end-of-sexp posn)))))))
(defun el-search-change--heuristic-matcher (&optional revision)
(let* ((revision (or revision "HEAD"))
@@ -351,9 +355,16 @@ Uses variable `el-search--cached-changes' for caching."
revision file))))))))))
(lambda (file-name-or-buffer _) (funcall file-changed-p
file-name-or-buffer))))
+(el-search-defpattern change--1 (&optional revision)
+ (declare (heuristic-matcher #'el-search-change--heuristic-matcher))
+ `(guard (el-search--change-p (point) ,(or revision "HEAD"))))
+
(el-search-defpattern change (&optional revision)
"Matches the object if its text is part of a file change.
+Matches anything that changed relative to REVISION.
+Never matches in a modified buffer.
+
Requires library \"diff-hl\". REVISION defaults to the file's
repository's HEAD commit and is a revision string. Customize
`el-search-change-revision-transformer-function' to control how
@@ -361,12 +372,18 @@ REVISION is interpreted.
This pattern-type does currently only work for git versioned
files."
+ `(and (filename) (change--1 ,revision)))
+
+(el-search-defpattern changed--1 (&optional revision)
(declare (heuristic-matcher #'el-search-change--heuristic-matcher))
- `(guard (el-search--change-p (point) ,(or revision "HEAD"))))
+ `(guard (el-search--changed-p (point) ,(or revision "HEAD"))))
(el-search-defpattern changed (&optional revision)
"Matches the object if its text contains a file change.
+Matches anything that textually contains a change relative to
+REVISION. Never matches in a modified buffer.
+
Requires library \"diff-hl\". REVISION defaults to the file's
repository's HEAD commit and is a revision string. Customize
`el-search-change-revision-transformer-function' to control how
@@ -374,8 +391,7 @@ REVISION is interpreted.
This pattern-type does currently only work for git versioned
files."
- (declare (heuristic-matcher #'el-search-change--heuristic-matcher))
- `(guard (el-search--changed-p (point) ,(or revision "HEAD"))))
+ `(and (filename) (changed--1 ,revision)))
;;;; `outermost' and `top-level'
- [elpa] externals/el-search bb978b2 306/332: [el-search] Fix behavior after completed single-buffer search, (continued)
- [elpa] externals/el-search bb978b2 306/332: [el-search] Fix behavior after completed single-buffer search, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 985ca3c 312/332: [el-search] Add "List patterns" menu item, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search f5e8235 321/332: [el-search] C-c C-c in edit-replacement means replace, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 9d8798f 140/332: Work around more manifestations of Emacs bug #24542, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 7d621de 216/332: * el-search/el-search.el: Some minor tweaks, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 29eeda2 228/332: Show progress of automatic el-search-query-replace, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 4b934f1 238/332: * el-search/el-search.el: Skip over #N read syntaxes, Stefan Monnier, 2020/12/01
- [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 <=
- [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, 2020/12/01
- [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