1
0
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:
Jan Djärv 2010-09-02 11:47:08 +02:00
parent f68a93a990
commit 6d7cc56382
13 changed files with 107 additions and 406 deletions

View File

@ -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.

View File

@ -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)

View File

@ -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)))

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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))

View File

@ -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)

View File

@ -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)

View File

@ -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.

View File

@ -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);
}

View File

@ -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)

View File

@ -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