Commit eb5ad242 authored by Kenichi Handa's avatar Kenichi Handa
Browse files

(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.
parent 30a2ee1b
......@@ -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 ""))
(x-set-cut-buffer text push)
(setq x-last-selected-text-cut text)))
(setq x-last-selected-text-cut text
(encode-coding-string text (or locale-coding-system
(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)
(setq x-last-selected-text-cut cut-text))))
;; (setq x-last-selected-text-cut cut-text)
(setq x-last-selected-text-cut-encoded cut-text
(decode-coding-string cut-text (or locale-coding-system
;; As we have done one selection, clear this now.
(setq next-selection-coding-system nil)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment