]> git.eshelyaron.com Git - emacs.git/commitdiff
(isearch-success-function): New variable with default
authorJuri Linkov <juri@jurta.org>
Tue, 22 Apr 2008 19:56:17 +0000 (19:56 +0000)
committerJuri Linkov <juri@jurta.org>
Tue, 22 Apr 2008 19:56:17 +0000 (19:56 +0000)
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.

lisp/isearch.el

index 675fc7a0f080b5b69e2995140a4191a9a8316d2d..92176236d5c5f9a22ea5d59c8e70ea53eb5b825b 100644 (file)
@@ -178,6 +178,12 @@ or to the end of the buffer for a backward search.")
   "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 @@ Can be changed via `isearch-search-fun-function' for special needs."
       (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 @@ Can be changed via `isearch-search-fun-function' for special needs."
                (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 @@ Can be changed via `isearch-search-fun-function' for special needs."
                  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))))
+
 \f
 ;; General utilities