mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-30 19:53:09 +00:00
Removed cut-buffer code.
* lisp/mouse-sel.el (mouse-sel-get-selection-function): x-cut-buffer-or-selection-value renamed to x-selection-value. (x-select-text): Optional push removed. * lisp/select.el (x-get-cut-buffer, x-set-cut-buffer): Remove. * lisp/simple.el (interprogram-cut-function): Remove mention of PUSH. * lisp/w32-fns.el (x-last-selected-text): x-cut-buffer-or-selection-value renamed to x-selection-value. (x-cut-buffer-max): Remove. (x-select-text): Remove argument PUSH, update documentation. * lisp/emacs-lisp/cl-macs.el (x-get-cutbuffer, x-get-cut-buffer): Remove. * lisp/term/ns-win.el (x-setup-function-keys, ns-last-selected-text): x-cut-buffer-or-selection-value renamed to x-selection-value (x-selection-value): Renamed from x-cut-buffer-or-selection-value. (x-select-text): Remove argument PUSH, update documentation. * lisp/term/pc-win.el (x-last-selected-text): x-cut-buffer-or-selection-value renamed to x-selection-value (x-select-text): Remove argument PUSH, update documentation. * lisp/term/x-win.el: Update documentation for x-last-selected-text-*. (x-last-selected-text-cut, x-last-selected-text-cut-encoded) (x-last-cut-buffer-coding, x-cut-buffer-max): Remove. (x-select-text): Remove argument PUSH, update documentation. Remove cut-buffer code. (x-selection-value-internal): Was previously x-selection-value. (x-selection-value): Renamed from x-cut-buffer-or-selection-value. Update documentation, remove cut-buffer code. Call x-selection-value-internal. (x-clipboard-yank): Call x-selection-value-internal. (x-initialize-window-system): Remove setting of x-cut-buffer-max. * src/xselect.c: Remove declaration of cut-buffer objects and functions. (symbol_to_x_atom): Remove mapping to XA_CUT_BUFFERn. (x_atom_to_symbol): Remove mapping to QCUT_BUFFERn. (Fx_get_cut_buffer_internal, Fx_store_cut_buffer_internal) (Fx_rotate_cut_buffers_internal): Remove. (syms_of_xselect): Remove defsubr of above. Remove intern of QCUT_BUFFERn. * src/xterm.c (x_term_init): Don't set dpyinfo->cut_buffers_initialized. * src/xterm.h (struct dpyinfo): Remove cut_buffers_initialized.
This commit is contained in:
parent
f68a93a990
commit
6d7cc56382
@ -1,3 +1,41 @@
|
||||
2010-09-02 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* term/x-win.el: Update documentation for x-last-selected-text-*.
|
||||
(x-last-selected-text-cut, x-last-selected-text-cut-encoded)
|
||||
(x-last-cut-buffer-coding, x-cut-buffer-max): Remove.
|
||||
(x-select-text): Remove argument PUSH, update documentation. Remove
|
||||
cut-buffer code.
|
||||
(x-selection-value-internal): Was previously x-selection-value.
|
||||
(x-selection-value): Renamed from x-cut-buffer-or-selection-value.
|
||||
Update documentation, remove cut-buffer code. Call
|
||||
x-selection-value-internal.
|
||||
(x-clipboard-yank): Call x-selection-value-internal.
|
||||
(x-initialize-window-system): Remove setting of x-cut-buffer-max.
|
||||
|
||||
* term/pc-win.el (x-last-selected-text):
|
||||
x-cut-buffer-or-selection-value renamed to x-selection-value
|
||||
(x-select-text): Remove argument PUSH, update documentation.
|
||||
|
||||
* term/ns-win.el (x-setup-function-keys, ns-last-selected-text):
|
||||
x-cut-buffer-or-selection-value renamed to x-selection-value
|
||||
(x-selection-value): Renamed from x-cut-buffer-or-selection-value.
|
||||
(x-select-text): Remove argument PUSH, update documentation.
|
||||
|
||||
* emacs-lisp/cl-macs.el (x-get-cutbuffer, x-get-cut-buffer): Remove.
|
||||
|
||||
* w32-fns.el (x-last-selected-text):
|
||||
x-cut-buffer-or-selection-value renamed to x-selection-value.
|
||||
(x-cut-buffer-max): Remove.
|
||||
(x-select-text): Remove argument PUSH, update documentation.
|
||||
|
||||
* simple.el (interprogram-cut-function): Remove mention of PUSH.
|
||||
|
||||
* select.el (x-get-cut-buffer, x-set-cut-buffer): Remove.
|
||||
|
||||
* mouse-sel.el (mouse-sel-get-selection-function):
|
||||
x-cut-buffer-or-selection-value renamed to x-selection-value.
|
||||
(x-select-text): Optional push removed.
|
||||
|
||||
2010-09-01 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* simple.el (blink-paren-function): Move from C to here.
|
||||
|
@ -1819,8 +1819,6 @@ Example:
|
||||
(defsetf window-start set-window-start)
|
||||
(defsetf window-width () (store)
|
||||
(list 'progn (list 'enlarge-window (list '- store '(window-width)) t) store))
|
||||
(defsetf x-get-cutbuffer x-store-cutbuffer t)
|
||||
(defsetf x-get-cut-buffer x-store-cut-buffer t) ; groan.
|
||||
(defsetf x-get-secondary-selection x-own-secondary-selection t)
|
||||
(defsetf x-get-selection x-own-selection t)
|
||||
|
||||
|
@ -98,7 +98,7 @@
|
||||
;;
|
||||
;; Selection/kill-ring interaction is retained
|
||||
;; interprogram-cut-function = x-select-text
|
||||
;; interprogram-paste-function = x-cut-buffer-or-selection-value
|
||||
;; interprogram-paste-function = x-selection-value
|
||||
;;
|
||||
;; What you lose is the ability to select some text in
|
||||
;; delete-selection-mode and yank over the top of it.
|
||||
@ -299,7 +299,7 @@ where SELECTION-NAME = name of selection
|
||||
SELECTION-THING-SYMBOL = name of variable where the current selection
|
||||
type for this selection should be stored.")
|
||||
|
||||
(declare-function x-select-text "term/x-win" (text &optional push))
|
||||
(declare-function x-select-text "term/x-win" (text))
|
||||
|
||||
(defvar mouse-sel-set-selection-function
|
||||
(if (eq mouse-sel-default-bindings 'interprogram-cut-paste)
|
||||
@ -317,12 +317,12 @@ Called with two arguments:
|
||||
This sets the selection as well as the cut buffer for the older applications,
|
||||
unless `mouse-sel-default-bindings' is `interprogram-cut-paste'.")
|
||||
|
||||
(declare-function x-cut-buffer-or-selection-value "term/x-win" ())
|
||||
(declare-function x-selection-value "term/x-win" ())
|
||||
|
||||
(defvar mouse-sel-get-selection-function
|
||||
(lambda (selection)
|
||||
(if (eq selection 'PRIMARY)
|
||||
(or (x-cut-buffer-or-selection-value)
|
||||
(or (x-selection-value)
|
||||
(bound-and-true-p x-last-selected-text)
|
||||
(bound-and-true-p x-last-selected-text-primary))
|
||||
(x-get-selection selection)))
|
||||
|
@ -174,36 +174,6 @@ are not available to other programs."
|
||||
(symbolp data)
|
||||
(integerp data)))
|
||||
|
||||
;;; Cut Buffer support
|
||||
|
||||
(declare-function x-get-cut-buffer-internal "xselect.c")
|
||||
|
||||
(defun x-get-cut-buffer (&optional which-one)
|
||||
"Return the value of one of the 8 X server cut-buffers.
|
||||
Optional arg WHICH-ONE should be a number from 0 to 7, defaulting to 0.
|
||||
Cut buffers are considered obsolete; you should use selections instead."
|
||||
(x-get-cut-buffer-internal
|
||||
(if which-one
|
||||
(aref [CUT_BUFFER0 CUT_BUFFER1 CUT_BUFFER2 CUT_BUFFER3
|
||||
CUT_BUFFER4 CUT_BUFFER5 CUT_BUFFER6 CUT_BUFFER7]
|
||||
which-one)
|
||||
'CUT_BUFFER0)))
|
||||
|
||||
(declare-function x-rotate-cut-buffers-internal "xselect.c")
|
||||
(declare-function x-store-cut-buffer-internal "xselect.c")
|
||||
|
||||
(defun x-set-cut-buffer (string &optional push)
|
||||
"Store STRING into the X server's primary cut buffer.
|
||||
If PUSH is non-nil, also rotate the cut buffers:
|
||||
this means the previous value of the primary cut buffer moves to the second
|
||||
cut buffer, and the second to the third, and so on (there are 8 buffers.)
|
||||
Cut buffers are considered obsolete; you should use selections instead."
|
||||
(or (stringp string) (signal 'wrong-type-argument (list 'stringp string)))
|
||||
(if push
|
||||
(x-rotate-cut-buffers-internal 1))
|
||||
(x-store-cut-buffer-internal 'CUT_BUFFER0 string))
|
||||
|
||||
|
||||
;; Functions to convert the selection into various other selection types.
|
||||
;; Every selection type that Emacs handles is implemented this way, except
|
||||
;; for TIMESTAMP, which is a special case.
|
||||
|
@ -2929,11 +2929,8 @@ This variable holds a function that Emacs calls whenever text
|
||||
is put in the kill ring, to make the new kill available to other
|
||||
programs.
|
||||
|
||||
The function takes one or two arguments.
|
||||
The first argument, TEXT, is a string containing
|
||||
the text which should be made available.
|
||||
The second, optional, argument PUSH, has the same meaning as the
|
||||
similar argument to `x-set-cut-buffer', which see.")
|
||||
The function takes one argument, TEXT, which is a string containing
|
||||
the text which should be made available.")
|
||||
|
||||
(defvar interprogram-paste-function nil
|
||||
"Function to call to get text cut from other programs.
|
||||
|
@ -293,7 +293,7 @@ The properties returned may include `top', `left', `height', and `width'."
|
||||
(unless (terminal-parameter frame 'x-setup-function-keys)
|
||||
(with-selected-frame frame
|
||||
(setq interprogram-cut-function 'x-select-text
|
||||
interprogram-paste-function 'x-cut-buffer-or-selection-value)
|
||||
interprogram-paste-function 'x-selection-value)
|
||||
(let ((map (copy-keymap ns-alternatives-map)))
|
||||
(set-keymap-parent map (keymap-parent local-function-key-map))
|
||||
(set-keymap-parent local-function-key-map map))
|
||||
@ -1015,23 +1015,21 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
|
||||
|
||||
;; We keep track of the last text selected here, so we can check the
|
||||
;; current selection against it, and avoid passing back our own text
|
||||
;; from x-cut-buffer-or-selection-value.
|
||||
;; from x-selection-value.
|
||||
(defvar ns-last-selected-text nil)
|
||||
|
||||
(defun x-select-text (text &optional push)
|
||||
(defun x-select-text (text)
|
||||
"Select TEXT, a string, according to the window system.
|
||||
|
||||
On X, put TEXT in the primary X selection. For backward
|
||||
compatibility with older X applications, set the value of X cut
|
||||
buffer 0 as well, and if the optional argument PUSH is non-nil,
|
||||
rotate the cut buffers. If `x-select-enable-clipboard' is
|
||||
non-nil, copy the text to the X clipboard as well.
|
||||
On X, if `x-select-enable-clipboard' is non-nil, copy TEXT to the
|
||||
clipboard. If `x-select-enable-primary' is non-nil, put TEXT in
|
||||
the primary selection.
|
||||
|
||||
On Windows, make TEXT the current selection. If
|
||||
`x-select-enable-clipboard' is non-nil, copy the text to the
|
||||
clipboard as well. The argument PUSH is ignored.
|
||||
clipboard as well.
|
||||
|
||||
On Nextstep, put TEXT in the pasteboard; PUSH is ignored."
|
||||
On Nextstep, put TEXT in the pasteboard."
|
||||
;; Don't send the pasteboard too much text.
|
||||
;; It becomes slow, and if really big it causes errors.
|
||||
(ns-set-pasteboard text)
|
||||
@ -1040,7 +1038,7 @@ On Nextstep, put TEXT in the pasteboard; PUSH is ignored."
|
||||
;; Return the value of the current Nextstep selection. For
|
||||
;; compatibility with older Nextstep applications, this checks cut
|
||||
;; buffer 0 before retrieving the value of the primary selection.
|
||||
(defun x-cut-buffer-or-selection-value ()
|
||||
(defun x-selection-value ()
|
||||
(let (text)
|
||||
|
||||
;; Consult the selection, then the cut buffer. Treat empty strings
|
||||
|
@ -196,7 +196,7 @@ the operating system.")
|
||||
;
|
||||
;;; We keep track of the last text selected here, so we can check the
|
||||
;;; current selection against it, and avoid passing back our own text
|
||||
;;; from x-cut-buffer-or-selection-value.
|
||||
;;; from x-selection-value.
|
||||
(defvar x-last-selected-text nil)
|
||||
|
||||
(defcustom x-select-enable-clipboard t
|
||||
@ -209,20 +209,18 @@ set by Emacs is not accessible to other programs on Windows.\)"
|
||||
:type 'boolean
|
||||
:group 'killing)
|
||||
|
||||
(defun x-select-text (text &optional push)
|
||||
(defun x-select-text (text)
|
||||
"Select TEXT, a string, according to the window system.
|
||||
|
||||
On X, put TEXT in the primary X selection. For backward
|
||||
compatibility with older X applications, set the value of X cut
|
||||
buffer 0 as well, and if the optional argument PUSH is non-nil,
|
||||
rotate the cut buffers. If `x-select-enable-clipboard' is
|
||||
non-nil, copy the text to the X clipboard as well.
|
||||
On X, if `x-select-enable-clipboard' is non-nil, copy TEXT to the
|
||||
clipboard. If `x-select-enable-primary' is non-nil, put TEXT in
|
||||
the primary selection.
|
||||
|
||||
On Windows, make TEXT the current selection. If
|
||||
`x-select-enable-clipboard' is non-nil, copy the text to the
|
||||
clipboard as well. The argument PUSH is ignored.
|
||||
clipboard as well.
|
||||
|
||||
On Nextstep, put TEXT in the pasteboard; PUSH is ignored."
|
||||
On Nextstep, put TEXT in the pasteboard."
|
||||
(if x-select-enable-clipboard
|
||||
(w16-set-clipboard-data text))
|
||||
(setq x-last-selected-text text))
|
||||
|
@ -1196,28 +1196,15 @@ as returned by `x-server-vendor'."
|
||||
|
||||
;; We keep track of the last text selected here, so we can check the
|
||||
;; current selection against it, and avoid passing back our own text
|
||||
;; from x-cut-buffer-or-selection-value. We track all three
|
||||
;; from x-selection-value. We track both
|
||||
;; separately in case another X application only sets one of them
|
||||
;; (say the cut buffer) we aren't fooled by the PRIMARY or
|
||||
;; CLIPBOARD selection staying the same.
|
||||
;; we aren't fooled by the PRIMARY or CLIPBOARD selection staying the same.
|
||||
(defvar x-last-selected-text-clipboard nil
|
||||
"The value of the CLIPBOARD X selection last time we selected or
|
||||
pasted text.")
|
||||
(defvar x-last-selected-text-primary nil
|
||||
"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 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.")
|
||||
(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.
|
||||
It is said that overlarge strings are slow to put into the cut buffer.")
|
||||
|
||||
(defcustom x-select-enable-clipboard t
|
||||
"Non-nil means cutting and pasting uses the clipboard.
|
||||
@ -1232,29 +1219,22 @@ This is in addition to, but in preference to, the primary selection."
|
||||
:group 'killing
|
||||
:version "24.1")
|
||||
|
||||
(defun x-select-text (text &optional push)
|
||||
(defun x-select-text (text)
|
||||
"Select TEXT, a string, according to the window system.
|
||||
If `x-select-enable-clipboard' is non-nil, copy TEXT to the
|
||||
|
||||
On X, if `x-select-enable-clipboard' is non-nil, copy TEXT to the
|
||||
clipboard. If `x-select-enable-primary' is non-nil, put TEXT in
|
||||
the primary selection. For backward compatibility with older X
|
||||
applications, this function also sets the value of X cut buffer
|
||||
0, and, if the optional argument PUSH is non-nil, rotates the cut
|
||||
buffers."
|
||||
the primary selection.
|
||||
|
||||
On Windows, make TEXT the current selection. If
|
||||
`x-select-enable-clipboard' is non-nil, copy the text to the
|
||||
clipboard as well.
|
||||
|
||||
On Nextstep, put TEXT in the pasteboard."
|
||||
;; With multi-tty, this function may be called from a tty frame.
|
||||
(when (eq (framep (selected-frame)) 'x)
|
||||
;; Don't send the cut buffer too much text.
|
||||
;; 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 ""
|
||||
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))
|
||||
(x-set-cut-buffer x-last-selected-text-cut-encoded push)))
|
||||
(when x-select-enable-primary
|
||||
(x-set-selection 'PRIMARY text)
|
||||
(setq x-last-selected-text-primary text))
|
||||
@ -1282,7 +1262,7 @@ The value nil is the same as this list:
|
||||
;; The return value is already decoded. If x-get-selection causes an
|
||||
;; error, this function return nil.
|
||||
|
||||
(defun x-selection-value (type)
|
||||
(defun x-selection-value-internal (type)
|
||||
(let ((request-type (or x-select-request-type
|
||||
'(UTF8_STRING COMPOUND_TEXT STRING)))
|
||||
text)
|
||||
@ -1300,17 +1280,16 @@ The value nil is the same as this list:
|
||||
text))
|
||||
|
||||
;; Return the value of the current X selection.
|
||||
;; Consult the selection, and the cut buffer. Treat empty strings
|
||||
;; as if they were unset.
|
||||
;; Consult the selection. Treat empty strings as if they were unset.
|
||||
;; If this function is called twice and finds the same text,
|
||||
;; it returns nil the second time. This is so that a single
|
||||
;; selection won't be added to the kill ring over and over.
|
||||
(defun x-cut-buffer-or-selection-value ()
|
||||
(defun x-selection-value ()
|
||||
;; With multi-tty, this function may be called from a tty frame.
|
||||
(when (eq (framep (selected-frame)) 'x)
|
||||
(let (clip-text primary-text cut-text)
|
||||
(let (clip-text primary-text)
|
||||
(when x-select-enable-clipboard
|
||||
(setq clip-text (x-selection-value 'CLIPBOARD))
|
||||
(setq clip-text (x-selection-value-internal 'CLIPBOARD))
|
||||
(if (string= clip-text "") (setq clip-text nil))
|
||||
|
||||
;; Check the CLIPBOARD selection for 'newness', is it different
|
||||
@ -1329,7 +1308,7 @@ The value nil is the same as this list:
|
||||
(t (setq x-last-selected-text-clipboard clip-text)))))
|
||||
|
||||
(when x-select-enable-primary
|
||||
(setq primary-text (x-selection-value 'PRIMARY))
|
||||
(setq primary-text (x-selection-value-internal 'PRIMARY))
|
||||
;; Check the PRIMARY selection for 'newness', is it different
|
||||
;; from what we remebered them to be last time we did a
|
||||
;; cut/paste operation.
|
||||
@ -1346,69 +1325,35 @@ The value nil is the same as this list:
|
||||
(t
|
||||
(setq x-last-selected-text-primary primary-text)))))
|
||||
|
||||
(setq cut-text (x-get-cut-buffer 0))
|
||||
|
||||
;; Check the x cut buffer for 'newness', is it different
|
||||
;; from what we remebered them to be last time we did a
|
||||
;; cut/paste operation.
|
||||
(setq 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 next-coding))))))
|
||||
|
||||
;; As we have done one selection, clear this now.
|
||||
(setq next-selection-coding-system nil)
|
||||
|
||||
;; At this point we have recorded the current values for the
|
||||
;; selection from clipboard (if we are supposed to) primary,
|
||||
;; and cut buffer. So return the first one that has changed
|
||||
;; selection from clipboard (if we are supposed to) and primary.
|
||||
;; So return the first one that has changed
|
||||
;; (which is the first non-null one).
|
||||
;;
|
||||
;; NOTE: There will be cases where more than one of these has
|
||||
;; changed and the new values differ. This indicates that
|
||||
;; something like the following has happened since the last time
|
||||
;; we looked at the selections: Application X set all the
|
||||
;; selections, then Application Y set only one or two of them (say
|
||||
;; just the cut-buffer). In this case since we don't have
|
||||
;; selections, then Application Y set only one of them.
|
||||
;; In this case since we don't have
|
||||
;; timestamps there is no way to know what the 'correct' value to
|
||||
;; return is. The nice thing to do would be to tell the user we
|
||||
;; saw multiple possible selections and ask the user which was the
|
||||
;; one they wanted.
|
||||
;; This code is still a big improvement because now the user can
|
||||
;; futz with the current selection and get emacs to pay attention
|
||||
;; to the cut buffer again (previously as soon as clipboard or
|
||||
;; primary had been set the cut buffer would essentially never be
|
||||
;; checked again).
|
||||
(or clip-text primary-text cut-text)
|
||||
(or clip-text primary-text)
|
||||
)))
|
||||
|
||||
;; Arrange for the kill and yank functions to set and check the clipboard.
|
||||
(setq interprogram-cut-function 'x-select-text)
|
||||
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
|
||||
(setq interprogram-paste-function 'x-selection-value)
|
||||
|
||||
(defun x-clipboard-yank ()
|
||||
"Insert the clipboard contents, or the last stretch of killed text."
|
||||
(interactive "*")
|
||||
(let ((clipboard-text (x-selection-value 'CLIPBOARD))
|
||||
(let ((clipboard-text (x-selection-value-internal 'CLIPBOARD))
|
||||
(x-select-enable-clipboard t))
|
||||
(if (and clipboard-text (> (length clipboard-text) 0))
|
||||
(kill-new clipboard-text))
|
||||
@ -1465,9 +1410,6 @@ The value nil is the same as this list:
|
||||
;; are the initial display.
|
||||
(eq initial-window-system 'x))
|
||||
|
||||
(setq x-cut-buffer-max (min (- (/ (x-server-max-request-size) 2) 100)
|
||||
x-cut-buffer-max))
|
||||
|
||||
;; Create the default fontset.
|
||||
(create-default-fontset)
|
||||
|
||||
|
@ -429,28 +429,21 @@ bit output with no translation."
|
||||
|
||||
;; We keep track of the last text selected here, so we can check the
|
||||
;; current selection against it, and avoid passing back our own text
|
||||
;; from x-cut-buffer-or-selection-value.
|
||||
;; from x-selection-value.
|
||||
(defvar x-last-selected-text nil)
|
||||
|
||||
;; It is said that overlarge strings are slow to put into the cut buffer.
|
||||
;; Note this value is overridden below.
|
||||
(defvar x-cut-buffer-max 20000
|
||||
"Max number of characters to put in the cut buffer.")
|
||||
|
||||
(defun x-select-text (text &optional push)
|
||||
(defun x-select-text (text)
|
||||
"Select TEXT, a string, according to the window system.
|
||||
|
||||
On X, put TEXT in the primary X selection. For backward
|
||||
compatibility with older X applications, set the value of X cut
|
||||
buffer 0 as well, and if the optional argument PUSH is non-nil,
|
||||
rotate the cut buffers. If `x-select-enable-clipboard' is
|
||||
non-nil, copy the text to the X clipboard as well.
|
||||
On X, if `x-select-enable-clipboard' is non-nil, copy TEXT to the
|
||||
clipboard. If `x-select-enable-primary' is non-nil, put TEXT in
|
||||
the primary selection.
|
||||
|
||||
On Windows, make TEXT the current selection. If
|
||||
`x-select-enable-clipboard' is non-nil, copy the text to the
|
||||
clipboard as well. The argument PUSH is ignored.
|
||||
clipboard as well.
|
||||
|
||||
On Nextstep, put TEXT in the pasteboard; PUSH is ignored."
|
||||
On Nextstep, put TEXT in the pasteboard."
|
||||
(if x-select-enable-clipboard
|
||||
(w32-set-clipboard-data text))
|
||||
(setq x-last-selected-text text))
|
||||
@ -476,7 +469,7 @@ they were unset."
|
||||
(t
|
||||
(setq x-last-selected-text text))))))
|
||||
|
||||
(defalias 'x-cut-buffer-or-selection-value 'x-get-selection-value)
|
||||
(defalias 'x-selection-value 'x-get-selection-value)
|
||||
|
||||
;; Arrange for the kill and yank functions to set and check the clipboard.
|
||||
(setq interprogram-cut-function 'x-select-text)
|
||||
|
@ -1,3 +1,17 @@
|
||||
2010-09-02 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* xterm.h (struct dpyinfo): Remove cut_buffers_initialized.
|
||||
|
||||
* xterm.c (x_term_init): Don't set dpyinfo->cut_buffers_initialized.
|
||||
|
||||
* xselect.c: Remove declaration of cut-buffer objects and functions.
|
||||
(symbol_to_x_atom): Remove mapping to XA_CUT_BUFFERn.
|
||||
(x_atom_to_symbol): Remove mapping to QCUT_BUFFERn.
|
||||
(Fx_get_cut_buffer_internal, Fx_store_cut_buffer_internal)
|
||||
(Fx_rotate_cut_buffers_internal): Remove.
|
||||
(syms_of_xselect): Remove defsubr of above.
|
||||
Remove intern of QCUT_BUFFERn.
|
||||
|
||||
2010-09-01 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* cmds.c (Vblink_paren_function): Remove.
|
||||
|
243
src/xselect.c
243
src/xselect.c
@ -83,8 +83,6 @@ static void lisp_data_to_selection_data (Display *, Lisp_Object,
|
||||
unsigned char **, Atom *,
|
||||
unsigned *, int *, int *);
|
||||
static Lisp_Object clean_local_selection_data (Lisp_Object);
|
||||
static void initialize_cut_buffers (Display *, Window);
|
||||
|
||||
|
||||
/* Printing traces to stderr. */
|
||||
|
||||
@ -105,8 +103,6 @@ static void initialize_cut_buffers (Display *, Window);
|
||||
#endif
|
||||
|
||||
|
||||
#define CUT_BUFFER_SUPPORT
|
||||
|
||||
Lisp_Object QSECONDARY, QSTRING, QINTEGER, QCLIPBOARD, QTIMESTAMP,
|
||||
QTEXT, QDELETE, QMULTIPLE, QINCR, QEMACS_TMP, QTARGETS, QATOM, QNULL,
|
||||
QATOM_PAIR;
|
||||
@ -116,11 +112,6 @@ Lisp_Object QUTF8_STRING; /* This is a type of selection. */
|
||||
|
||||
Lisp_Object Qcompound_text_with_extensions;
|
||||
|
||||
#ifdef CUT_BUFFER_SUPPORT
|
||||
Lisp_Object QCUT_BUFFER0, QCUT_BUFFER1, QCUT_BUFFER2, QCUT_BUFFER3,
|
||||
QCUT_BUFFER4, QCUT_BUFFER5, QCUT_BUFFER6, QCUT_BUFFER7;
|
||||
#endif
|
||||
|
||||
static Lisp_Object Vx_lost_selection_functions;
|
||||
static Lisp_Object Vx_sent_selection_functions;
|
||||
static Lisp_Object Qforeign_selection;
|
||||
@ -270,16 +261,6 @@ symbol_to_x_atom (struct x_display_info *dpyinfo, Display *display, Lisp_Object
|
||||
if (EQ (sym, QEMACS_TMP)) return dpyinfo->Xatom_EMACS_TMP;
|
||||
if (EQ (sym, QTARGETS)) return dpyinfo->Xatom_TARGETS;
|
||||
if (EQ (sym, QNULL)) return dpyinfo->Xatom_NULL;
|
||||
#ifdef CUT_BUFFER_SUPPORT
|
||||
if (EQ (sym, QCUT_BUFFER0)) return XA_CUT_BUFFER0;
|
||||
if (EQ (sym, QCUT_BUFFER1)) return XA_CUT_BUFFER1;
|
||||
if (EQ (sym, QCUT_BUFFER2)) return XA_CUT_BUFFER2;
|
||||
if (EQ (sym, QCUT_BUFFER3)) return XA_CUT_BUFFER3;
|
||||
if (EQ (sym, QCUT_BUFFER4)) return XA_CUT_BUFFER4;
|
||||
if (EQ (sym, QCUT_BUFFER5)) return XA_CUT_BUFFER5;
|
||||
if (EQ (sym, QCUT_BUFFER6)) return XA_CUT_BUFFER6;
|
||||
if (EQ (sym, QCUT_BUFFER7)) return XA_CUT_BUFFER7;
|
||||
#endif
|
||||
if (!SYMBOLP (sym)) abort ();
|
||||
|
||||
TRACE1 (" XInternAtom %s", (char *) SDATA (SYMBOL_NAME (sym)));
|
||||
@ -315,24 +296,6 @@ x_atom_to_symbol (Display *dpy, Atom atom)
|
||||
return QINTEGER;
|
||||
case XA_ATOM:
|
||||
return QATOM;
|
||||
#ifdef CUT_BUFFER_SUPPORT
|
||||
case XA_CUT_BUFFER0:
|
||||
return QCUT_BUFFER0;
|
||||
case XA_CUT_BUFFER1:
|
||||
return QCUT_BUFFER1;
|
||||
case XA_CUT_BUFFER2:
|
||||
return QCUT_BUFFER2;
|
||||
case XA_CUT_BUFFER3:
|
||||
return QCUT_BUFFER3;
|
||||
case XA_CUT_BUFFER4:
|
||||
return QCUT_BUFFER4;
|
||||
case XA_CUT_BUFFER5:
|
||||
return QCUT_BUFFER5;
|
||||
case XA_CUT_BUFFER6:
|
||||
return QCUT_BUFFER6;
|
||||
case XA_CUT_BUFFER7:
|
||||
return QCUT_BUFFER7;
|
||||
#endif
|
||||
}
|
||||
|
||||
dpyinfo = x_display_info_for_display (dpy);
|
||||
@ -2257,195 +2220,6 @@ and t is the same as `SECONDARY'. */)
|
||||
return (owner ? Qt : Qnil);
|
||||
}
|
||||
|
||||
|
||||
#ifdef CUT_BUFFER_SUPPORT
|
||||
|
||||
/* Ensure that all 8 cut buffers exist. ICCCM says we gotta... */
|
||||
static void
|
||||
initialize_cut_buffers (Display *display, Window window)
|
||||
{
|
||||
unsigned char *data = (unsigned char *) "";
|
||||
BLOCK_INPUT;
|
||||
#define FROB(atom) XChangeProperty (display, window, atom, XA_STRING, 8, \
|
||||
PropModeAppend, data, 0)
|
||||
FROB (XA_CUT_BUFFER0);
|
||||
FROB (XA_CUT_BUFFER1);
|
||||
FROB (XA_CUT_BUFFER2);
|
||||
FROB (XA_CUT_BUFFER3);
|
||||
FROB (XA_CUT_BUFFER4);
|
||||
FROB (XA_CUT_BUFFER5);
|
||||
FROB (XA_CUT_BUFFER6);
|
||||
FROB (XA_CUT_BUFFER7);
|
||||
#undef FROB
|
||||
UNBLOCK_INPUT;
|
||||
}
|
||||
|
||||
|
||||
#define CHECK_CUT_BUFFER(symbol) \
|
||||
do { CHECK_SYMBOL ((symbol)); \
|
||||
if (!EQ((symbol), QCUT_BUFFER0) && !EQ((symbol), QCUT_BUFFER1) \
|
||||
&& !EQ((symbol), QCUT_BUFFER2) && !EQ((symbol), QCUT_BUFFER3) \
|
||||
&& !EQ((symbol), QCUT_BUFFER4) && !EQ((symbol), QCUT_BUFFER5) \
|
||||
&& !EQ((symbol), QCUT_BUFFER6) && !EQ((symbol), QCUT_BUFFER7)) \
|
||||
signal_error ("Doesn't name a cut buffer", (symbol)); \
|
||||
} while (0)
|
||||
|
||||
DEFUN ("x-get-cut-buffer-internal", Fx_get_cut_buffer_internal,
|
||||
Sx_get_cut_buffer_internal, 1, 1, 0,
|
||||
doc: /* Returns the value of the named cut buffer (typically CUT_BUFFER0). */)
|
||||
(Lisp_Object buffer)
|
||||
{
|
||||
Window window;
|
||||
Atom buffer_atom;
|
||||
unsigned char *data = NULL;
|
||||
int bytes;
|
||||
Atom type;
|
||||
int format;
|
||||
unsigned long size;
|
||||
Lisp_Object ret;
|
||||
Display *display;
|
||||
struct x_display_info *dpyinfo;
|
||||
struct frame *sf = SELECTED_FRAME ();
|
||||
|
||||
check_x ();
|
||||
|
||||
if (! FRAME_X_P (sf))
|
||||
return Qnil;
|
||||
|
||||
display = FRAME_X_DISPLAY (sf);
|
||||
dpyinfo = FRAME_X_DISPLAY_INFO (sf);
|
||||
window = RootWindow (display, 0); /* Cut buffers are on screen 0 */
|
||||
CHECK_CUT_BUFFER (buffer);
|
||||
buffer_atom = symbol_to_x_atom (dpyinfo, display, buffer);
|
||||
|
||||
x_get_window_property (display, window, buffer_atom, &data, &bytes,
|
||||
&type, &format, &size, 0);
|
||||
|
||||
if (!data || !format)
|
||||
{
|
||||
xfree (data);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
if (format != 8 || type != XA_STRING)
|
||||
signal_error ("Cut buffer doesn't contain 8-bit data",
|
||||
list2 (x_atom_to_symbol (display, type),
|
||||
make_number (format)));
|
||||
|
||||
ret = (bytes ? make_unibyte_string ((char *) data, bytes) : Qnil);
|
||||
/* Use xfree, not XFree, because x_get_window_property
|
||||
calls xmalloc itself. */
|
||||
xfree (data);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
DEFUN ("x-store-cut-buffer-internal", Fx_store_cut_buffer_internal,
|
||||
Sx_store_cut_buffer_internal, 2, 2, 0,
|
||||
doc: /* Sets the value of the named cut buffer (typically CUT_BUFFER0). */)
|
||||
(Lisp_Object buffer, Lisp_Object string)
|
||||
{
|
||||
Window window;
|
||||
Atom buffer_atom;
|
||||
unsigned char *data;
|
||||
int bytes;
|
||||
int bytes_remaining;
|
||||
int max_bytes;
|
||||
Display *display;
|
||||
struct frame *sf = SELECTED_FRAME ();
|
||||
|
||||
check_x ();
|
||||
|
||||
if (! FRAME_X_P (sf))
|
||||
return Qnil;
|
||||
|
||||
display = FRAME_X_DISPLAY (sf);
|
||||
window = RootWindow (display, 0); /* Cut buffers are on screen 0 */
|
||||
|
||||
max_bytes = SELECTION_QUANTUM (display);
|
||||
if (max_bytes > MAX_SELECTION_QUANTUM)
|
||||
max_bytes = MAX_SELECTION_QUANTUM;
|
||||
|
||||
CHECK_CUT_BUFFER (buffer);
|
||||
CHECK_STRING (string);
|
||||
buffer_atom = symbol_to_x_atom (FRAME_X_DISPLAY_INFO (sf),
|
||||
display, buffer);
|
||||
data = (unsigned char *) SDATA (string);
|
||||
bytes = SBYTES (string);
|
||||
bytes_remaining = bytes;
|
||||
|
||||
if (! FRAME_X_DISPLAY_INFO (sf)->cut_buffers_initialized)
|
||||
{
|
||||
initialize_cut_buffers (display, window);
|
||||
FRAME_X_DISPLAY_INFO (sf)->cut_buffers_initialized = 1;
|
||||
}
|
||||
|
||||
BLOCK_INPUT;
|
||||
|
||||
/* Don't mess up with an empty value. */
|
||||
if (!bytes_remaining)
|
||||
XChangeProperty (display, window, buffer_atom, XA_STRING, 8,
|
||||
PropModeReplace, data, 0);
|
||||
|
||||
while (bytes_remaining)
|
||||
{
|
||||
int chunk = (bytes_remaining < max_bytes
|
||||
? bytes_remaining : max_bytes);
|
||||
XChangeProperty (display, window, buffer_atom, XA_STRING, 8,
|
||||
(bytes_remaining == bytes
|
||||
? PropModeReplace
|
||||
: PropModeAppend),
|
||||
data, chunk);
|
||||
data += chunk;
|
||||
bytes_remaining -= chunk;
|
||||
}
|
||||
UNBLOCK_INPUT;
|
||||
return string;
|
||||
}
|
||||
|
||||
|
||||
DEFUN ("x-rotate-cut-buffers-internal", Fx_rotate_cut_buffers_internal,
|
||||
Sx_rotate_cut_buffers_internal, 1, 1, 0,
|
||||
doc: /* Rotate the values of the cut buffers by N steps.
|
||||
Positive N means shift the values forward, negative means backward. */)
|
||||
(Lisp_Object n)
|
||||
{
|
||||
Window window;
|
||||
Atom props[8];
|
||||
Display *display;
|
||||
struct frame *sf = SELECTED_FRAME ();
|
||||
|
||||
check_x ();
|
||||
|
||||
if (! FRAME_X_P (sf))
|
||||
return Qnil;
|
||||
|
||||
display = FRAME_X_DISPLAY (sf);
|
||||
window = RootWindow (display, 0); /* Cut buffers are on screen 0 */
|
||||
CHECK_NUMBER (n);
|
||||
if (XINT (n) == 0)
|
||||
return n;
|
||||
if (! FRAME_X_DISPLAY_INFO (sf)->cut_buffers_initialized)
|
||||
{
|
||||
initialize_cut_buffers (display, window);
|
||||
FRAME_X_DISPLAY_INFO (sf)->cut_buffers_initialized = 1;
|
||||
}
|
||||
|
||||
props[0] = XA_CUT_BUFFER0;
|
||||
props[1] = XA_CUT_BUFFER1;
|
||||
props[2] = XA_CUT_BUFFER2;
|
||||
props[3] = XA_CUT_BUFFER3;
|
||||
props[4] = XA_CUT_BUFFER4;
|
||||
props[5] = XA_CUT_BUFFER5;
|
||||
props[6] = XA_CUT_BUFFER6;
|
||||
props[7] = XA_CUT_BUFFER7;
|
||||
BLOCK_INPUT;
|
||||
XRotateWindowProperties (display, window, props, 8, XINT (n));
|
||||
UNBLOCK_INPUT;
|
||||
return n;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/***********************************************************************
|
||||
Drag and drop support
|
||||
@ -2850,12 +2624,6 @@ syms_of_xselect (void)
|
||||
defsubr (&Sx_selection_owner_p);
|
||||
defsubr (&Sx_selection_exists_p);
|
||||
|
||||
#ifdef CUT_BUFFER_SUPPORT
|
||||
defsubr (&Sx_get_cut_buffer_internal);
|
||||
defsubr (&Sx_store_cut_buffer_internal);
|
||||
defsubr (&Sx_rotate_cut_buffers_internal);
|
||||
#endif
|
||||
|
||||
defsubr (&Sx_get_atom_name);
|
||||
defsubr (&Sx_send_client_message);
|
||||
defsubr (&Sx_register_dnd_atom);
|
||||
@ -2937,17 +2705,6 @@ A value of 0 means wait as long as necessary. This is initialized from the
|
||||
Qcompound_text_with_extensions = intern_c_string ("compound-text-with-extensions");
|
||||
staticpro (&Qcompound_text_with_extensions);
|
||||
|
||||
#ifdef CUT_BUFFER_SUPPORT
|
||||
QCUT_BUFFER0 = intern_c_string ("CUT_BUFFER0"); staticpro (&QCUT_BUFFER0);
|
||||
QCUT_BUFFER1 = intern_c_string ("CUT_BUFFER1"); staticpro (&QCUT_BUFFER1);
|
||||
QCUT_BUFFER2 = intern_c_string ("CUT_BUFFER2"); staticpro (&QCUT_BUFFER2);
|
||||
QCUT_BUFFER3 = intern_c_string ("CUT_BUFFER3"); staticpro (&QCUT_BUFFER3);
|
||||
QCUT_BUFFER4 = intern_c_string ("CUT_BUFFER4"); staticpro (&QCUT_BUFFER4);
|
||||
QCUT_BUFFER5 = intern_c_string ("CUT_BUFFER5"); staticpro (&QCUT_BUFFER5);
|
||||
QCUT_BUFFER6 = intern_c_string ("CUT_BUFFER6"); staticpro (&QCUT_BUFFER6);
|
||||
QCUT_BUFFER7 = intern_c_string ("CUT_BUFFER7"); staticpro (&QCUT_BUFFER7);
|
||||
#endif
|
||||
|
||||
Qforeign_selection = intern_c_string ("foreign-selection");
|
||||
staticpro (&Qforeign_selection);
|
||||
}
|
||||
|
@ -10124,8 +10124,6 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
|
||||
dpyinfo->Xatom_net_wm_name
|
||||
= XInternAtom (dpyinfo->display, "_NET_WM_NAME", False);
|
||||
|
||||
dpyinfo->cut_buffers_initialized = 0;
|
||||
|
||||
dpyinfo->x_dnd_atoms_size = 8;
|
||||
dpyinfo->x_dnd_atoms_length = 0;
|
||||
dpyinfo->x_dnd_atoms = xmalloc (sizeof (*dpyinfo->x_dnd_atoms)
|
||||
|
@ -299,8 +299,6 @@ struct x_display_info
|
||||
/* Atom used in XEmbed client messages. */
|
||||
Atom Xatom_XEMBED;
|
||||
|
||||
int cut_buffers_initialized; /* Whether we're sure they all exist */
|
||||
|
||||
/* The frame (if any) which has the X window that has keyboard focus.
|
||||
Zero if none. This is examined by Ffocus_frame in xfns.c. Note
|
||||
that a mere EnterNotify event can set this; if you need to know the
|
||||
|
Loading…
Reference in New Issue
Block a user