[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/el-search c090afe 057/332: el-search: new pattern type
From: |
Stefan Monnier |
Subject: |
[elpa] externals/el-search c090afe 057/332: el-search: new pattern type `contains' |
Date: |
Tue, 1 Dec 2020 15:48:10 -0500 (EST) |
branch: externals/el-search
commit c090afedab87e0a4e59e84372d0c0bc39a48f6cf
Author: Michael Heerdegen <michael_heerdegen@web.de>
Commit: Michael Heerdegen <michael_heerdegen@web.de>
el-search: new pattern type `contains'
---
el-search.el | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/el-search.el b/el-search.el
index 496285b..ff24166 100644
--- a/el-search.el
+++ b/el-search.el
@@ -571,6 +571,34 @@ matches the list (1 2 3 4 5 6 7 8 9) and binds `x' to (4 5
6)."
`(and (pred symbolp)
(app symbol-name (string ,@regexps))))
+(defun el-search--contains-p (matcher exp)
+ "Return non-nil when tree EXP contains a match for MATCHER.
+Recurse on all types of sequences. In the positive case the
+return value is (t elt), where ELT is a matching element found in
+EXP."
+ (if (el-search--match-p matcher exp)
+ (list t exp)
+ (and (sequencep exp)
+ (let ((try-match (apply-partially #'el-search--contains-p matcher)))
+ (if (consp exp)
+ (or (funcall try-match (car exp))
+ (funcall try-match (cdr exp)))
+ (cl-some try-match exp))))))
+
+(el-search-defpattern contains (&rest patterns)
+ "Matches trees that contain a match for all PATTERNs.
+Searches any tree of sequences recursively for matches. Objects
+of any kind matched by all PATTERNs are also matched.
+
+ Example: (contains (string \"H\") 17) matches ((\"Hallo\") x (5 [1 17]))"
+ (cond
+ ((null patterns) '_)
+ ((null (cdr patterns))
+ (let ((pattern (car patterns)))
+ `(app ,(apply-partially #'el-search--contains-p (el-search--matcher
pattern))
+ (,'\` (t (,'\, ,pattern))))))
+ (t `(and ,@(mapcar (lambda (pattern) `(contains ,pattern)) patterns)))))
+
(el-search-defpattern not (pattern)
"Matches any object that is not matched by PATTERN."
`(app ,(apply-partially #'el-search--match-p (el-search--matcher pattern))
- [elpa] externals/el-search 112612e 041/332: simplify el-search-hl-post-command-fun, (continued)
- [elpa] externals/el-search 112612e 041/332: simplify el-search-hl-post-command-fun, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search b4abe87 045/332: add a to do, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 20f670a 048/332: bump version to 0.1.1, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search bff759c 047/332: el-search-query-replace: add s (toggle splicing) and ? (help) keys, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 0e71413 049/332: el-search--matcher: refine when to warn or error, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search aa4bd02 051/332: el-search: new pattern type `append', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search d97f8fe 052/332: remove example using `message' in a guard, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search e81afef 054/332: factor out `el-search--search-pattern-1', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 2b4c194 055/332: remove annoying message on how to repeat el-search, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 30fef15 056/332: use more newlines in `el-search--make-docstring', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search c090afe 057/332: el-search: new pattern type `contains',
Stefan Monnier <=
- [elpa] externals/el-search 7e13746 058/332: When coming from isearch, don't move to other end, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 5837187 059/332: el-search: bump version to 0.1.3, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 108466e 061/332: Support highlighting of all visible matches, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 177d82e 063/332: use uninterned symbol in `el-search--matcher', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 5517384 065/332: Improve doc of el-search-this-expression-identifier., Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 1e97c09 069/332: Fix for non-interactive calls of el-search-pattern, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search c0efb8d 067/332: New user option: el-search-smart-case-fold-search, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 9f8b3d2 071/332: New function el-search--macroexpand-1 for debugging, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 975e2e5 073/332: Rewrite `string' pattern definition, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 2dc14bb 075/332: Rewrite replacement layout restoration, Stefan Monnier, 2020/12/01