changeset 94258:080f9df8b170

(isearch-success-function): New variable with default to `isearch-success-function-default'. (isearch-search): Call a function from `isearch-success-function' instead of calling the hard-coded `isearch-range-invisible'. (isearch-success-function-default): New function that calls `isearch-range-invisible' and inverts its return value.
author Juri Linkov <juri@jurta.org>
date Tue, 22 Apr 2008 19:56:17 +0000
parents 25372685069a
children 2741bbf61004
files lisp/isearch.el
diffstat 1 files changed, 19 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/isearch.el	Tue Apr 22 19:55:21 2008 +0000
+++ b/lisp/isearch.el	Tue Apr 22 19:56:17 2008 +0000
@@ -178,6 +178,12 @@
   "Function to save a function restoring the mode-specific isearch state
 to the search status stack.")
 
+(defvar isearch-success-function 'isearch-success-function-default
+  "Function to report whether the new search match is considered successful.
+The function has two arguments: the positions of start and end of text
+matched by the search.  It this function returns nil, continue
+searching without stopping at this match.")
+
 ;; Search ring.
 
 (defvar search-ring nil
@@ -2104,7 +2110,9 @@
       (setq isearch-case-fold-search
 	    (isearch-no-upper-case-p isearch-string isearch-regexp)))
   (condition-case lossage
-      (let ((inhibit-point-motion-hooks search-invisible)
+      (let ((inhibit-point-motion-hooks
+	     (and (eq isearch-success-function 'isearch-success-function-default)
+		  search-invisible))
 	    (inhibit-quit nil)
 	    (case-fold-search isearch-case-fold-search)
 	    (search-spaces-regexp search-whitespace-regexp)
@@ -2115,12 +2123,11 @@
 		(isearch-search-string isearch-string nil t))
 	  ;; Clear RETRY unless we matched some invisible text
 	  ;; and we aren't supposed to do that.
-	  (if (or (eq search-invisible t)
-		  (not isearch-success)
+	  (if (or (not isearch-success)
 		  (bobp) (eobp)
 		  (= (match-beginning 0) (match-end 0))
-		  (not (isearch-range-invisible
-			(match-beginning 0) (match-end 0))))
+		  (funcall isearch-success-function
+			   (match-beginning 0) (match-end 0)))
 	      (setq retry nil)))
 	(setq isearch-just-started nil)
 	(if isearch-success
@@ -2298,6 +2305,13 @@
 		  nil)
 	      (setq isearch-hidden t)))))))
 
+(defun isearch-success-function-default (beg end)
+  "Default function to report if the new search match is successful.
+Returns t if search can match hidden text, or otherwise checks if some
+text from BEG to END is visible."
+  (or (eq search-invisible t)
+      (not (isearch-range-invisible beg end))))
+
 
 ;; General utilities