annotate lisp/select.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents c403c2e0a620
children 600f564fdc23
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
99918
d6617fc229b7 (x-set-cut-buffer): Fix signal arguments.
Glenn Morris <rgm@gnu.org>
parents: 99298
diff changeset
6 ;; Copyright (C) 1993, 1994, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 104135
diff changeset
7 ;; 2008, 2009, 2010 Free Software Foundation, Inc.
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
8 ;; Based partially on earlier release by Lucid.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
9
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
11
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94205
diff changeset
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94205
diff changeset
14 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94205
diff changeset
15 ;; (at your option) any later version.
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
16
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
17 ;; 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
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
20 ;; GNU General Public License for more details.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
21
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94205
diff changeset
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
24
38414
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 33914
diff changeset
25 ;;; Commentary:
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 33914
diff changeset
26
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
27 ;;; Code:
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
28
91674
31216f583b8a (selection-coding-system): Make it a defcustom, and add the properties
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
29 (defcustom selection-coding-system nil
91103
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
30 "Coding system for communicating with other X clients.
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
31
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
32 When sending text via selection and clipboard, if the target
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
33 data-type matches with the type of this coding system, it is used
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
34 for encoding the text. Otherwise (including the case that this
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
35 variable is nil), a proper coding system is used as below:
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
36
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
37 data-type coding system
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
38 --------- -------------
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
39 UTF8_STRING utf-8
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
40 COMPOUND_TEXT compound-text-with-extensions
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
41 STRING iso-latin-1
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
42 C_STRING no-conversion
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
43
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
44 When receiving text, if this coding system is non-nil, it is used
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
45 for decoding regardless of the data-type. If this is nil, a
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
46 proper coding system is used according to the data-type as above.
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
47
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
48 See also the documentation of the variable `x-select-request-type' how
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
49 to control which data-type to request for receiving text.
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
50
91674
31216f583b8a (selection-coding-system): Make it a defcustom, and add the properties
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
51 The default value is nil."
31216f583b8a (selection-coding-system): Make it a defcustom, and add the properties
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
52 :type 'coding-system
31216f583b8a (selection-coding-system): Make it a defcustom, and add the properties
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
53 :group 'mule
31216f583b8a (selection-coding-system): Make it a defcustom, and add the properties
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
54 ;; Default was compound-text-with-extensions in 22.x (pre-unicode).
31216f583b8a (selection-coding-system): Make it a defcustom, and add the properties
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
55 :version "23.1"
31216f583b8a (selection-coding-system): Make it a defcustom, and add the properties
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
56 :set (lambda (symbol value)
31216f583b8a (selection-coding-system): Make it a defcustom, and add the properties
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
57 (set-selection-coding-system value)
31216f583b8a (selection-coding-system): Make it a defcustom, and add the properties
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
58 (set symbol value)))
91103
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
59
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
60 (defvar next-selection-coding-system nil
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
61 "Coding system for the next communication with other X clients.
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
62 Usually, `selection-coding-system' is used for communicating with
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
63 other X clients. But, if this variable is set, it is used for
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
64 the next communication only. After the communication, this
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
65 variable is set to nil.")
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
66
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95458
diff changeset
67 (declare-function x-get-selection-internal "xselect.c"
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95458
diff changeset
68 (selection-symbol target-type &optional time-stamp))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95458
diff changeset
69
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
70 ;; 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
71 (defalias 'x-selection 'x-get-selection)
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
72 (defun x-get-selection (&optional type data-type)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
73 "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
74 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
75 and the argument DATA-TYPE (default `STRING') says
33914
5876bde45199 (x-get-selection): Docstring dix.
Eli Zaretskii <eliz@gnu.org>
parents: 26423
diff changeset
76 how to convert the data.
5876bde45199 (x-get-selection): Docstring dix.
Eli Zaretskii <eliz@gnu.org>
parents: 26423
diff changeset
77
56531
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
78 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
79 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
80 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
81 `PRIMARY', are `SECONDARY' and `CLIPBOARD'.
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
82
33914
5876bde45199 (x-get-selection): Docstring dix.
Eli Zaretskii <eliz@gnu.org>
parents: 26423
diff changeset
83 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
84 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
85 (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
86 (or data-type 'STRING)))
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
87 coding)
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
88 (when (and (stringp data)
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
89 (setq data-type (get-text-property 0 'foreign-selection data)))
91103
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
90 (setq coding (or next-selection-coding-system
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
91 selection-coding-system
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
92 (cond ((eq data-type 'UTF8_STRING)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
93 'utf-8)
95458
590265a51ebf (x-get-selection): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 94678
diff changeset
94 ((eq data-type 'COMPOUND_TEXT)
91103
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
95 'compound-text-with-extensions)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
96 ((eq data-type 'C_STRING)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
97 nil)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
98 ((eq data-type 'STRING)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
99 'iso-8859-1)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
100 (t
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
101 (error "Unknow selection data type: %S" type))))
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
102 data (if coding (decode-coding-string data coding)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
103 (string-to-multibyte data)))
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
104 (setq next-selection-coding-system nil)
51600
16b245345247 (x-get-selection): If the string returned by
Kenichi Handa <handa@m17n.org>
parents: 49514
diff changeset
105 (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
106 data))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
107
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
108 (defun x-get-clipboard ()
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
109 "Return text pasted to the clipboard."
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
110 (x-get-selection-internal 'CLIPBOARD 'STRING))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
111
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95458
diff changeset
112 (declare-function x-own-selection-internal "xselect.c"
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95458
diff changeset
113 (selection-name selection-value))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95458
diff changeset
114 (declare-function x-disown-selection-internal "xselect.c"
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95458
diff changeset
115 (selection &optional time))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95458
diff changeset
116
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
117 (defun x-set-selection (type data)
104135
decfa3e02ba0 * select.el (x-set-selection): Doc fix (Bug#4021).
Chong Yidong <cyd@stupidchicken.com>
parents: 104066
diff changeset
118 "Make an X selection of type TYPE and value DATA.
104066
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
119 The argument TYPE (nil means `PRIMARY') says which selection, and
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
120 DATA specifies the contents. TYPE must be a symbol. \(It can also
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
121 be a string, which stands for the symbol with that name, but this
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
122 is considered obsolete.) DATA may be a string, a symbol, an
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
123 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
124
104066
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
125 The selection may also be a cons of two markers pointing to the same buffer,
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
126 or an overlay. In these cases, the selection is considered to be the text
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
127 between the markers *at whatever time the selection is examined*.
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
128 Thus, editing done in the buffer after you specify the selection
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
129 can alter the effective value of the selection.
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
130
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
131 The data may also be a vector of valid non-vector selection values.
11406
dc4b96a8dc2e (x-set-selection): Fix up interactive defaults.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
132
56531
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
133 The return value is DATA.
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
134
9cfffd03fbfa (x-get-selection, x-set-selection): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents: 55344
diff changeset
135 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
136 prefix argument, it reads the selection in the minibuffer. With
104066
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
137 prefix argument, it uses the text of the region as the selection value.
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
138
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
139 Note that on MS-Windows, primary and secondary selections set by Emacs
b564cde0cb8b Fix Bug#3888:
Eli Zaretskii <eliz@gnu.org>
parents: 103893
diff changeset
140 are not available to other programs."
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
141 (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
142 (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
143 (list 'PRIMARY (buffer-substring (region-beginning) (region-end)))))
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
144 (if (stringp type) (setq type (intern type)))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
145 (or (x-valid-simple-selection-p data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
146 (and (vectorp data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
147 (let ((valid t)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
148 (i (1- (length data))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
149 (while (>= i 0)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
150 (or (x-valid-simple-selection-p (aref data i))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
151 (setq valid nil))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
152 (setq i (1- i)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
153 valid))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
154 (signal 'error (list "invalid selection" data)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
155 (or type (setq type 'PRIMARY))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
156 (if data
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
157 (x-own-selection-internal type data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
158 (x-disown-selection-internal type))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
159 data)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
160
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
161 (defun x-valid-simple-selection-p (data)
103893
c75839749e65 * simple.el (deactivate-mark): Optional argument FORCE.
Chong Yidong <cyd@stupidchicken.com>
parents: 103891
diff changeset
162 (or (bufferp data)
c75839749e65 * simple.el (deactivate-mark): Optional argument FORCE.
Chong Yidong <cyd@stupidchicken.com>
parents: 103891
diff changeset
163 (and (consp data)
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
164 (markerp (car data))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
165 (markerp (cdr data))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
166 (marker-buffer (car data))
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
167 (buffer-name (marker-buffer (car data)))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
168 (eq (marker-buffer (car data))
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
169 (marker-buffer (cdr data))))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
170 (stringp data)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
171 (and (overlayp data)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
172 (overlay-buffer data)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
173 (buffer-name (overlay-buffer data)))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
174 (symbolp data)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
175 (integerp data)))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
176
98175
dc54ec9cb542 Fix commenting convenition.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
177 ;; Functions to convert the selection into various other selection types.
dc54ec9cb542 Fix commenting convenition.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
178 ;; Every selection type that Emacs handles is implemented this way, except
dc54ec9cb542 Fix commenting convenition.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
179 ;; for TIMESTAMP, which is a special case.
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
180
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
181 (defun xselect--selection-bounds (value)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
182 "Return bounds of X selection value VALUE.
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
183 The return value is a list (BEG END BUF) if VALUE is a cons of
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
184 two markers or an overlay. Otherwise, it is nil."
103893
c75839749e65 * simple.el (deactivate-mark): Optional argument FORCE.
Chong Yidong <cyd@stupidchicken.com>
parents: 103891
diff changeset
185 (cond ((bufferp value)
c75839749e65 * simple.el (deactivate-mark): Optional argument FORCE.
Chong Yidong <cyd@stupidchicken.com>
parents: 103891
diff changeset
186 (with-current-buffer value
c75839749e65 * simple.el (deactivate-mark): Optional argument FORCE.
Chong Yidong <cyd@stupidchicken.com>
parents: 103891
diff changeset
187 (when (mark t)
c75839749e65 * simple.el (deactivate-mark): Optional argument FORCE.
Chong Yidong <cyd@stupidchicken.com>
parents: 103891
diff changeset
188 (list (mark t) (point) value))))
c75839749e65 * simple.el (deactivate-mark): Optional argument FORCE.
Chong Yidong <cyd@stupidchicken.com>
parents: 103891
diff changeset
189 ((and (consp value)
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
190 (markerp (car value))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
191 (markerp (cdr value)))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
192 (when (and (marker-buffer (car value))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
193 (buffer-name (marker-buffer (car value)))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
194 (eq (marker-buffer (car value))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
195 (marker-buffer (cdr value))))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
196 (list (marker-position (car value))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
197 (marker-position (cdr value))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
198 (marker-buffer (car value)))))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
199 ((overlayp value)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
200 (when (overlay-buffer value)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
201 (list (overlay-start value)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
202 (overlay-end value)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
203 (overlay-buffer value))))))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
204
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
205 (defun xselect--int-to-cons (n)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
206 (cons (ash n -16) (logand n 65535)))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
207
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
208 (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
209 (let (str coding)
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
210 ;; 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
211 (cond ((stringp value)
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
212 (setq str value))
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
213 ((setq value (xselect--selection-bounds value))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
214 (with-current-buffer (nth 2 value)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
215 (setq str (buffer-substring (nth 0 value)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
216 (nth 1 value))))))
46879
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
217 (when str
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
218 ;; 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
219 ;; is. Otherwise, encode STR.
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
220 (if (not type)
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
221 str
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
222 (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
223 (if coding
91103
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
224 (setq coding (coding-system-base coding)))
55331
0b7159e6ae8f (xselect-convert-to-string): Bind `inhibit-read-only' to t.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
225 (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
226 ;; 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
227 (remove-text-properties 0 (length str) '(composition nil) str)
94205
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
228 (if (eq type 'TEXT)
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
229 ;; TEXT is a polymorphic target. We must select the
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
230 ;; actual type from `UTF8_STRING', `COMPOUND_TEXT',
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
231 ;; `STRING', and `C_STRING'.
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
232 (if (not (multibyte-string-p str))
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
233 (setq type 'C_STRING)
91103
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
234 (let (non-latin-1 non-unicode eight-bit)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
235 (mapc #'(lambda (x)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
236 (if (>= x #x100)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
237 (if (< x #x110000)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
238 (setq non-latin-1 t)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
239 (if (< x #x3FFF80)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
240 (setq non-unicode t)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
241 (setq eight-bit t)))))
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
242 str)
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
243 (setq type (if non-unicode 'COMPOUND_TEXT
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
244 (if non-latin-1 'UTF8_STRING
94205
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
245 (if eight-bit 'C_STRING 'STRING)))))))
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
246 (cond
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
247 ((eq type 'UTF8_STRING)
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
248 (if (or (not coding)
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
249 (not (eq (coding-system-type coding) 'utf-8)))
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
250 (setq coding 'utf-8))
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
251 (setq str (encode-coding-string str coding)))
49514
10a6fd9d8e9c (x-set-cut-buffer): Fix docstring. Check type with `stringp' instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 46879
diff changeset
252
94205
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
253 ((eq type 'STRING)
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
254 (if (or (not coding)
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
255 (not (eq (coding-system-type coding) 'charset)))
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
256 (setq coding 'iso-8859-1))
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
257 (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
258
94205
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
259 ((eq type 'COMPOUND_TEXT)
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
260 (if (or (not coding)
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
261 (not (eq (coding-system-type coding) 'iso-2022)))
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
262 (setq coding 'compound-text-with-extensions))
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
263 (setq str (encode-coding-string str coding)))
91103
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
264
94205
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
265 ((eq type 'C_STRING)
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
266 (setq str (string-make-unibyte str)))
91103
5b63818330eb (selection-coding-system)
Kenichi Handa <handa@m17n.org>
parents: 91005
diff changeset
267
94205
e60145f49fea (xselect-convert-to-string): Send a C_STRING only if the polymorphic
Chong Yidong <cyd@stupidchicken.com>
parents: 93975
diff changeset
268 (t
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
269 (error "Unknown selection type: %S" type)))))
46879
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
270
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
271 (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
272 (cons type str))))
f7c325954eca (xselect-convert-to-string): If TYPE is non-nil,
Kenichi Handa <handa@m17n.org>
parents: 45647
diff changeset
273
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
274 (defun xselect-convert-to-length (selection type value)
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
275 (let ((len (cond ((stringp value)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
276 (length value))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
277 ((setq value (xselect--selection-bounds value))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
278 (abs (- (nth 0 value) (nth 1 value)))))))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
279 (if len
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
280 (xselect--int-to-cons len))))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
281
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
282 (defun xselect-convert-to-targets (selection type value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
283 ;; return a vector of atoms, but remove duplicates first.
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
284 (let* ((all (cons 'TIMESTAMP (mapcar 'car selection-converter-alist)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
285 (rest all))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
286 (while rest
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
287 (cond ((memq (car rest) (cdr rest))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
288 (setcdr rest (delq (car rest) (cdr rest))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
289 ((eq (car (cdr rest)) '_EMACS_INTERNAL) ; shh, it's a secret
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
290 (setcdr rest (cdr (cdr rest))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
291 (t
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
292 (setq rest (cdr rest)))))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
293 (apply 'vector all)))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
294
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
295 (defun xselect-convert-to-delete (selection type value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
296 (x-disown-selection-internal selection)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
297 ;; 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
298 ;; 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
299 ;; 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
300 'NULL)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
301
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
302 (defun xselect-convert-to-filename (selection type value)
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
303 (when (setq value (xselect--selection-bounds value))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
304 (buffer-file-name (nth 2 value))))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
305
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
306 (defun xselect-convert-to-charpos (selection type value)
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
307 (when (setq value (xselect--selection-bounds value))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
308 (let ((beg (1- (nth 0 value))) ; zero-based
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
309 (end (1- (nth 1 value))))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
310 (cons 'SPAN (vector (xselect--int-to-cons (min beg end))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
311 (xselect--int-to-cons (max beg end)))))))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
312
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
313 (defun xselect-convert-to-lineno (selection type value)
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
314 (when (setq value (xselect--selection-bounds value))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
315 (with-current-buffer (nth 2 value)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
316 (let ((beg (line-number-at-pos (nth 0 value)))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
317 (end (line-number-at-pos (nth 1 value))))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
318 (cons 'SPAN (vector (xselect--int-to-cons (min beg end))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
319 (xselect--int-to-cons (max beg end))))))))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
320
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
321 (defun xselect-convert-to-colno (selection type value)
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
322 (when (setq value (xselect--selection-bounds value))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
323 (with-current-buffer (nth 2 value)
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
324 (let ((beg (progn (goto-char (nth 0 value)) (current-column)))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
325 (end (progn (goto-char (nth 1 value)) (current-column))))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
326 (cons 'SPAN (vector (xselect--int-to-cons (min beg end))
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
327 (xselect--int-to-cons (max beg end))))))))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
328
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
329 (defun xselect-convert-to-os (selection type size)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
330 (symbol-name system-type))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
331
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
332 (defun xselect-convert-to-host (selection type size)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
333 (system-name))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
334
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
335 (defun xselect-convert-to-user (selection type size)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
336 (user-full-name))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
337
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
338 (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
339 "Convert selection to class.
5f0fca416a2f (xselect-convert-to-class, xselect-convert-to-name): Documented.
Pavel Janík <Pavel@Janik.cz>
parents: 41989
diff changeset
340 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
341 "Emacs")
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
342
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
343 ;; 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
344 ;; 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
345 (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
346 "Convert selection to name.
5f0fca416a2f (xselect-convert-to-class, xselect-convert-to-name): Documented.
Pavel Janík <Pavel@Janik.cz>
parents: 41989
diff changeset
347 This function returns the string \"emacs\"."
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
348 "emacs")
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-integer (selection type value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
351 (and (integerp value)
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
352 (xselect--int-to-cons value)))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
353
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
354 (defun xselect-convert-to-atom (selection type value)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
355 (and (symbolp value) value))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
356
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
357 (defun xselect-convert-to-identity (selection type value) ; used internally
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
358 (vector value))
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
359
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
360 (setq selection-converter-alist
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
361 '((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
362 (COMPOUND_TEXT . xselect-convert-to-string)
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
363 (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
364 (UTF8_STRING . xselect-convert-to-string)
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
365 (TARGETS . xselect-convert-to-targets)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
366 (LENGTH . xselect-convert-to-length)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
367 (DELETE . xselect-convert-to-delete)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
368 (FILE_NAME . xselect-convert-to-filename)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
369 (CHARACTER_POSITION . xselect-convert-to-charpos)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
370 (LINE_NUMBER . xselect-convert-to-lineno)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
371 (COLUMN_NUMBER . xselect-convert-to-colno)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
372 (OWNER_OS . xselect-convert-to-os)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
373 (HOST_NAME . xselect-convert-to-host)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
374 (USER . xselect-convert-to-user)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
375 (CLASS . xselect-convert-to-class)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
376 (NAME . xselect-convert-to-name)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
377 (ATOM . xselect-convert-to-atom)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
378 (INTEGER . xselect-convert-to-integer)
103891
77139c3e3747 * select.el (x-set-selection): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
379 (_EMACS_INTERNAL . xselect-convert-to-identity)))
2234
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
380
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
381 (provide 'select)
53ce64806d58 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
382
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91674
diff changeset
383 ;; 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
384 ;;; select.el ends here