diff options
Diffstat (limited to 'lisp/isearch.el')
-rw-r--r-- | lisp/isearch.el | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/lisp/isearch.el b/lisp/isearch.el index bb640f7cf6d..332b57381c3 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -382,6 +382,8 @@ A value of nil means highlight all matches." (define-key map [iconify-frame] nil) (define-key map [make-frame-visible] nil) (define-key map [mouse-movement] nil) + (define-key map [language-change] nil) + ;; For searching multilingual text. (define-key map "\C-\\" 'isearch-toggle-input-method) (define-key map "\C-^" 'isearch-toggle-specified-input-method) @@ -1134,15 +1136,16 @@ Use `isearch-exit' to quit without signaling." ;; C-s in forward or C-r in reverse. (if (equal isearch-string "") ;; If search string is empty, use last one. - (setq isearch-string - (or (if isearch-regexp - (car regexp-search-ring) - (car search-ring)) - (error "No previous search string")) - isearch-message - (mapconcat 'isearch-text-char-description - isearch-string "") - isearch-case-fold-search isearch-last-case-fold-search) + (if (null (if isearch-regexp regexp-search-ring search-ring)) + (setq isearch-error "No previous search string") + (setq isearch-string + (if isearch-regexp + (car regexp-search-ring) + (car search-ring)) + isearch-message + (mapconcat 'isearch-text-char-description + isearch-string "") + isearch-case-fold-search isearch-last-case-fold-search)) ;; If already have what to search for, repeat it. (or isearch-success (progn @@ -1217,9 +1220,10 @@ Use `isearch-exit' to quit without signaling." (let ((case-fold-search isearch-case-fold-search)) (isearch-done) (isearch-clean-overlays) - (if (and (< isearch-other-end (point)) + (if (and isearch-other-end + (< isearch-other-end (point)) (not (and transient-mark-mode mark-active - (< isearch-opoint (point))))) + (< (mark) (point))))) (goto-char isearch-other-end)) (set query-replace-from-history-variable (cons isearch-string @@ -1802,6 +1806,8 @@ Isearch mode." ((eq char ?|) (isearch-fallback t nil t))) ;; Append the char to the search string, update the message and re-search. + (if (char-table-p translation-table-for-input) + (setq char (or (aref translation-table-for-input char) char))) (isearch-process-search-string (char-to-string char) (if (>= char ?\200) @@ -2228,17 +2234,15 @@ since they have special meaning in a regexp." (defvar isearch-overlay nil) (defun isearch-highlight (beg end) - (unless (null search-highlight) - (cond (isearch-overlay - ;; Overlay already exists, just move it. - (move-overlay isearch-overlay beg end (current-buffer))) - - (t - ;; Overlay doesn't exist, create it. - (setq isearch-overlay (make-overlay beg end)) - (overlay-put isearch-overlay 'face isearch) - (overlay-put isearch-overlay 'priority 1) ;higher than lazy overlays - )))) + (if search-highlight + (if isearch-overlay + ;; Overlay already exists, just move it. + (move-overlay isearch-overlay beg end (current-buffer)) + ;; Overlay doesn't exist, create it. + (setq isearch-overlay (make-overlay beg end)) + ;; 1001 is higher than lazy's 1000 and ediff's 100+ + (overlay-put isearch-overlay 'priority 1001) + (overlay-put isearch-overlay 'face isearch)))) (defun isearch-dehighlight () (when isearch-overlay @@ -2402,8 +2406,10 @@ Attempt to do the search exactly the way the pending isearch would." ;; non-zero-length match (let ((ov (make-overlay mb me))) (push ov isearch-lazy-highlight-overlays) + ;; 1000 is higher than ediff's 100+, + ;; but lower than isearch main overlay's 1001 + (overlay-put ov 'priority 1000) (overlay-put ov 'face lazy-highlight-face) - (overlay-put ov 'priority 0) ;lower than main overlay (overlay-put ov 'window (selected-window)))) (if isearch-forward (setq isearch-lazy-highlight-end (point)) |