annotate lisp/select.el @ 56811:694cd033cd0d

Make "GNU GENERAL PUBLIC LICENSE" an appendix. Rearrange order of nodes and sections such that both "GNU GENERAL PUBLIC LICENSE" and "GNU Free Documentation License" appear at the end, as appropriate for appendices. (Acknowledgments): Use `@unnumberedsec'.
author Luc Teirlinck <teirllm@auburn.edu>
date Fri, 27 Aug 2004 23:36:38 +0000
parents 9cfffd03fbfa
children f1caf7fce72c c08afac24467
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38414
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 33914
diff changeset
1 ;;; select.el --- lisp portion of standard selection support
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2
45078
829beb9a6a4b Follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 42028
diff changeset
3 ;; Maintainer: FSF
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4 ;; Keywords: internal
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
5
56531
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
6 ;; Copyright (c) 1993, 1994, 2004 Free Software Foundation, Inc.
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
7 ;; Based partially on earlier release by Lucid.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
8
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
10
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
14 ;; any later version.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
15
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
19 ;; GNU General Public License for more details.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
20
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 11406
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 11406
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 11406
diff changeset
24 ;; Boston, MA 02111-1307, USA.
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
25
38414
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 33914
diff changeset
26 ;;; Commentary:
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 33914
diff changeset
27
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
28 ;;; Code:
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
29
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
30 ;; This is for temporary compatibility with pre-release Emacs 19.
2571
b65cf676a09b All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2234
diff changeset
31 (defalias 'x-selection 'x-get-selection)
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
32 (defun x-get-selection (&optional type data-type)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
33 "Return the value of an X Windows selection.
49514
10a6fd9d8e9c (x-set-cut-buffer): Fix docstring. Check type with `stringp' instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 46879
diff changeset
34 The argument TYPE (default `PRIMARY') says which selection,
19142
fffebc19fe53 (x-get-selection): Change default for data-type
Richard M. Stallman <rms@gnu.org>
parents: 17012
diff changeset
35 and the argument DATA-TYPE (default `STRING') says
33914
5876bde45199 (x-get-selection): Docstring dix.
Eli Zaretskii <eliz@gnu.org>
parents: 26423
diff changeset
36 how to convert the data.
5876bde45199 (x-get-selection): Docstring dix.
Eli Zaretskii <eliz@gnu.org>
parents: 26423
diff changeset
37
56531
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
38 TYPE may be any symbol \(but nil stands for `PRIMARY'). However,
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
39 only a few symbols are commonly used. They conventionally have
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
40 all upper-case names. The most often used ones, in addition to
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
41 `PRIMARY', are `SECONDARY' and `CLIPBOARD'.
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
42
33914
5876bde45199 (x-get-selection): Docstring dix.
Eli Zaretskii <eliz@gnu.org>
parents: 26423
diff changeset
43 DATA-TYPE is usually `STRING', but can also be one of the symbols
5876bde45199 (x-get-selection): Docstring dix.
Eli Zaretskii <eliz@gnu.org>
parents: 26423
diff changeset
44 in `selection-converter-alist', which see."
51600
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
45 (let ((data (x-get-selection-internal (or type 'PRIMARY)
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
46 (or data-type 'STRING)))
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
47 coding)
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
48 (when (and (stringp data)
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
49 (setq data-type (get-text-property 0 'foreign-selection data)))
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
50 (setq coding (if (eq data-type 'UTF8_STRING)
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
51 'utf-8
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
52 (or next-selection-coding-system
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
53 selection-coding-system))
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
54 data (decode-coding-string data coding))
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
55 (put-text-property 0 (length data) 'foreign-selection data-type data))
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
56 data))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
57
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
58 (defun x-get-clipboard ()
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
59 "Return text pasted to the clipboard."
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
60 (x-get-selection-internal 'CLIPBOARD 'STRING))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
61
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
62 (defun x-set-selection (type data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
63 "Make an X Windows selection of type TYPE and value DATA.
56531
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
64 The argument TYPE (nil means `PRIMARY') says which selection, and
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
65 DATA specifies the contents. TYPE must be a symbol. \(It can also
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
66 be a string, which stands for the symbol with that name, but this
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
67 is considered obsolete.) DATA may be a string, a symbol, an
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
68 integer (or a cons of two integers or list of two integers).
11406
dc4b96a8dc2e (x-set-selection): Fix up interactive defaults.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
69
dc4b96a8dc2e (x-set-selection): Fix up interactive defaults.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
70 The selection may also be a cons of two markers pointing to the same buffer,
49514
10a6fd9d8e9c (x-set-cut-buffer): Fix docstring. Check type with `stringp' instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 46879
diff changeset
71 or an overlay. In these cases, the selection is considered to be the text
11406
dc4b96a8dc2e (x-set-selection): Fix up interactive defaults.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
72 between the markers *at whatever time the selection is examined*.
dc4b96a8dc2e (x-set-selection): Fix up interactive defaults.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
73 Thus, editing done in the buffer after you specify the selection
dc4b96a8dc2e (x-set-selection): Fix up interactive defaults.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
74 can alter the effective value of the selection.
dc4b96a8dc2e (x-set-selection): Fix up interactive defaults.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
75
dc4b96a8dc2e (x-set-selection): Fix up interactive defaults.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
76 The data may also be a vector of valid non-vector selection values.
dc4b96a8dc2e (x-set-selection): Fix up interactive defaults.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
77
56531
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
78 The return value is DATA.
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
79
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
80 Interactively, this command sets the primary selection. Without
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
81 prefix argument, it reads the selection in the minibuffer. With
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
82 prefix argument, it uses the text of the region as the selection value ."
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
83 (interactive (if (not current-prefix-arg)
11406
dc4b96a8dc2e (x-set-selection): Fix up interactive defaults.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
84 (list 'PRIMARY (read-string "Set text for pasting: "))
26423
73efdb6af008 (x-set-selection): Call buffer-substring, not
Gerd Moellmann <gerd@gnu.org>
parents: 19142
diff changeset
85 (list 'PRIMARY (buffer-substring (region-beginning) (region-end)))))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
86 ;; This is for temporary compatibility with pre-release Emacs 19.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
87 (if (stringp type)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
88 (setq type (intern type)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
89 (or (x-valid-simple-selection-p data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
90 (and (vectorp data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
91 (let ((valid t)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
92 (i (1- (length data))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
93 (while (>= i 0)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
94 (or (x-valid-simple-selection-p (aref data i))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
95 (setq valid nil))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
96 (setq i (1- i)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
97 valid))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
98 (signal 'error (list "invalid selection" data)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
99 (or type (setq type 'PRIMARY))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
100 (if data
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
101 (x-own-selection-internal type data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
102 (x-disown-selection-internal type))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
103 data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
104
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
105 (defun x-valid-simple-selection-p (data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
106 (or (stringp data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
107 (symbolp data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
108 (integerp data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
109 (and (consp data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
110 (integerp (car data))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
111 (or (integerp (cdr data))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
112 (and (consp (cdr data))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
113 (integerp (car (cdr data))))))
6442
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
114 (overlayp data)
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
115 (and (consp data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
116 (markerp (car data))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
117 (markerp (cdr data))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
118 (marker-buffer (car data))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
119 (marker-buffer (cdr data))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
120 (eq (marker-buffer (car data))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
121 (marker-buffer (cdr data)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
122 (buffer-name (marker-buffer (car data)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
123 (buffer-name (marker-buffer (cdr data))))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
124
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
125 ;;; Cut Buffer support
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
126
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
127 (defun x-get-cut-buffer (&optional which-one)
41989
fd3c70d7a093 Follow doc-string conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 38414
diff changeset
128 "Returns the value of one of the 8 X server cut-buffers.
fd3c70d7a093 Follow doc-string conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 38414
diff changeset
129 Optional arg WHICH-ONE should be a number from 0 to 7, defaulting to 0.
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
130 Cut buffers are considered obsolete; you should use selections instead."
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
131 (x-get-cut-buffer-internal
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
132 (if which-one
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
133 (aref [CUT_BUFFER0 CUT_BUFFER1 CUT_BUFFER2 CUT_BUFFER3
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
134 CUT_BUFFER4 CUT_BUFFER5 CUT_BUFFER6 CUT_BUFFER7]
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
135 which-one)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
136 'CUT_BUFFER0)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
137
3035
5c758290ba6c (x-set-cut-buffer): New arg PUSH.
Richard M. Stallman <rms@gnu.org>
parents: 2879
diff changeset
138 (defun x-set-cut-buffer (string &optional push)
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
139 "Store STRING into the X server's primary cut buffer.
3035
5c758290ba6c (x-set-cut-buffer): New arg PUSH.
Richard M. Stallman <rms@gnu.org>
parents: 2879
diff changeset
140 If PUSH is non-nil, also rotate the cut buffers:
49514
10a6fd9d8e9c (x-set-cut-buffer): Fix docstring. Check type with `stringp' instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 46879
diff changeset
141 this means the previous value of the primary cut buffer moves to the second
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
142 cut buffer, and the second to the third, and so on (there are 8 buffers.)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
143 Cut buffers are considered obsolete; you should use selections instead."
49514
10a6fd9d8e9c (x-set-cut-buffer): Fix docstring. Check type with `stringp' instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 46879
diff changeset
144 (or (stringp string) (signal 'wrong-type-argument (list 'string string)))
3035
5c758290ba6c (x-set-cut-buffer): New arg PUSH.
Richard M. Stallman <rms@gnu.org>
parents: 2879
diff changeset
145 (if push
5c758290ba6c (x-set-cut-buffer): New arg PUSH.
Richard M. Stallman <rms@gnu.org>
parents: 2879
diff changeset
146 (x-rotate-cut-buffers-internal 1))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
147 (x-store-cut-buffer-internal 'CUT_BUFFER0 string))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
148
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
149
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
150 ;;; Functions to convert the selection into various other selection types.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
151 ;;; Every selection type that Emacs handles is implemented this way, except
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
152 ;;; for TIMESTAMP, which is a special case.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
153
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
154 (defun xselect-convert-to-string (selection type value)
46879
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
155 (let (str coding)
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
156 ;; Get the actual string from VALUE.
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
157 (cond ((stringp value)
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
158 (setq str value))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
159
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
160 ((overlayp value)
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
161 (save-excursion
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
162 (or (buffer-name (overlay-buffer value))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
163 (error "selection is in a killed buffer"))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
164 (set-buffer (overlay-buffer value))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
165 (setq str (buffer-substring (overlay-start value)
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
166 (overlay-end value)))))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
167 ((and (consp value)
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
168 (markerp (car value))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
169 (markerp (cdr value)))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
170 (or (eq (marker-buffer (car value)) (marker-buffer (cdr value)))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
171 (signal 'error
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
172 (list "markers must be in the same buffer"
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
173 (car value) (cdr value))))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
174 (save-excursion
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
175 (set-buffer (or (marker-buffer (car value))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
176 (error "selection is in a killed buffer")))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
177 (setq str (buffer-substring (car value) (cdr value))))))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
178
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
179 (when str
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
180 ;; If TYPE is nil, this is a local request, thus return STR as
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
181 ;; is. Otherwise, encode STR.
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
182 (if (not type)
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
183 str
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
184 (setq coding (or next-selection-coding-system selection-coding-system))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
185 (if coding
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
186 (setq coding (coding-system-base coding))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
187 (setq coding 'raw-text))
55331
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
188 (let ((inhibit-read-only t))
55344
f2f742f020fb (xselect-convert-to-string): Move comment to intended line.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55331
diff changeset
189 ;; Suppress producing escape sequences for compositions.
55331
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
190 (remove-text-properties 0 (length str) '(composition nil) str)
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
191 (cond
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
192 ((eq type 'TEXT)
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
193 (if (not (multibyte-string-p str))
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
194 ;; Don't have to encode unibyte string.
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
195 (setq type 'STRING)
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
196 ;; If STR contains only ASCII, Latin-1, and raw bytes,
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
197 ;; encode STR by iso-latin-1, and return it as type
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
198 ;; `STRING'. Otherwise, encode STR by CODING. In that
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
199 ;; case, the returing type depends on CODING.
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
200 (let ((charsets (find-charset-string str)))
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
201 (setq charsets
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
202 (delq 'ascii
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
203 (delq 'latin-iso8859-1
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
204 (delq 'eight-bit-control
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
205 (delq 'eight-bit-graphic charsets)))))
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
206 (if charsets
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
207 (setq str (encode-coding-string str coding)
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
208 type (if (memq coding '(compound-text
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
209 compound-text-with-extensions))
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
210 'COMPOUND_TEXT
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
211 'STRING))
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
212 (setq type 'STRING
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
213 str (encode-coding-string str 'iso-latin-1))))))
49514
10a6fd9d8e9c (x-set-cut-buffer): Fix docstring. Check type with `stringp' instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 46879
diff changeset
214
55331
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
215 ((eq type 'COMPOUND_TEXT)
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
216 (setq str (encode-coding-string str coding)))
46879
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
217
55331
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
218 ((eq type 'STRING)
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
219 (if (memq coding '(compound-text
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
220 compound-text-with-extensions))
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
221 (setq str (string-make-unibyte str))
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
222 (setq str (encode-coding-string str coding))))
46879
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
223
55331
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
224 ((eq type 'UTF8_STRING)
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
225 (setq str (encode-coding-string str 'utf-8)))
46879
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
226
55331
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
227 (t
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
228 (error "Unknow selection type: %S" type))
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
229 )))
46879
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
230
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
231 (setq next-selection-coding-system nil)
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
232 (cons type str))))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
233
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
235 (defun xselect-convert-to-length (selection type value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
236 (let ((value
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
237 (cond ((stringp value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
238 (length value))
6442
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
239 ((overlayp value)
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
240 (abs (- (overlay-end value) (overlay-start value))))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
241 ((and (consp value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
242 (markerp (car value))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
243 (markerp (cdr value)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
244 (or (eq (marker-buffer (car value))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
245 (marker-buffer (cdr value)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
246 (signal 'error
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
247 (list "markers must be in the same buffer"
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
248 (car value) (cdr value))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
249 (abs (- (car value) (cdr value)))))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
250 (if value ; force it to be in 32-bit format.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
251 (cons (ash value -16) (logand value 65535))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
252 nil)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
253
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
254 (defun xselect-convert-to-targets (selection type value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
255 ;; return a vector of atoms, but remove duplicates first.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
256 (let* ((all (cons 'TIMESTAMP (mapcar 'car selection-converter-alist)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
257 (rest all))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
258 (while rest
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
259 (cond ((memq (car rest) (cdr rest))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
260 (setcdr rest (delq (car rest) (cdr rest))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
261 ((eq (car (cdr rest)) '_EMACS_INTERNAL) ; shh, it's a secret
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
262 (setcdr rest (cdr (cdr rest))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
263 (t
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
264 (setq rest (cdr rest)))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
265 (apply 'vector all)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
266
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
267 (defun xselect-convert-to-delete (selection type value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
268 (x-disown-selection-internal selection)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
269 ;; A return value of nil means that we do not know how to do this conversion,
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
270 ;; and replies with an "error". A return value of NULL means that we have
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
271 ;; done the conversion (and any side-effects) but have no value to return.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
272 'NULL)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
273
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
274 (defun xselect-convert-to-filename (selection type value)
6442
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
275 (cond ((overlayp value)
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
276 (buffer-file-name (or (overlay-buffer value)
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
277 (error "selection is in a killed buffer"))))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
278 ((and (consp value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
279 (markerp (car value))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
280 (markerp (cdr value)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
281 (buffer-file-name (or (marker-buffer (car value))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
282 (error "selection is in a killed buffer"))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
283 (t nil)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
284
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
285 (defun xselect-convert-to-charpos (selection type value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
286 (let (a b tmp)
6442
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
287 (cond ((cond ((overlayp value)
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
288 (setq a (overlay-start value)
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
289 b (overlay-end value)))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
290 ((and (consp value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
291 (markerp (car value))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
292 (markerp (cdr value)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
293 (setq a (car value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
294 b (cdr value))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
295 (setq a (1- a) b (1- b)) ; zero-based
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
296 (if (< b a) (setq tmp a a b b tmp))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
297 (cons 'SPAN
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
298 (vector (cons (ash a -16) (logand a 65535))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
299 (cons (ash b -16) (logand b 65535))))))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
300
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
301 (defun xselect-convert-to-lineno (selection type value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
302 (let (a b buf tmp)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
303 (cond ((cond ((and (consp value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
304 (markerp (car value))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
305 (markerp (cdr value)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
306 (setq a (marker-position (car value))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
307 b (marker-position (cdr value))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
308 buf (marker-buffer (car value))))
6442
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
309 ((overlayp value)
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
310 (setq buf (overlay-buffer value)
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
311 a (overlay-start value)
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
312 b (overlay-end value)))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
313 )
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
314 (save-excursion
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
315 (set-buffer buf)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
316 (setq a (count-lines 1 a)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
317 b (count-lines 1 b)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
318 (if (< b a) (setq tmp a a b b tmp))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
319 (cons 'SPAN
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
320 (vector (cons (ash a -16) (logand a 65535))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
321 (cons (ash b -16) (logand b 65535))))))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
322
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
323 (defun xselect-convert-to-colno (selection type value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
324 (let (a b buf tmp)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
325 (cond ((cond ((and (consp value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
326 (markerp (car value))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
327 (markerp (cdr value)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
328 (setq a (car value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
329 b (cdr value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
330 buf (marker-buffer a)))
6442
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
331 ((overlayp value)
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
332 (setq buf (overlay-buffer value)
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
333 a (overlay-start value)
c81cfdffcf49 (x-valid-simple-selection-p): Accept an overlay.
Richard M. Stallman <rms@gnu.org>
parents: 3035
diff changeset
334 b (overlay-end value)))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
335 )
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
336 (save-excursion
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
337 (set-buffer buf)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
338 (goto-char a)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
339 (setq a (current-column))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
340 (goto-char b)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
341 (setq b (current-column)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
342 (if (< b a) (setq tmp a a b b tmp))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
343 (cons 'SPAN
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
344 (vector (cons (ash a -16) (logand a 65535))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
345 (cons (ash b -16) (logand b 65535))))))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
346
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
347 (defun xselect-convert-to-os (selection type size)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
348 (symbol-name system-type))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
349
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
350 (defun xselect-convert-to-host (selection type size)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
351 (system-name))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
352
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
353 (defun xselect-convert-to-user (selection type size)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
354 (user-full-name))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
355
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
356 (defun xselect-convert-to-class (selection type size)
42028
5f0fca416a2f (xselect-convert-to-class, xselect-convert-to-name): Documented.
Pavel Janík <Pavel@Janik.cz>
parents: 41989
diff changeset
357 "Convert selection to class.
5f0fca416a2f (xselect-convert-to-class, xselect-convert-to-name): Documented.
Pavel Janík <Pavel@Janik.cz>
parents: 41989
diff changeset
358 This function returns the string \"Emacs\"."
2879
48dd9b2361df * select.el (xselect-convert-to-class): Just return "Emacs" here.
Jim Blandy <jimb@redhat.com>
parents: 2571
diff changeset
359 "Emacs")
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
360
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
361 ;; We do not try to determine the name Emacs was invoked with,
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
362 ;; because it is not clean for a program's behavior to depend on that.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
363 (defun xselect-convert-to-name (selection type size)
42028
5f0fca416a2f (xselect-convert-to-class, xselect-convert-to-name): Documented.
Pavel Janík <Pavel@Janik.cz>
parents: 41989
diff changeset
364 "Convert selection to name.
5f0fca416a2f (xselect-convert-to-class, xselect-convert-to-name): Documented.
Pavel Janík <Pavel@Janik.cz>
parents: 41989
diff changeset
365 This function returns the string \"emacs\"."
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
366 "emacs")
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
367
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
368 (defun xselect-convert-to-integer (selection type value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
369 (and (integerp value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
370 (cons (ash value -16) (logand value 65535))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
371
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
372 (defun xselect-convert-to-atom (selection type value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
373 (and (symbolp value) value))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
374
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
375 (defun xselect-convert-to-identity (selection type value) ; used internally
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
376 (vector value))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
377
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
378 (setq selection-converter-alist
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
379 '((TEXT . xselect-convert-to-string)
17012
f1932b36f01d (x-get-selection): Set default data-type of selection
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
380 (COMPOUND_TEXT . xselect-convert-to-string)
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
381 (STRING . xselect-convert-to-string)
46879
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
382 (UTF8_STRING . xselect-convert-to-string)
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
383 (TARGETS . xselect-convert-to-targets)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
384 (LENGTH . xselect-convert-to-length)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
385 (DELETE . xselect-convert-to-delete)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
386 (FILE_NAME . xselect-convert-to-filename)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
387 (CHARACTER_POSITION . xselect-convert-to-charpos)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
388 (LINE_NUMBER . xselect-convert-to-lineno)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
389 (COLUMN_NUMBER . xselect-convert-to-colno)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
390 (OWNER_OS . xselect-convert-to-os)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
391 (HOST_NAME . xselect-convert-to-host)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
392 (USER . xselect-convert-to-user)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
393 (CLASS . xselect-convert-to-class)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
394 (NAME . xselect-convert-to-name)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
395 (ATOM . xselect-convert-to-atom)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
396 (INTEGER . xselect-convert-to-integer)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
397 (_EMACS_INTERNAL . xselect-convert-to-identity)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
398 ))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
399
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
400 (provide 'select)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
401
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51600
diff changeset
402 ;;; arch-tag: bb634f97-8a3b-4b0a-b940-f6e09982328c
38414
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 33914
diff changeset
403 ;;; select.el ends here