Mercurial > emacs
changeset 74094:1fee8f7da8cf
(x-last-cut-buffer-coding): New variable.
(x-select-text): Set it.
(x-cut-buffer-or-selection-value): Check also x-last-cut-buffer-coding
when checking for newness.
author | Jan Djärv <jan.h.d@swipnet.se> |
---|---|
date | Mon, 20 Nov 2006 07:43:11 +0000 |
parents | bc5d69739d5e |
children | 513c046e2d72 |
files | lisp/term/x-win.el |
diffstat | 1 files changed, 21 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/term/x-win.el Mon Nov 20 06:50:29 2006 +0000 +++ b/lisp/term/x-win.el Mon Nov 20 07:43:11 2006 +0000 @@ -2138,6 +2138,8 @@ (defvar x-last-selected-text-cut-encoded nil "The value of the X cut buffer last time we selected or pasted text. This is the actual text stored in the X cut buffer.") +(defvar x-last-cut-buffer-coding 'iso-latin-1 + "The coding we last used to encode/decode the text from the X cut buffer") (defvar x-cut-buffer-max 20000 ; Note this value is overridden below. "Max number of characters to put in the cut buffer. @@ -2163,6 +2165,7 @@ x-last-selected-text-cut-encoded "")) (t (setq x-last-selected-text-cut text + x-last-cut-buffer-coding 'iso-latin-1 x-last-selected-text-cut-encoded ;; ICCCM says cut buffer always contain ISO-Latin-1 (encode-coding-string text 'iso-latin-1)) @@ -2331,20 +2334,28 @@ ;; from what we remebered them to be last time we did a ;; cut/paste operation. (setq cut-text - (cond;; check cut buffer - ((or (not cut-text) (string= cut-text "")) - (setq x-last-selected-text-cut nil)) - (t - ;; We can not compare x-last-selected-text-cut-encoded with - ;; cut-text because the next-selection-coding-system may have changed - ;; so we need to re-decode anyway. - (setq x-last-selected-text-cut-encoded cut-text + (let ((next-coding (or next-selection-coding-system 'iso-latin-1))) + (cond;; check cut buffer + ((or (not cut-text) (string= cut-text "")) + (setq x-last-selected-text-cut nil)) + ;; This short cut doesn't work because x-get-cut-buffer + ;; always returns a newly created string. + ;; ((eq cut-text x-last-selected-text-cut) nil) + ((and (string= cut-text x-last-selected-text-cut-encoded) + (eq x-last-cut-buffer-coding next-coding)) + ;; See the comment above. No need of this recording. + ;; Record the newer string, + ;; so subsequent calls can use the `eq' test. + ;; (setq x-last-selected-text-cut cut-text) + nil) + (t + (setq x-last-selected-text-cut-encoded cut-text + x-last-cut-buffer-coding next-coding x-last-selected-text-cut ;; ICCCM says cut buffer always contain ISO-Latin-1, but ;; use next-selection-coding-system if not nil. (decode-coding-string - cut-text - (or next-selection-coding-system 'iso-latin-1)))))) + cut-text next-coding)))))) ;; As we have done one selection, clear this now. (setq next-selection-coding-system nil)