]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix a recent commit in select.el
authorEli Zaretskii <eliz@gnu.org>
Fri, 17 May 2019 08:01:20 +0000 (11:01 +0300)
committerEli Zaretskii <eliz@gnu.org>
Fri, 17 May 2019 08:01:20 +0000 (11:01 +0300)
* lisp/select.el (gui-get-selection): Revert a recent
incorrect change.  Add a comment explaining what we are trying
to do with C_STRING and why.
(xselect--encode-string): Add a comment explaining what we are
trying to do with C_STRING and why.

lisp/select.el

index 3ea741d383ec0265f9b50302c3f5e70bbae124c2..af6bf467e4ad3ee838f402f14a45b058e3867c79 100644 (file)
@@ -308,15 +308,12 @@ the formats available in the clipboard if TYPE is `CLIPBOARD'."
                           ('STRING 'iso-8859-1)
                           (_ (error "Unknown selection data type: %S"
                                     type))))))
-        (setq data (cond
-                    (coding
-                     (decode-coding-string data coding))
-                    ;; The last two cases are only possible in the
-                    ;; C_STRING case.
-                    ((multibyte-string-p data)
-                     data)
-                    (t
-                     (encode-coding-string data 'eight-bit)))))
+        (setq data (if coding (decode-coding-string data coding)
+                     ;; This is for C_STRING case.
+                     ;; We want to convert each non-ASCII byte to the
+                     ;; corresponding eight-bit character, which has
+                     ;; a codepoint >= #x3FFF00.
+                     (string-to-multibyte data))))
       (setq next-selection-coding-system nil)
       (put-text-property 0 (length data) 'foreign-selection data-type data))
     data))
@@ -479,6 +476,9 @@ two markers or an overlay.  Otherwise, it is nil."
            (setq str (encode-coding-string str coding)))
 
           ((eq type 'C_STRING)
+            ;; If STR is unibyte (the normal case), use it; otherwise
+            ;; we assume some of the characters are eight-bit, and
+            ;; take their lower 8 bits.
            (setq str (string-make-unibyte str)))
 
           (t