[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings
From: |
Kenichi Handa |
Subject: |
Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings |
Date: |
Wed, 20 Sep 2006 16:10:32 +0900 |
User-agent: |
SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.2 Emacs/22.0.50 (i686-pc-linux-gnu) MULE/5.0 (SAKAKI) |
In article <address@hidden>, Richard Stallman <address@hidden> writes:
> A while ago, I proposed to change isearch so that it
> translates characters by translation-table-for-input to
> solve such a problem, but there raised an objection that
> read-char should do that translation. RMS asked to check if
> such a change to read-char is surely safe or not, but as
> such a check is very difficult and time-consuiming, no one
> took on the job.
> So, this problem is still unfixed.
> I again propose to change isearch.
> Yes, let's do it that way. Could you do it now?
Oops, it seems that my brain is seriously damaged :-(. I
have already installed such a change (perhaps accoding to
your decision).
The problem is that the change took care only for a typed
character. If isearch-string is set from a (possibly
different) buffer (e.g. by C-s C-w), the translation doesn't
happen.
So, I've just installed the attached change. But, there
still exists a case that isearch fails. For instance, if
your buffer's buffer-file-coding-system is iso-8859-2, and
you somehow insert a-acute of iso-8859-1, isearch won't be
able to find that a-acute. The fix for that case is very
difficult in Emacs 22.
---
Kenichi Handa
address@hidden
2006-09-20 Kenichi Handa <address@hidden>
* isearch.el (isearch-process-search-char): Cancel the previous
change.
(isearch-search-string): New function.
(isearch-search): Use isearch-search-string.
(isearch-lazy-highlight-search): Likewise.
Index: isearch.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/isearch.el,v
retrieving revision 1.289
retrieving revision 1.290
diff -u -r1.289 -r1.290
--- isearch.el 9 Jul 2006 11:04:18 -0000 1.289
+++ isearch.el 20 Sep 2006 06:13:43 -0000 1.290
@@ -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))
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings, Kenichi Handa, 2006/09/18
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings, David Kastrup, 2006/09/19
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings, Richard Stallman, 2006/09/19
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings,
Kenichi Handa <=
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings, Peter Dyballa, 2006/09/20
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings, Kenichi Handa, 2006/09/20
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings, Peter Dyballa, 2006/09/20
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings, Kenichi Handa, 2006/09/20
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings, Peter Dyballa, 2006/09/21
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings, Peter Dyballa, 2006/09/21
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings, Kenichi Handa, 2006/09/21
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings, Peter Dyballa, 2006/09/22
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings, Miles Bader, 2006/09/21
- Re: GNU Emacs 22.0.50 fails to find ä in different ISO Latin encodings, Peter Dyballa, 2006/09/22