]> code.delx.au - gnu-emacs/blobdiff - lisp/isearch.el
(compilation-error-regexp-alist-alist) extend irix for NAG Fortran and add ftnchek-*
[gnu-emacs] / lisp / isearch.el
index b8865693d0b87462fc89b814bae2fa3e1fd0d3ad..45ac5b4d2864d94edd7cda622fe1748b4a9d468a 100644 (file)
@@ -146,8 +146,10 @@ Ordinarily the text becomes invisible again at the end of the search."
   :type 'boolean
   :group 'isearch)
 
-(defcustom isearch-resume-enabled t
-  "*If non-nil, `isearch-resume' commands are added to the command history."
+(defcustom isearch-resume-in-command-history nil
+  "*If non-nil, `isearch-resume' commands are added to the command history.
+This allows you to resume earlier isearch sessions through the
+command history."
   :type 'boolean
   :group 'isearch)
 
@@ -651,7 +653,7 @@ is treated as a regexp.  See \\[isearch-forward] for more info."
   (setq disable-point-adjustment t))
 
 (defun isearch-done (&optional nopush edit)
-  (if isearch-resume-enabled
+  (if isearch-resume-in-command-history
       (let ((command `(isearch-resume ,isearch-string ,isearch-regexp
                                      ,isearch-word ,isearch-forward
                                      ,isearch-message
@@ -678,16 +680,7 @@ is treated as a regexp.  See \\[isearch-forward] for more info."
     (if isearch-small-window
        (goto-char found-point)
       ;; Exiting the save-window-excursion clobbers window-start; restore it.
-      (set-window-start (selected-window) found-start t))
-
-    ;; If there was movement, mark the starting position.
-    ;; Maybe should test difference between and set mark iff > threshold.
-    (if (/= (point) isearch-opoint)
-       (or (and transient-mark-mode mark-active)
-           (progn
-             (push-mark isearch-opoint t)
-             (or executing-kbd-macro (> (minibuffer-depth) 0)
-                 (message "Mark saved where search started"))))))
+      (set-window-start (selected-window) found-start t)))
 
   (setq isearch-mode nil)
   (if isearch-input-method-local-p
@@ -712,6 +705,16 @@ is treated as a regexp.  See \\[isearch-forward] for more info."
       (isearch-update-ring isearch-string isearch-regexp))
 
   (run-hooks 'isearch-mode-end-hook)
+
+  ;; If there was movement, mark the starting position.
+  ;; Maybe should test difference between and set mark iff > threshold.
+  (if (/= (point) isearch-opoint)
+      (or (and transient-mark-mode mark-active)
+         (progn
+           (push-mark isearch-opoint t)
+           (or executing-kbd-macro (> (minibuffer-depth) 0)
+               (message "Mark saved where search started")))))
+
   (and (not edit) isearch-recursive-edit (exit-recursive-edit)))
 
 (defun isearch-update-ring (string &optional regexp)
@@ -1088,6 +1091,7 @@ Use `isearch-exit' to quit without signaling."
   (interactive)
   (setq isearch-regexp (not isearch-regexp))
   (if isearch-regexp (setq isearch-word nil))
+  (setq isearch-success t isearch-adjusted t)
   (isearch-update))
 
 (defun isearch-toggle-case-fold ()
@@ -1100,34 +1104,39 @@ Use `isearch-exit' to quit without signaling."
             (isearch-message-prefix nil nil isearch-nonincremental)
             isearch-message
             (if isearch-case-fold-search "in" "")))
-  (setq isearch-adjusted t)
+  (setq isearch-success t isearch-adjusted t)
   (sit-for 1)
   (isearch-update))
 
-(defun isearch-query-replace ()
+(defun isearch-query-replace (&optional regexp-flag)
   "Start query-replace with string to replace from last search string."
   (interactive)
   (barf-if-buffer-read-only)
+  (if regexp-flag (setq isearch-regexp t))
   (let ((case-fold-search isearch-case-fold-search))
     (isearch-done)
     (isearch-clean-overlays)
-    (and isearch-forward isearch-other-end (goto-char isearch-other-end))
+    (if (and (< isearch-other-end (point))
+             (not (and transient-mark-mode mark-active
+                       (< isearch-opoint (point)))))
+        (goto-char isearch-other-end))
+    (set query-replace-from-history-variable
+         (cons isearch-string
+               (symbol-value query-replace-from-history-variable)))
     (perform-replace
      isearch-string
-     (query-replace-read-to isearch-string "Query replace" isearch-regexp)
-     t isearch-regexp isearch-word)))
+     (query-replace-read-to
+      isearch-string
+      (if isearch-regexp "Query replace regexp" "Query replace")
+      isearch-regexp)
+     t isearch-regexp isearch-word nil nil
+     (if (and transient-mark-mode mark-active) (region-beginning))
+     (if (and transient-mark-mode mark-active) (region-end)))))
 
 (defun isearch-query-replace-regexp ()
   "Start query-replace-regexp with string to replace from last search string."
   (interactive)
-  (let ((query-replace-interactive t)
-        (case-fold-search isearch-case-fold-search))
-    ;; Put search string into the right ring
-    (setq isearch-regexp t)
-    (isearch-done)
-    (isearch-clean-overlays)
-    (and isearch-forward isearch-other-end (goto-char isearch-other-end))
-    (call-interactively 'query-replace-regexp)))
+  (isearch-query-replace t))
 
 \f
 (defun isearch-delete-char ()
@@ -1245,8 +1254,8 @@ might return the position of the end of the line."
 (defun isearch-yank-line ()
   "Pull rest of line from buffer into search string."
   (interactive)
-  (isearch-yank-internal 'line-end-position))
-
+  (isearch-yank-internal
+   (lambda () (line-end-position (if (eolp) 2 1)))))
 
 (defun isearch-search-and-update ()
   ;; Do the search and update the display.
@@ -1620,8 +1629,7 @@ Isearch mode."
            (let ((ab-bel (isearch-string-out-of-window isearch-point)))
              (if ab-bel
                  (isearch-back-into-window (eq ab-bel 'above) isearch-point)
-               (or (eq (point) isearch-point)
-                   (goto-char isearch-point))))
+               (goto-char isearch-point)))
            (isearch-update))
          (search-exit-option
           (let (window)
@@ -1895,6 +1903,7 @@ If there is no completion possible, say so and continue searching."
   ;; If currently failing, display no ellipsis.
   (or isearch-success (setq ellipsis nil))
   (let ((m (concat (if isearch-success "" "failing ")
+                  (if isearch-adjusted "pending " "")
                   (if (and isearch-wrapped
                            (not isearch-wrap-function)
                            (if isearch-forward
@@ -2356,9 +2365,10 @@ search string to change or the window to scroll)."
            isearch-lazy-highlight-case-fold-search isearch-case-fold-search
            isearch-lazy-highlight-regexp       isearch-regexp
             isearch-lazy-highlight-wrapped      nil)
-      (setq isearch-lazy-highlight-timer
-            (run-with-idle-timer isearch-lazy-highlight-initial-delay nil
-                                 'isearch-lazy-highlight-update)))))
+      (unless (equal isearch-string "")
+       (setq isearch-lazy-highlight-timer
+             (run-with-idle-timer isearch-lazy-highlight-initial-delay nil
+                                  'isearch-lazy-highlight-update))))))
 
 (defun isearch-lazy-highlight-search ()
   "Search ahead for the next or previous match, for lazy highlighting.
@@ -2395,7 +2405,17 @@ Attempt to do the search exactly the way the pending isearch would."
                 (let ((mb (match-beginning 0))
                       (me (match-end 0)))
                   (if (= mb me)      ;zero-length match
-                      (forward-char 1)
+                     (if isearch-forward
+                         (if (= mb (if isearch-lazy-highlight-wrapped
+                                       isearch-lazy-highlight-start
+                                     (window-end)))
+                             (setq found nil)
+                           (forward-char 1))
+                       (if (= mb (if isearch-lazy-highlight-wrapped
+                                     isearch-lazy-highlight-end
+                                   (window-start)))
+                           (setq found nil)
+                         (forward-char -1)))
 
                     ;; non-zero-length match
                     (let ((ov (make-overlay mb me)))
@@ -2405,19 +2425,20 @@ Attempt to do the search exactly the way the pending isearch would."
                       (push ov isearch-lazy-highlight-overlays)))
                   (if isearch-forward
                       (setq isearch-lazy-highlight-end (point))
-                    (setq isearch-lazy-highlight-start (point))))
-
-              ;; not found
-              (if isearch-lazy-highlight-wrapped
-                  (setq looping nil
-                        nomore  t)
-                (setq isearch-lazy-highlight-wrapped t)
-                (if isearch-forward
-                    (progn
-                      (setq isearch-lazy-highlight-end (window-start))
-                      (goto-char (window-start)))
-                  (setq isearch-lazy-highlight-start (window-end))
-                  (goto-char (window-end)))))))
+                    (setq isearch-lazy-highlight-start (point)))))
+
+           ;; not found or zero-length match at the search bound
+           (if (not found)
+               (if isearch-lazy-highlight-wrapped
+                   (setq looping nil
+                         nomore  t)
+                 (setq isearch-lazy-highlight-wrapped t)
+                 (if isearch-forward
+                     (progn
+                       (setq isearch-lazy-highlight-end (window-start))
+                       (goto-char (window-start)))
+                   (setq isearch-lazy-highlight-start (window-end))
+                   (goto-char (window-end)))))))
         (unless nomore
           (setq isearch-lazy-highlight-timer
                 (run-at-time isearch-lazy-highlight-interval nil