summaryrefslogtreecommitdiff
path: root/lisp/term
diff options
context:
space:
mode:
authorKenichi Handa <handa@m17n.org>2004-12-01 00:35:37 +0000
committerKenichi Handa <handa@m17n.org>2004-12-01 00:35:37 +0000
commiteb5ad2428beab8d29e38af323238c53126cd6332 (patch)
tree84db2940e602583f660e0dc5353131c4e38a3874 /lisp/term
parent30a2ee1b335d65cc288fa9e766268527f403f21a (diff)
downloademacs-eb5ad2428beab8d29e38af323238c53126cd6332.tar.gz
(x-last-selected-text-cut-encoded): New variable.
(x-select-text): Don't treat eight-bit-control/graphic chars specially. Store the encoded text in the X cut buffer. (x-cut-buffer-or-selection-value): Compare the X cut buffer text with x-last-selected-text-cut-encoded.
Diffstat (limited to 'lisp/term')
-rw-r--r--lisp/term/x-win.el45
1 files changed, 25 insertions, 20 deletions
diff --git a/lisp/term/x-win.el b/lisp/term/x-win.el
index 61602d1f355..17ec969e45b 100644
--- a/lisp/term/x-win.el
+++ b/lisp/term/x-win.el
@@ -2096,7 +2096,11 @@ pasted text.")
"The value of the PRIMARY X selection last time we selected or
pasted text.")
(defvar x-last-selected-text-cut nil
- "The value of the X cut buffer last time we selected or pasted text.")
+ "The value of the X cut buffer last time we selected or pasted text.
+The actual text stored in the X cut buffer is what encoded from this value.")
+(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.")
;;; It is said that overlarge strings are slow to put into the cut buffer.
;;; Note this value is overridden below.
@@ -2119,19 +2123,14 @@ This is in addition to, but in preference to, the primary selection."
;; It becomes slow, and if really big it causes errors.
(cond ((>= (length text) x-cut-buffer-max)
(x-set-cut-buffer "" push)
- (setq x-last-selected-text-cut ""))
- ;; Don't store a multibyte string that contains
- ;; eight-bit-control/graphic chars because they can't be
- ;; restored correctly by x-get-cut-buffer.
- ((and (multibyte-string-p text)
- (let ((charsets (find-charset-string text)))
- (or (memq 'eight-bit-control charsets)
- (memq 'eight-bit-graphic charsets))))
- (x-set-cut-buffer "" push)
- (setq x-last-selected-text-cut ""))
+ (setq x-last-selected-text-cut ""
+ x-last-selected-text-cut-encoded ""))
(t
- (x-set-cut-buffer text push)
- (setq x-last-selected-text-cut text)))
+ (setq x-last-selected-text-cut text
+ x-last-selected-text-cut-encoded
+ (encode-coding-string text (or locale-coding-system
+ 'iso-latin-1)))
+ (x-set-cut-buffer x-last-selected-text-cut-encoded push)))
(x-set-selection 'PRIMARY text)
(setq x-last-selected-text-primary text)
(when x-select-enable-clipboard
@@ -2291,17 +2290,23 @@ order until succeed.")
;; from what we remebered them to be last time we did a
;; cut/paste operation.
(setq cut-text
- (cond;; check primary selection
+ (cond;; check cut buffer
((or (not cut-text) (string= cut-text ""))
(setq x-last-selected-text-cut nil))
- ((eq cut-text x-last-selected-text-cut) nil)
- ((string= cut-text x-last-selected-text-cut)
+ ;; 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)
+ ((string= cut-text x-last-selected-text-cut-encoded)
+ ;; 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 cut-text))))
+ ;; (setq x-last-selected-text-cut cut-text)
+ nil)
+ (t
+ (setq x-last-selected-text-cut-encoded cut-text
+ x-last-selected-text-cut
+ (decode-coding-string cut-text (or locale-coding-system
+ 'iso-latin-1))))))
;; As we have done one selection, clear this now.
(setq next-selection-coding-system nil)