# HG changeset patch # User Jan Dj¸«£rv # Date 1164008591 0 # Node ID 1fee8f7da8cf267a0a2442b3311c10a2c4c83f58 # Parent bc5d69739d5e8286677c8081a25544eb6a0dc7b1 (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. diff -r bc5d69739d5e -r 1fee8f7da8cf lisp/term/x-win.el --- 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)