[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/emacs-24 r107896: Ensure that X selection c
From: |
Chong Yidong |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/emacs-24 r107896: Ensure that X selection convertors properly encode returned strings. |
Date: |
Tue, 24 Apr 2012 13:34:50 +0800 |
User-agent: |
Bazaar (2.3.1) |
------------------------------------------------------------
revno: 107896
fixes bug(s): http://debbugs.gnu.org/11315
committer: Chong Yidong <address@hidden>
branch nick: emacs-24
timestamp: Tue 2012-04-24 13:34:50 +0800
message:
Ensure that X selection convertors properly encode returned strings.
Though not itself a regression, this bug was exposed by the support
for MULTIPLE selections, which is new to Emacs 24 (see Bug#11315).
* lisp/select.el (xselect--encode-string): New function, split from
xselect-convert-to-string.
(xselect-convert-to-string): Use it.
(xselect-convert-to-filename, xselect-convert-to-os)
(xselect-convert-to-host, xselect-convert-to-user): Ensure that
returned strings are properly encoded.
modified:
lisp/ChangeLog
lisp/select.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2012-04-22 07:19:29 +0000
+++ b/lisp/ChangeLog 2012-04-24 05:34:50 +0000
@@ -1,3 +1,12 @@
+2012-04-24 Chong Yidong <address@hidden>
+
+ * select.el (xselect--encode-string): New function, split from
+ xselect-convert-to-string.
+ (xselect-convert-to-string): Use it.
+ (xselect-convert-to-filename, xselect-convert-to-os)
+ (xselect-convert-to-host, xselect-convert-to-user): Ensure that
+ returned strings are properly encoded (Bug#11315).
+
2012-04-22 Chong Yidong <address@hidden>
* simple.el (delete-active-region): Move to killing custom group.
=== modified file 'lisp/select.el'
--- a/lisp/select.el 2012-02-11 23:06:46 +0000
+++ b/lisp/select.el 2012-04-24 05:34:50 +0000
@@ -213,30 +213,25 @@
(defun xselect--int-to-cons (n)
(cons (ash n -16) (logand n 65535)))
-(defun xselect-convert-to-string (_selection type value)
- (let (str coding)
- ;; Get the actual string from VALUE.
- (cond ((stringp value)
- (setq str value))
- ((setq value (xselect--selection-bounds value))
- (with-current-buffer (nth 2 value)
- (setq str (buffer-substring (nth 0 value)
- (nth 1 value))))))
- (when str
- ;; If TYPE is nil, this is a local request, thus return STR as
- ;; is. Otherwise, encode STR.
- (if (not type)
- str
- (setq coding (or next-selection-coding-system selection-coding-system))
+(defun xselect--encode-string (type str &optional can-modify)
+ (when str
+ ;; If TYPE is nil, this is a local request; return STR as-is.
+ (if (null type)
+ str
+ ;; Otherwise, encode STR.
+ (let ((coding (or next-selection-coding-system
+ selection-coding-system)))
(if coding
(setq coding (coding-system-base coding)))
(let ((inhibit-read-only t))
;; Suppress producing escape sequences for compositions.
+ ;; But avoid modifying the string if it's a buffer name etc.
+ (unless can-modify (setq str (substring str 0)))
(remove-text-properties 0 (length str) '(composition nil) str)
+ ;; TEXT is a polymorphic target. Select the actual type
+ ;; from `UTF8_STRING', `COMPOUND_TEXT', `STRING', and
+ ;; `C_STRING'.
(if (eq type 'TEXT)
- ;; TEXT is a polymorphic target. We must select the
- ;; actual type from `UTF8_STRING', `COMPOUND_TEXT',
- ;; `STRING', and `C_STRING'.
(if (not (multibyte-string-p str))
(setq type 'C_STRING)
(let (non-latin-1 non-unicode eight-bit)
@@ -279,6 +274,14 @@
(setq next-selection-coding-system nil)
(cons type str))))
+(defun xselect-convert-to-string (_selection type value)
+ (let ((str (cond ((stringp value) value)
+ ((setq value (xselect--selection-bounds value))
+ (with-current-buffer (nth 2 value)
+ (buffer-substring (nth 0 value)
+ (nth 1 value)))))))
+ (xselect--encode-string type str t)))
+
(defun xselect-convert-to-length (_selection _type value)
(let ((len (cond ((stringp value)
(length value))
@@ -311,7 +314,7 @@
(defun xselect-convert-to-filename (_selection _type value)
(when (setq value (xselect--selection-bounds value))
- (buffer-file-name (nth 2 value))))
+ (xselect--encode-string 'TEXT (buffer-file-name (nth 2 value)))))
(defun xselect-convert-to-charpos (_selection _type value)
(when (setq value (xselect--selection-bounds value))
@@ -337,13 +340,13 @@
(xselect--int-to-cons (max beg end))))))))
(defun xselect-convert-to-os (_selection _type _size)
- (symbol-name system-type))
+ (xselect--encode-string 'TEXT (symbol-name system-type)))
(defun xselect-convert-to-host (_selection _type _size)
- (system-name))
+ (xselect--encode-string 'TEXT (system-name)))
(defun xselect-convert-to-user (_selection _type _size)
- (user-full-name))
+ (xselect--encode-string 'TEXT (user-full-name)))
(defun xselect-convert-to-class (_selection _type _size)
"Convert selection to class.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/emacs-24 r107896: Ensure that X selection convertors properly encode returned strings.,
Chong Yidong <=