annotate lisp/mouse-copy.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 1d1d5d9bd884
children 376148b31b5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17517
8f952e921136 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 16321
diff changeset
1 ;;; mouse-copy.el --- one-click text copy and move
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
74442
b2e5081b9320 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 73756
diff changeset
3 ;; Copyright (C) 1996, 2001, 2002, 2003, 2004, 2005,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105994
diff changeset
4 ;; 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Author: John Heidemann <johnh@ISI.EDU>
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Keywords: mouse
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94101
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; 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: 94101
diff changeset
13 ;; 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: 94101
diff changeset
14 ;; (at your option) any later version.
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; 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: 94101
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;;; Commentary:
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
94101
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
26 ;; What is ``mouse-copy.el''?
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
27 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
28 ;; It provides one-click text copy and move. Rather than the
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
29 ;; standard stroke-out-a-region (down-mouse-1, up-mouse-1) followed
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
30 ;; by a yank (down-mouse-2, up-mouse-2 or C-y), you can now stroke
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
31 ;; out a region and have it automatically pasted at the current
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
32 ;; point. You can also move text just as easily. Although the
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
33 ;; difference may not sound like much, it does make mousing text
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
34 ;; around a lot easier, IMHO.
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
35 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
36 ;; If you like mouse-copy, you should also check out mouse-drag
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
37 ;; for ``one-click scrolling''.
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
38 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
39 ;; To use mouse-copy, place the following in your .emacs file:
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
40 ;; (require 'mouse-copy)
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
41 ;; (global-set-key [M-down-mouse-1] 'mouse-drag-secondary-pasting)
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
42 ;; (global-set-key [M-S-down-mouse-1] 'mouse-drag-secondary-moving)
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
43 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
44 ;; (These definitions override the old binding of M-mouse-1 to
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
45 ;; mouse-drag-secondary. I find I don't use that command much so its
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
46 ;; loss is not important, and it can be made up with a M-mouse-1
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
47 ;; followed by a M-mouse-3. I personally reserve M-mouse bindings
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
48 ;; for my window manager and bind everything to C-mouse.)
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
49 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
50 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
51 ;; History and related work:
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
52 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
53 ;; One-click copying and moving was inspired by lemacs-19.8.
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
54 ;; Throw-scrolling was inspired by MacPaint's ``hand'' and by Tk's
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
55 ;; mouse-2 scrolling. The package mouse-scroll.el by Tom Wurgler
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
56 ;; <twurgler@goodyear.com> is similar to mouse-drag-throw, but
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
57 ;; doesn't pass clicks through.
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
58 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
59 ;; These functions have been tested in emacs version 19.30,
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
60 ;; and this package has run in the past on 19.25-19.29.
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
61 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
62 ;; Originally mouse-copy was part of a larger package.
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
63 ;; As of 11 July 96 the scrolling functions were split out
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
64 ;; in preparation for incorporation into (the future) emacs-19.32.
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
65 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
66 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
67 ;; Known Bugs:
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
68 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
69 ;; - Highlighting is sub-optimal under 19.29 and XFree86-3.1.1
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
70 ;; (see \\[mouse-copy-work-around-drag-bug] for details).
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
71 ;; - mouse-drag-secondary-pasting and mouse-drag-secondary-moving
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
72 ;; require X11R5 (or better) and so fail under older versions
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
73 ;; of Open Windows (like that present in Solaris/x86 2.1).
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
74 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
75 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
76 ;; Future plans:
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
77 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
78 ;; I read about the chording features of Plan-9's Acme environment at
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
79 ;; <http://www.zip.com.au/~cs/app/wily/auug.html>. I'd like
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
80 ;; to incorporate some of these ideas into mouse-copy. The only
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
81 ;; lose is that this is not the current Emacs Way Of Doing Things, so
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
82 ;; there would be a learning curve for existing emacs users.
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
83 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
84 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
85 ;; Thanks:
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
86 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
87 ;; Thanks to Kai Grossjohann
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
88 ;; <grossjoh@dusty.informatik.uni-dortmund.de> for reporting bugs, to
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
89 ;; Tom Wurgler <twurgler@goodyear.com> for reporting bugs and
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
90 ;; suggesting fixes, and to Joel Graber <jgraber@ti.com> for
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
91 ;; prompting me to do drag-scrolling and for an initial
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
92 ;; implementation of horizontal drag-scrolling.
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
93 ;;
26ae5706998a Fix comment style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
94 ;; -johnh, 11-Jul-96
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 ;;; Code:
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 ;;
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 ;; move/paste code
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 ;;
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 (defvar mouse-copy-last-paste-start nil
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 "Internal to `mouse-drag-secondary-pasting'.")
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 (defvar mouse-copy-last-paste-end nil
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 "Internal to `mouse-drag-secondary-pasting'.")
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 (defvar mouse-copy-have-drag-bug nil
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 "Set to enable mouse-copy-work-around-drag-bug.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 See `mouse-copy-work-around-drag-bug' for details.")
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 (defun mouse-copy-work-around-drag-bug (start-event end-event)
73756
7b9a60623646 (mouse-copy-work-around-drag-bug): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
112 "Code to work around a bug in post-19.29 Emacs: it drops mouse-drag events.
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 The problem occurs under XFree86-3.1.1 (X11R6pl11) but not under X11R5,
73756
7b9a60623646 (mouse-copy-work-around-drag-bug): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
114 and under post-19.29 but not early versions of Emacs.
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 19.29 and 19.30 seems to drop mouse drag events
47122
3629687a948d (mouse-copy-work-around-drag-bug): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 18027
diff changeset
117 sometimes. (Reproducible under XFree86-3.1.1 (X11R6pl11) and
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 XFree86-3.1.2 under Linux 1.2.x. Doesn't occur under X11R5 and SunOS
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 4.1.1.)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 To see if you have the problem:
47122
3629687a948d (mouse-copy-work-around-drag-bug): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 18027
diff changeset
122 Disable this routine (with (setq mouse-copy-have-drag-bug nil)).
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 Click and drag for a while.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 If highlighting stops tracking, you have the bug.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 If you have the bug (or the real fix :-), please let me know."
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ;; To work-around, call mouse-set-secondary with a fake
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 ;; drag event to set the overlay,
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 ;; the load the x-selection.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 (save-excursion
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 (let*
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 ((start-posn (event-start start-event))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 (end-posn (event-end end-event))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 (end-buffer (window-buffer (posn-window end-posn)))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 ;; First, figure out the region (left as point/mark).
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 (range (progn
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 (set-buffer end-buffer)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 (mouse-start-end (posn-point start-posn)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 (posn-point end-posn)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 (1- (event-click-count start-event)))))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (beg (car range))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (end (car (cdr range))))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 ;; Second, set the overlay.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 (if mouse-secondary-overlay
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 (move-overlay mouse-secondary-overlay beg end)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 (setq mouse-secondary-overlay (make-overlay beg (posn-point end))))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 (overlay-put mouse-secondary-overlay 'face 'secondary-selection)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 ;; Third, set the selection.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 ;; (setq me-beg beg me-end end me-range range) ; for debugging
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 (set-buffer end-buffer)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 (x-set-selection 'SECONDARY (buffer-substring beg end)))))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47122
diff changeset
153
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 (defun mouse-drag-secondary-pasting (start-event)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 "Drag out a secondary selection, then paste it at the current point.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 To test this function, evaluate:
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 (global-set-key [M-down-mouse-1] 'mouse-drag-secondary-pasting)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 put the point at one place, then click and drag over some other region."
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 (interactive "e")
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 ;; Work-around: We see and react to each part of a multi-click event
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 ;; as it proceeds. For a triple-event, this means the double-event
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 ;; has already copied something that the triple-event will re-copy
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 ;; (a Bad Thing). We therefore undo the prior insertion if we're on
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 ;; a multiple event.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 (if (and mouse-copy-last-paste-start
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 (>= (event-click-count start-event) 2))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 (delete-region mouse-copy-last-paste-start
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 mouse-copy-last-paste-end))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 ;; HACK: We assume that mouse-drag-secondary returns nil if
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 ;; there's no secondary selection. This assumption holds as of
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 ;; emacs-19.22 but is not documented. It's not clear that there's
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 ;; any other way to get this information.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 (if (mouse-drag-secondary start-event)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 (progn
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 (if mouse-copy-have-drag-bug
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (mouse-copy-work-around-drag-bug start-event last-input-event))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 ;; Remember what we do so we can undo it, if necessary.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 (setq mouse-copy-last-paste-start (point))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 (insert (x-get-selection 'SECONDARY))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 (setq mouse-copy-last-paste-end (point)))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 (setq mouse-copy-last-paste-start nil)))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47122
diff changeset
184
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 (defun mouse-kill-preserving-secondary ()
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 "Kill the text in the secondary selection, but leave the selection set.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 This command is like \\[mouse-kill-secondary] (that is, the secondary
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 selection is deleted and placed in the kill ring), except that it also
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 leaves the secondary buffer active on exit.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 This command was derived from mouse-kill-secondary in emacs-19.28
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 by johnh@ficus.cs.ucla.edu."
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 (interactive)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 (let* ((keys (this-command-keys))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 (click (elt keys (1- (length keys)))))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 (or (eq (overlay-buffer mouse-secondary-overlay)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 (if (listp click)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 (window-buffer (posn-window (event-start click)))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 (current-buffer)))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 (error "Select or click on the buffer where the secondary selection is")))
105994
009383a57ce8 * x-dnd.el (x-dnd-maybe-call-test-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 100908
diff changeset
203 (with-current-buffer (overlay-buffer mouse-secondary-overlay)
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 (kill-region (overlay-start mouse-secondary-overlay)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 (overlay-end mouse-secondary-overlay)))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 ;; (delete-overlay mouse-secondary-overlay)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 ;; (x-set-selection 'SECONDARY nil)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 ;; (setq mouse-secondary-overlay nil)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 )
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (defun mouse-drag-secondary-moving (start-event)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 "Sweep out a secondary selection, then move it to the current point."
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 (interactive "e")
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 ;; HACK: We assume that mouse-drag-secondary returns nil if
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 ;; there's no secondary selection. This works as of emacs-19.22.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 ;; It's not clear that there's any other way to get this information.
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 (if (mouse-drag-secondary start-event)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 (progn
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 (mouse-kill-preserving-secondary)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 (insert (x-get-selection 'SECONDARY))))
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 )
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 (provide 'mouse-copy)
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
225 ;; arch-tag: 3d50293b-c089-4273-b412-4fc96a5f26ff
16321
af6d52a93a59 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 ;;; mouse-copy.el ends here