[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 3247c31d67: New function isearch-search-fun-in-text-property (bug
From: |
Juri Linkov |
Subject: |
master 3247c31d67: New function isearch-search-fun-in-text-property (bug#14013). |
Date: |
Fri, 10 Jun 2022 12:44:01 -0400 (EDT) |
branch: master
commit 3247c31d672e5fed83435150ba62006acaddcf84
Author: Juri Linkov <juri@linkov.net>
Commit: Juri Linkov <juri@linkov.net>
New function isearch-search-fun-in-text-property (bug#14013).
* lisp/dired-aux.el (dired-isearch-search-filenames): Move most of the body
to the new function isearch-search-fun-in-text-property.
* lisp/isearch.el (isearch-search-fun-in-text-property):
New function refactored from dired-isearch-search-filenames.
---
lisp/dired-aux.el | 36 +-----------------------------------
lisp/isearch.el | 42 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 43 insertions(+), 35 deletions(-)
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index 4faf9431aa..d16aee0fa8 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -3208,41 +3208,7 @@ Intended to be added to `isearch-mode-hook'."
The returned function narrows the search to match the search string
only as part of a file name enclosed by the text property `dired-filename'.
It's intended to override the default search function."
- (let ((search-fun (funcall orig-fun))
- (property 'dired-filename))
- (lambda (string &optional bound noerror count)
- (let* ((old (point))
- ;; Check if point is already on the property.
- (beg (when (get-text-property
- (if isearch-forward old (max (1- old) (point-min)))
- property)
- old))
- end found)
- ;; Otherwise, try to search for the next property.
- (unless beg
- (setq beg (if isearch-forward
- (next-single-property-change old property)
- (previous-single-property-change old property)))
- (when beg (goto-char beg)))
- ;; Non-nil `beg' means there are more properties.
- (while (and beg (not found))
- ;; Search for the end of the current property.
- (setq end (if isearch-forward
- (next-single-property-change beg property)
- (previous-single-property-change beg property)))
- (setq found (funcall
- search-fun string (if bound (if isearch-forward
- (min bound end)
- (max bound end))
- end)
- noerror count))
- (unless found
- (setq beg (if isearch-forward
- (next-single-property-change end property)
- (previous-single-property-change end property)))
- (when beg (goto-char beg))))
- (unless found (goto-char old))
- found))))
+ (isearch-search-fun-in-text-property 'dired-filename (funcall orig-fun)))
;;;###autoload
(defun dired-isearch-filenames ()
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 31fbdf01bf..5fbfb724a3 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -4455,6 +4455,48 @@ LAX-WHITESPACE: The value of `isearch-lax-whitespace' and
(funcall after-change nil nil nil)))))
+(defun isearch-search-fun-in-text-property (property &optional search-fun)
+ "Return the function that searches inside fields.
+The arg PROPERTY defines the name of the text property that
+delimits fields in the current buffer. Then the search will be
+narrowed to match only on such text properties. The optional arg
+SEARCH-FUN can provide the default search function which is
+by default is the same as returned by `isearch-search-fun-default'."
+ (lambda (string &optional bound noerror count)
+ (let* ((old (point))
+ ;; Check if point is already on the property.
+ (beg (when (get-text-property
+ (if isearch-forward old (max (1- old) (point-min)))
+ property)
+ old))
+ end found)
+ ;; Otherwise, try to search for the next property.
+ (unless beg
+ (setq beg (if isearch-forward
+ (next-single-property-change old property)
+ (previous-single-property-change old property)))
+ (when beg (goto-char beg)))
+ ;; Non-nil `beg' means there are more properties.
+ (while (and beg (not found))
+ ;; Search for the end of the current property.
+ (setq end (if isearch-forward
+ (next-single-property-change beg property)
+ (previous-single-property-change beg property)))
+ (setq found (funcall (or search-fun (isearch-search-fun-default))
+ string (if bound (if isearch-forward
+ (min bound end)
+ (max bound end))
+ end)
+ noerror count))
+ (unless found
+ (setq beg (if isearch-forward
+ (next-single-property-change end property)
+ (previous-single-property-change end property)))
+ (when beg (goto-char beg))))
+ (unless found (goto-char old))
+ found)))
+
+
(defun isearch-resume (string regexp word forward message case-fold)
"Resume an incremental search.
STRING is the string or regexp searched for.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 3247c31d67: New function isearch-search-fun-in-text-property (bug#14013).,
Juri Linkov <=