diff lisp/term/x-win.el @ 83560:738ce3540ffb

Merged from emacs@sv.gnu.org Patches applied: * emacs@sv.gnu.org/emacs--devo--0--patch-660 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-661 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-662 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-663 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-664 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-665 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-666 Fix read-only prompt problem in isearch * emacs@sv.gnu.org/emacs--devo--0--patch-667 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-668 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-669 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-670 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-671 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-672 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-673 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-206 Merge from emacs--devo--0 * emacs@sv.gnu.org/gnus--rel--5.10--patch-207 Merge from emacs--devo--0 * emacs@sv.gnu.org/gnus--rel--5.10--patch-208 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-600
author Karoly Lorentey <karoly@lorentey.hu>
date Sun, 22 Apr 2007 12:12:29 +0000
parents b8d9a391daf3 318b0d9919a6
children 2716535391b7
line wrap: on
line diff
--- a/lisp/term/x-win.el	Sun Apr 22 11:42:03 2007 +0000
+++ b/lisp/term/x-win.el	Sun Apr 22 12:12:29 2007 +0000
@@ -2207,11 +2207,12 @@
 ;;   (1) If their lengthes are different, select the longer one.  This
 ;;   is because an X client may just cut off unsupported characters.
 ;;
-;;   (2) Otherwise, if the Nth character of CTEXT is an ASCII
-;;   character that is different from the Nth character of UTF8,
-;;   select UTF8.  This is because an X client may replace unsupported
-;;   characters with some ASCII character (typically ` ' or `?') in
-;;   CTEXT.
+;;   (2) Otherwise, if they are different at Nth character, and that
+;;   of UTF8 is a Latin character and that of CTEXT belongs to a CJK
+;;   character set, select UTF8.  Also select UTF8 if the Nth
+;;   character of UTF8 is non-ASCII where as that of CTEXT is ASCII.
+;;   This is because an X client may replace unsupported characters
+;;   with some ASCII character (typically ` ' or `?') in CTEXT.
 ;;
 ;;   (3) Otherwise, select CTEXT.  This is because legacy charsets are
 ;;   better for the current Emacs, especially when the selection owner
@@ -2226,10 +2227,16 @@
     (if (/= len-utf8 len-ctext)
 	(if (> len-utf8 len-ctext) utf8 ctext)
       (let ((result (compare-strings utf8 0 len-utf8 ctext 0 len-ctext)))
-	(if (or (eq result t)
-		(>= (aref ctext (1- (abs result))) 128))
+	(if (eq result t)
 	    ctext
-	  utf8)))))
+	  (let ((utf8-char (aref utf8 (1- (abs result))))
+		(ctext-char (aref ctext (1- (abs result)))))
+	    (if (or (and (aref (char-category-set utf8-char) ?l)
+			 (aref (char-category-set ctext-char) ?C))
+		    (and (>= utf8-char 128)
+			 (< ctext-char  128)))
+		utf8
+	      ctext)))))))
 
 ;; Get a selection value of type TYPE by calling x-get-selection with
 ;; an appropiate DATA-TYPE argument decidd by `x-select-request-type'.