Mercurial > emacs
changeset 73008:163ae35e835d
(isearch-process-search-char): Cancel the previous
change.
(isearch-search-string): New function.
(isearch-search): Use isearch-search-string.
(isearch-lazy-highlight-search): Likewise.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Wed, 20 Sep 2006 06:13:43 +0000 |
parents | 637b0854d9b5 |
children | a2455bb397e4 |
files | lisp/isearch.el |
diffstat | 1 files changed, 32 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/isearch.el Wed Sep 20 05:45:06 2006 +0000 +++ b/lisp/isearch.el Wed Sep 20 06:13:43 2006 +0000 @@ -1807,8 +1807,6 @@ ((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) @@ -1993,6 +1991,36 @@ (t (if isearch-forward 'search-forward 'search-backward))))) +(defun isearch-search-string (string bound noerror) + ;; Search for the first occurance of STRING or its translation. If + ;; found, move point to the end of the occurance, update + ;; isearch-match-beg and isearch-match-end, and return point. + (let ((func (isearch-search-fun)) + (len (length string)) + pos1 pos2) + (setq pos1 (save-excursion (funcall func string bound noerror))) + (if (and (char-table-p translation-table-for-input) + (> (string-bytes string) len)) + (let (translated match-data) + (dotimes (i len) + (let ((x (aref translation-table-for-input (aref string i)))) + (when x + (or translated (setq translated (copy-sequence string))) + (aset translated i x)))) + (when translated + (save-match-data + (save-excursion + (if (setq pos2 (funcall func translated bound noerror)) + (setq match-data (match-data t))))) + (when (and pos2 + (or (not pos1) + (if isearch-forward (< pos2 pos1) (> pos2 pos1)))) + (setq pos1 pos2) + (set-match-data match-data))))) + (if pos1 + (goto-char pos1)) + pos1)) + (defun isearch-search () ;; Do the search with the current search string. (isearch-message nil t) @@ -2008,9 +2036,7 @@ (setq isearch-error nil) (while retry (setq isearch-success - (funcall - (isearch-search-fun) - isearch-string nil t)) + (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) @@ -2353,7 +2379,7 @@ (isearch-regexp isearch-lazy-highlight-regexp) (search-spaces-regexp search-whitespace-regexp)) (condition-case nil - (funcall (isearch-search-fun) + (isearch-search-string isearch-lazy-highlight-last-string (if isearch-forward (min (or isearch-lazy-highlight-end-limit (point-max))