Mercurial > emacs
annotate lisp/mouse-sel.el @ 58195:c12b583f54b9
Fixed these problems:
** Clicking on partially visible lines fails
From: David Kastrup <dak@gnu.org>
Date: 27 Apr 2004 16:42:58 +0200
I had gnus display a mouse-highlighted line (a URL from browse-url)
partially at the bottom of its window. If I click with middle mouse
key on it, the window gets recentered while I hold the mouse key
pressed. If I release it, the window returns into its old position
(cursor in top row) and nothing happens, presumably because the click
was not registered on the line itself, but on the magically
recentered version.
That is a nuisance. Recentering of even partially visible click
targets should only happen if window-point moves there, but not at
the time of the click. From the moment I hold down a key until it
gets released, the displayed window portion should not change, with
the sole exception of scrolling when dragging at the edge of the
screen.
(progn
(setq line-spacing 4)
(dotimes (i (window-height))
(insert "\n" (int-to-string i)))
(forward-line -2)
(recenter -1))
** Can't drag modeline when mouse-autoselect-window is set
From: Klaus Zeitler <kzeitler@lucent.com>
Date: Mon, 11 Oct 2004 11:14:49 +0200
1. start emacs -q --no-site-file
2. set variable mouse-autoselect-window to t
3. split-window-vertically
now I can drag the modeline only upwards but not downwards
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Sat, 13 Nov 2004 01:40:36 +0000 |
parents | 1d855c5b0242 |
children | 680b3e8df7c5 e24e2e78deda |
rev | line source |
---|---|
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
30691
diff
changeset
|
1 ;;; mouse-sel.el --- multi-click selection support for Emacs 19 |
4934 | 2 |
57781
1d855c5b0242
(mouse-sel-mode): Adjust to new names for x-lost-selection-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57687
diff
changeset
|
3 ;; Copyright (C) 1993, 1994, 1995, 2001, 2002, 2004 |
1d855c5b0242
(mouse-sel-mode): Adjust to new names for x-lost-selection-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57687
diff
changeset
|
4 ;; Free Software Foundation, Inc. |
4934 | 5 |
46194
71bf019cb382
Change maintainer email address.
Richard M. Stallman <rms@gnu.org>
parents:
41608
diff
changeset
|
6 ;; Author: Mike Williams <mdub@bigfoot.com> |
4934 | 7 ;; Keywords: mouse |
8 | |
9 ;; This file is part of GNU Emacs. | |
10 | |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 ;; it under the terms of the GNU General Public License as published by | |
13 ;; the Free Software Foundation; either version 2, or (at your option) | |
14 ;; any later version. | |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
14169 | 21 ;; You should have received a copy of the GNU General Public License |
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
24 ;; Boston, MA 02111-1307, USA. | |
25 | |
7942 | 26 ;;; Commentary: |
14169 | 27 |
4934 | 28 ;; This module provides multi-click mouse support for GNU Emacs versions |
29 ;; 19.18 and later. I've tried to make it behave more like standard X | |
30 ;; clients (eg. xterm) than the default Emacs 19 mouse selection handlers. | |
31 ;; Basically: | |
32 ;; | |
33 ;; * Clicking mouse-1 starts (cancels) selection, dragging extends it. | |
34 ;; | |
35 ;; * Clicking or dragging mouse-3 extends the selection as well. | |
36 ;; | |
37 ;; * Double-clicking on word constituents selects words. | |
38 ;; Double-clicking on symbol constituents selects symbols. | |
39 ;; Double-clicking on quotes or parentheses selects sexps. | |
40 ;; Double-clicking on whitespace selects whitespace. | |
41 ;; Triple-clicking selects lines. | |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
42 ;; Quad-clicking selects paragraphs. |
4934 | 43 ;; |
44 ;; * Selecting sets the region & X primary selection, but does NOT affect | |
45 ;; the kill-ring. Because the mouse handlers set the primary selection | |
46 ;; directly, mouse-sel sets the variables interprogram-cut-function | |
47 ;; and interprogram-paste-function to nil. | |
48 ;; | |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
49 ;; * Clicking mouse-2 inserts the contents of the primary selection at |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
50 ;; the mouse position (or point, if mouse-yank-at-point is non-nil). |
4934 | 51 ;; |
5750
e1153522d5f1
(mouse-sel-version): Don't base version number on
Richard M. Stallman <rms@gnu.org>
parents:
4934
diff
changeset
|
52 ;; * Pressing mouse-2 while selecting or extending copies selection |
4934 | 53 ;; to the kill ring. Pressing mouse-1 or mouse-3 kills it. |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
54 ;; |
5750
e1153522d5f1
(mouse-sel-version): Don't base version number on
Richard M. Stallman <rms@gnu.org>
parents:
4934
diff
changeset
|
55 ;; * Double-clicking mouse-3 also kills selection. |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
56 ;; |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
57 ;; * M-mouse-1, M-mouse-2 & M-mouse-3 work similarly to mouse-1, mouse-2 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
58 ;; & mouse-3, but operate on the X secondary selection rather than the |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
59 ;; primary selection and region. |
4934 | 60 ;; |
5750
e1153522d5f1
(mouse-sel-version): Don't base version number on
Richard M. Stallman <rms@gnu.org>
parents:
4934
diff
changeset
|
61 ;; This module requires my thingatpt.el module, which it uses to find the |
e1153522d5f1
(mouse-sel-version): Don't base version number on
Richard M. Stallman <rms@gnu.org>
parents:
4934
diff
changeset
|
62 ;; bounds of words, lines, sexps, etc. |
4934 | 63 ;; |
64 ;; Thanks to KevinB@bartley.demon.co.uk for his useful input. | |
65 ;; | |
5750
e1153522d5f1
(mouse-sel-version): Don't base version number on
Richard M. Stallman <rms@gnu.org>
parents:
4934
diff
changeset
|
66 ;;--- Customisation ------------------------------------------------------- |
e1153522d5f1
(mouse-sel-version): Don't base version number on
Richard M. Stallman <rms@gnu.org>
parents:
4934
diff
changeset
|
67 ;; |
e1153522d5f1
(mouse-sel-version): Don't base version number on
Richard M. Stallman <rms@gnu.org>
parents:
4934
diff
changeset
|
68 ;; * You may want to use none or more of following: |
4934 | 69 ;; |
70 ;; ;; Enable region highlight | |
71 ;; (transient-mark-mode 1) | |
72 ;; | |
73 ;; ;; But only in the selected window | |
74 ;; (setq highlight-nonselected-windows nil) | |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
75 ;; |
4934 | 76 ;; ;; Enable pending-delete |
77 ;; (delete-selection-mode 1) | |
78 ;; | |
8766 | 79 ;; * You can control the way mouse-sel binds its keys by setting the value |
4934 | 80 ;; of mouse-sel-default-bindings before loading mouse-sel. |
81 ;; | |
82 ;; (a) If mouse-sel-default-bindings = t (the default) | |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
83 ;; |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
84 ;; Mouse sets and insert selection |
4934 | 85 ;; mouse-1 mouse-select |
86 ;; mouse-2 mouse-insert-selection | |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
87 ;; mouse-3 mouse-extend |
4934 | 88 ;; |
89 ;; Selection/kill-ring interaction is disabled | |
90 ;; interprogram-cut-function = nil | |
91 ;; interprogram-paste-function = nil | |
92 ;; | |
93 ;; (b) If mouse-sel-default-bindings = 'interprogram-cut-paste | |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
94 ;; |
4934 | 95 ;; Mouse sets selection, and pastes from kill-ring |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
96 ;; mouse-1 mouse-select |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
97 ;; mouse-2 mouse-insert-selection |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
98 ;; mouse-3 mouse-extend |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
99 ;; In this mode, mouse-insert-selection just calls mouse-yank-at-click. |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
100 ;; |
4934 | 101 ;; Selection/kill-ring interaction is retained |
102 ;; interprogram-cut-function = x-select-text | |
103 ;; interprogram-paste-function = x-cut-buffer-or-selection-value | |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
104 ;; |
4934 | 105 ;; What you lose is the ability to select some text in |
106 ;; delete-selection-mode and yank over the top of it. | |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
107 ;; |
4934 | 108 ;; (c) If mouse-sel-default-bindings = nil, no bindings are made. |
109 ;; | |
6228 | 110 ;; * By default, mouse-insert-selection (mouse-2) inserts the selection at |
111 ;; the mouse position. You can tell it to insert at point instead with: | |
112 ;; | |
7644
d50f6828a89d
(mouse-insert-selection): Test mouse-yank-at-point.
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
113 ;; (setq mouse-yank-at-point t) |
6228 | 114 ;; |
4934 | 115 ;; * I like to leave point at the end of the region nearest to where the |
116 ;; mouse was, even though this makes region highlighting mis-leading (the | |
117 ;; cursor makes it look like one extra character is selected). You can | |
118 ;; disable this behaviour with: | |
119 ;; | |
120 ;; (setq mouse-sel-leave-point-near-mouse nil) | |
121 ;; | |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
122 ;; * By default, mouse-select cycles the click count after 4 clicks. That |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
123 ;; is, clicking mouse-1 five times has the same effect as clicking it |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
124 ;; once, clicking six times has the same effect as clicking twice, etc. |
4934 | 125 ;; Disable this behaviour with: |
126 ;; | |
127 ;; (setq mouse-sel-cycle-clicks nil) | |
128 ;; | |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
129 ;; * The variables mouse-sel-{set,get}-selection-function control how the |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
130 ;; selection is handled. Under X Windows, these variables default so |
4934 | 131 ;; that the X primary selection is used. Under other windowing systems, |
132 ;; alternate functions are used, which simply store the selection value | |
133 ;; in a variable. | |
134 ;; | |
135 ;; * You can change the selection highlight face by altering the properties | |
136 ;; of mouse-drag-overlay, eg. | |
137 ;; | |
138 ;; (overlay-put mouse-drag-overlay 'face 'bold) | |
139 | |
14169 | 140 ;;; Code: |
4934 | 141 |
142 (require 'mouse) | |
143 (require 'thingatpt) | |
144 | |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
145 (eval-when-compile |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
146 (require 'cl)) |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
147 |
4934 | 148 ;;=== User Variables ====================================================== |
149 | |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
150 (defgroup mouse-sel nil |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
151 "Mouse selection enhancement." |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
152 :group 'mouse) |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
153 |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
154 (defcustom mouse-sel-leave-point-near-mouse t |
4934 | 155 "*Leave point near last mouse position. |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
156 If non-nil, \\[mouse-select] and \\[mouse-extend] will leave point at the end |
4934 | 157 of the region nearest to where the mouse last was. |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
158 If nil, point will always be placed at the beginning of the region." |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
159 :type 'boolean |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
160 :group 'mouse-sel) |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
161 |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
162 (defcustom mouse-sel-cycle-clicks t |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
163 "*If non-nil, \\[mouse-select] cycles the click-counts after 4 clicks." |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
164 :type 'boolean |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
165 :group 'mouse-sel) |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
166 |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
167 (defcustom mouse-sel-default-bindings t |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
168 "*Control mouse bindings." |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
169 :type '(choice (const :tag "none" nil) |
22593
2407b3d241a6
(mouse-sel-default-bindings): Use `other' widget
Andreas Schwab <schwab@suse.de>
parents:
18784
diff
changeset
|
170 (const :tag "cut and paste" interprogram-cut-paste) |
2407b3d241a6
(mouse-sel-default-bindings): Use `other' widget
Andreas Schwab <schwab@suse.de>
parents:
18784
diff
changeset
|
171 (other :tag "default bindings" t)) |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
172 :group 'mouse-sel) |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
173 |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
174 ;;=== Key bindings ======================================================== |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
175 |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
176 (defconst mouse-sel-bound-events |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
177 '(;; Primary selection bindings. |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
178 ;; |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
179 ;; Bind keys to `ignore' instead of unsetting them because modes may |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
180 ;; bind `down-mouse-1', for instance, without binding `mouse-1'. |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
181 ;; If we unset `mouse-1', this leads to a bitch_at_user when the |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
182 ;; mouse goes up because no matching binding is found for that. |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
183 ([mouse-1] . ignore) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
184 ([drag-mouse-1] . ignore) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
185 ([mouse-3] . ignore) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
186 ([down-mouse-1] . mouse-select) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
187 ([down-mouse-3] . mouse-extend) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
188 ([mouse-2] . mouse-insert-selection) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
189 ;; Secondary selection bindings. |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
190 ([M-mouse-1] . ignore) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
191 ([M-drag-mouse-1] . ignore) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
192 ([M-mouse-3] . ignore) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
193 ([M-down-mouse-1] . mouse-select-secondary) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
194 ([M-mouse-2] . mouse-insert-secondary) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
195 ([M-down-mouse-3] . mouse-extend-secondary)) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
196 "An alist of events that `mouse-sel-mode' binds.") |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
197 |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
198 ;;=== User Command ======================================================== |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
199 |
54257
b647c5859635
(mouse-sel-has-been-enabled): New var.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
200 (defvar mouse-sel-has-been-enabled nil |
b647c5859635
(mouse-sel-has-been-enabled): New var.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
201 "Non-nil if Mouse Sel mode has been enabled at least once.") |
b647c5859635
(mouse-sel-has-been-enabled): New var.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
202 |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
203 (defvar mouse-sel-original-bindings nil) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
204 (defvar mouse-sel-original-interprogram-cut-function nil) |
46406
72f4c4b10835
(mouse-sel-original-interprogram-paste-function): Defvar it.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46403
diff
changeset
|
205 (defvar mouse-sel-original-interprogram-paste-function nil) |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
206 |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
207 ;;;###autoload |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
208 (define-minor-mode mouse-sel-mode |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
209 "Toggle Mouse Sel mode. |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
210 With prefix ARG, turn Mouse Sel mode on if and only if ARG is positive. |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
211 Returns the new status of Mouse Sel mode (non-nil means on). |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
212 |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
213 When Mouse Sel mode is enabled, mouse selection is enhanced in various ways: |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
214 |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
215 - Clicking mouse-1 starts (cancels) selection, dragging extends it. |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
216 |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
217 - Clicking or dragging mouse-3 extends the selection as well. |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
218 |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
219 - Double-clicking on word constituents selects words. |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
220 Double-clicking on symbol constituents selects symbols. |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
221 Double-clicking on quotes or parentheses selects sexps. |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
222 Double-clicking on whitespace selects whitespace. |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
223 Triple-clicking selects lines. |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
224 Quad-clicking selects paragraphs. |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
225 |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
226 - Selecting sets the region & X primary selection, but does NOT affect |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
227 the `kill-ring', nor do the kill-ring functions change the X selection. |
30691 | 228 Because the mouse handlers set the primary selection directly, |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
229 mouse-sel sets the variables `interprogram-cut-function' and |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
230 `interprogram-paste-function' to nil. |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
231 |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
232 - Clicking mouse-2 inserts the contents of the primary selection at |
38897
f9cec1b1d7ba
Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38775
diff
changeset
|
233 the mouse position (or point, if `mouse-yank-at-point' is non-nil). |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
234 |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
235 - Pressing mouse-2 while selecting or extending copies selection |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
236 to the kill ring. Pressing mouse-1 or mouse-3 kills it. |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
237 |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
238 - Double-clicking mouse-3 also kills selection. |
4934 | 239 |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
240 - M-mouse-1, M-mouse-2 & M-mouse-3 work similarly to mouse-1, mouse-2 |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
241 & mouse-3, but operate on the X secondary selection rather than the |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
242 primary selection and region." |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
243 :global t |
57687
5a8b58d927d6
(mouse-sel-mode): Specify custom group.
Kai Großjohann <kgrossjo@eu.uu.net>
parents:
54258
diff
changeset
|
244 :group 'mouse-sel |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
245 (if mouse-sel-mode |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
246 (progn |
57781
1d855c5b0242
(mouse-sel-mode): Adjust to new names for x-lost-selection-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57687
diff
changeset
|
247 (add-hook 'x-lost-selection-functions 'mouse-sel-lost-selection-hook) |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
248 (when mouse-sel-default-bindings |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
249 ;; Save original bindings and replace them with new ones. |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
250 (setq mouse-sel-original-bindings |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
251 (mapcar (lambda (binding) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
252 (let ((event (car binding))) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
253 (prog1 (cons event (lookup-key global-map event)) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
254 (global-set-key event (cdr binding))))) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
255 mouse-sel-bound-events)) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
256 ;; Update interprogram functions. |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
257 (setq mouse-sel-original-interprogram-cut-function |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
258 interprogram-cut-function |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
259 mouse-sel-original-interprogram-paste-function |
54257
b647c5859635
(mouse-sel-has-been-enabled): New var.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
260 interprogram-paste-function |
b647c5859635
(mouse-sel-has-been-enabled): New var.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
261 mouse-sel-has-been-enabled t) |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
262 (unless (eq mouse-sel-default-bindings 'interprogram-cut-paste) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
263 (setq interprogram-cut-function nil |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
264 interprogram-paste-function nil)))) |
38443
643e08c68af9
(mouse-sel-bindings): Instead of unbinding
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
265 |
46359
186ccb97f37d
(mouse-sel-bound-events): New constant.
Mike Williams <mdub@bigfoot.com>
parents:
46194
diff
changeset
|
266 ;; Restore original bindings |
57781
1d855c5b0242
(mouse-sel-mode): Adjust to new names for x-lost-selection-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57687
diff
changeset
|
267 (remove-hook 'x-lost-selection-functions 'mouse-sel-lost-selection-hook) |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
268 (dolist (binding mouse-sel-original-bindings) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
269 (global-set-key (car binding) (cdr binding))) |
54258 | 270 ;; Restore the old values of these variables, |
271 ;; only if they were actually saved previously. | |
54257
b647c5859635
(mouse-sel-has-been-enabled): New var.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
272 (if mouse-sel-has-been-enabled |
b647c5859635
(mouse-sel-has-been-enabled): New var.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
273 (setq interprogram-cut-function |
b647c5859635
(mouse-sel-has-been-enabled): New var.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
274 mouse-sel-original-interprogram-cut-function |
b647c5859635
(mouse-sel-has-been-enabled): New var.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
275 interprogram-paste-function |
b647c5859635
(mouse-sel-has-been-enabled): New var.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
276 mouse-sel-original-interprogram-paste-function)))) |
4934 | 277 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
278 ;;=== Internal Variables/Constants ======================================== |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
279 |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
280 (defvar mouse-sel-primary-thing nil |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
281 "Type of PRIMARY selection in current buffer.") |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
282 (make-variable-buffer-local 'mouse-sel-primary-thing) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
283 |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
284 (defvar mouse-sel-secondary-thing nil |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
285 "Type of SECONDARY selection in current buffer.") |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
286 (make-variable-buffer-local 'mouse-sel-secondary-thing) |
4934 | 287 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
288 ;; Ensure that secondary overlay is defined |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
289 (unless (overlayp mouse-secondary-overlay) |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
290 (setq mouse-secondary-overlay (make-overlay 1 1)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
291 (overlay-put mouse-secondary-overlay 'face 'secondary-selection)) |
4934 | 292 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
293 (defconst mouse-sel-selection-alist |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
294 '((PRIMARY mouse-drag-overlay mouse-sel-primary-thing) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
295 (SECONDARY mouse-secondary-overlay mouse-sel-secondary-thing)) |
38897
f9cec1b1d7ba
Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38775
diff
changeset
|
296 "Alist associating selections with variables. |
f9cec1b1d7ba
Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38775
diff
changeset
|
297 Each element is of the form: |
4934 | 298 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
299 (SELECTION-NAME OVERLAY-SYMBOL SELECTION-THING-SYMBOL) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
300 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
301 where SELECTION-NAME = name of selection |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
302 OVERLAY-SYMBOL = name of variable containing overlay to use |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
303 SELECTION-THING-SYMBOL = name of variable where the current selection |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
304 type for this selection should be stored.") |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
305 |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
306 (defvar mouse-sel-set-selection-function |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
307 (if (eq mouse-sel-default-bindings 'interprogram-cut-paste) |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
308 'x-set-selection |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
309 (lambda (selection value) |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
310 (if (eq selection 'PRIMARY) |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
311 (x-select-text value) |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
312 (x-set-selection selection value)))) |
4934 | 313 "Function to call to set selection. |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
314 Called with two arguments: |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
315 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
316 SELECTION, the name of the selection concerned, and |
16471
51916440738f
(mouse-sel-set-selection-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
317 VALUE, the text to store. |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
318 |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
319 This sets the selection as well as the cut buffer for the older applications, |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
320 unless `mouse-sel-default-bindings' is `interprogram-cut-paste'.") |
4934 | 321 |
322 (defvar mouse-sel-get-selection-function | |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
323 (lambda (selection) |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
324 (if (eq selection 'PRIMARY) |
52047
0be309c83b20
(mouse-sel-get-selection-function):
John Paul Wallington <jpw@pobox.com>
parents:
49839
diff
changeset
|
325 (or (x-cut-buffer-or-selection-value) |
0be309c83b20
(mouse-sel-get-selection-function):
John Paul Wallington <jpw@pobox.com>
parents:
49839
diff
changeset
|
326 (bound-and-true-p x-last-selected-text) |
0be309c83b20
(mouse-sel-get-selection-function):
John Paul Wallington <jpw@pobox.com>
parents:
49839
diff
changeset
|
327 (bound-and-true-p x-last-selected-text-primary)) |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
328 (x-get-selection selection))) |
4934 | 329 "Function to call to get the selection. |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
330 Called with one argument: |
4934 | 331 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
332 SELECTION: the name of the selection concerned.") |
4934 | 333 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
334 ;;=== Support/access functions ============================================ |
4934 | 335 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
336 (defun mouse-sel-determine-selection-thing (nclicks) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
337 "Determine what `thing' `mouse-sel' should operate on. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
338 The first argument is NCLICKS, is the number of consecutive |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
339 mouse clicks at the same position. |
4934 | 340 |
341 Double-clicking on word constituents selects words. | |
342 Double-clicking on symbol constituents selects symbols. | |
343 Double-clicking on quotes or parentheses selects sexps. | |
344 Double-clicking on whitespace selects whitespace. | |
345 Triple-clicking selects lines. | |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
346 Quad-clicking selects paragraphs. |
4934 | 347 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
348 Feel free to re-define this function to support your own desired |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
349 multi-click semantics." |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
350 (let* ((next-char (char-after (point))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
351 (char-syntax (if next-char (char-syntax next-char)))) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
352 (if mouse-sel-cycle-clicks |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
353 (setq nclicks (1+ (% (1- nclicks) 4)))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
354 (cond |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
355 ((= nclicks 1) nil) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
356 ((= nclicks 3) 'line) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
357 ((>= nclicks 4) 'paragraph) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
358 ((memq char-syntax '(?\( ?\) ?\" ?')) 'sexp) |
49839
4398c7a41151
(mouse-sel-determine-selection-thing): Fix character constant.
Juanma Barranquero <lekktu@gmail.com>
parents:
46406
diff
changeset
|
359 ((memq next-char '(?\s ?\t ?\n)) 'whitespace) |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
360 ((eq char-syntax ?_) 'symbol) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
361 ((eq char-syntax ?w) 'word)))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
362 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
363 (defun mouse-sel-set-selection (selection value) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
364 "Set the specified SELECTION to VALUE." |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
365 (if mouse-sel-set-selection-function |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
366 (funcall mouse-sel-set-selection-function selection value) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
367 (put 'mouse-sel-internal-selection selection value))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
368 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
369 (defun mouse-sel-get-selection (selection) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
370 "Get the value of the specified SELECTION." |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
371 (if mouse-sel-get-selection-function |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
372 (funcall mouse-sel-get-selection-function selection) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
373 (get 'mouse-sel-internal-selection selection))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
374 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
375 (defun mouse-sel-selection-overlay (selection) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
376 "Return overlay corresponding to SELECTION." |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
377 (let ((symbol (nth 1 (assoc selection mouse-sel-selection-alist)))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
378 (or symbol (error "No overlay corresponding to %s selection" selection)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
379 (symbol-value symbol))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
380 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
381 (defun mouse-sel-selection-thing (selection) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
382 "Return overlay corresponding to SELECTION." |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
383 (let ((symbol (nth 2 (assoc selection mouse-sel-selection-alist)))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
384 (or symbol (error "No symbol corresponding to %s selection" selection)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
385 symbol)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
386 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
387 (defun mouse-sel-region-to-primary (orig-window) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
388 "Convert region to PRIMARY overlay and deactivate region. |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
389 Argument ORIG-WINDOW specifies the window the cursor was in when the |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
390 originating command was issued, and is used to determine whether the |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
391 region was visible or not." |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
392 (if transient-mark-mode |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
393 (let ((overlay (mouse-sel-selection-overlay 'PRIMARY))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
394 (cond |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
395 ((and mark-active |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
396 (or highlight-nonselected-windows |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
397 (eq orig-window (selected-window)))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
398 ;; Region was visible, so convert region to overlay |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
399 (move-overlay overlay (region-beginning) (region-end) |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
400 (current-buffer))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
401 ((eq orig-window (selected-window)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
402 ;; Point was visible, so set overlay at point |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
403 (move-overlay overlay (point) (point) (current-buffer))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
404 (t |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
405 ;; Nothing was visible, so remove overlay |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
406 (delete-overlay overlay))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
407 (setq mark-active nil)))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
408 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
409 (defun mouse-sel-primary-to-region (&optional direction) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
410 "Convert PRIMARY overlay to region. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
411 Optional argument DIRECTION specifies the mouse drag direction: a value of |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
412 1 indicates that the mouse was dragged left-to-right, otherwise it was |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
413 dragged right-to-left." |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
414 (let* ((overlay (mouse-sel-selection-overlay 'PRIMARY)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
415 (start (overlay-start overlay)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
416 (end (overlay-end overlay))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
417 (if (eq start end) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
418 (progn |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
419 (if start (goto-char start)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
420 (deactivate-mark)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
421 (if (and mouse-sel-leave-point-near-mouse (eq direction 1)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
422 (progn |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
423 (goto-char end) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
424 (push-mark start 'nomsg 'active)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
425 (goto-char start) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
426 (push-mark end 'nomsg 'active))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
427 (if transient-mark-mode (delete-overlay overlay)))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
428 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
429 (defmacro mouse-sel-eval-at-event-end (event &rest forms) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
430 "Evaluate forms at mouse position. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
431 Move to the end position of EVENT, execute FORMS, and restore original |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
432 point and window." |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
433 `(let ((posn (event-end ,event))) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
434 (if posn (mouse-minibuffer-check ,event)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
435 (if (and posn (not (windowp (posn-window posn)))) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
436 (error "Cursor not in text area of window")) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
437 (let (orig-window orig-point-marker) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
438 (setq orig-window (selected-window)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
439 (if posn (select-window (posn-window posn))) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
440 (setq orig-point-marker (point-marker)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
441 (if (and posn (numberp (posn-point posn))) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
442 (goto-char (posn-point posn))) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
443 (unwind-protect |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
444 (progn |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
445 ,@forms) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
446 (goto-char (marker-position orig-point-marker)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
447 (move-marker orig-point-marker nil) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
448 (select-window orig-window))))) |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
449 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
450 (put 'mouse-sel-eval-at-event-end 'lisp-indent-hook 1) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
451 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
452 ;;=== Select ============================================================== |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
453 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
454 (defun mouse-select (event) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
455 "Set region/selection using the mouse. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
456 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
457 Click sets point & mark to click position. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
458 Dragging extends region/selection. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
459 |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
460 Multi-clicking selects word/lines/paragraphs, as determined by |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
461 'mouse-sel-determine-selection-thing. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
462 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
463 Clicking mouse-2 while selecting copies selected text to the kill-ring. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
464 Clicking mouse-1 or mouse-3 kills the selected text. |
4934 | 465 |
466 This should be bound to a down-mouse event." | |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
467 (interactive "@e") |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
468 (let (direction) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
469 (unwind-protect |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
470 (setq direction (mouse-select-internal 'PRIMARY event)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
471 (mouse-sel-primary-to-region direction)))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
472 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
473 (defun mouse-select-secondary (event) |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
474 "Set secondary selection using the mouse. |
4934 | 475 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
476 Click sets the start of the secondary selection to click position. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
477 Dragging extends the secondary selection. |
4934 | 478 |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
479 Multi-clicking selects word/lines/paragraphs, as determined by |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
480 'mouse-sel-determine-selection-thing. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
481 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
482 Clicking mouse-2 while selecting copies selected text to the kill-ring. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
483 Clicking mouse-1 or mouse-3 kills the selected text. |
4934 | 484 |
485 This should be bound to a down-mouse event." | |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
486 (interactive "e") |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
487 (mouse-select-internal 'SECONDARY event)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
488 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
489 (defun mouse-select-internal (selection event) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
490 "Set SELECTION using the mouse." |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
491 (mouse-sel-eval-at-event-end event |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
492 (let ((thing-symbol (mouse-sel-selection-thing selection)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
493 (overlay (mouse-sel-selection-overlay selection))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
494 (set thing-symbol |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
495 (mouse-sel-determine-selection-thing (event-click-count event))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
496 (let ((object-bounds (bounds-of-thing-at-point |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
497 (symbol-value thing-symbol)))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
498 (if object-bounds |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
499 (progn |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
500 (move-overlay overlay |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
501 (car object-bounds) (cdr object-bounds) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
502 (current-buffer))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
503 (move-overlay overlay (point) (point) (current-buffer))))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
504 (mouse-extend-internal selection))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
505 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
506 ;;=== Extend ============================================================== |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
507 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
508 (defun mouse-extend (event) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
509 "Extend region/selection using the mouse." |
4934 | 510 (interactive "e") |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
511 (let ((orig-window (selected-window)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
512 direction) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
513 (select-window (posn-window (event-end event))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
514 (unwind-protect |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
515 (progn |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
516 (mouse-sel-region-to-primary orig-window) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
517 (setq direction (mouse-extend-internal 'PRIMARY event))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
518 (mouse-sel-primary-to-region direction)))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
519 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
520 (defun mouse-extend-secondary (event) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
521 "Extend secondary selection using the mouse." |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
522 (interactive "e") |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
523 (save-window-excursion |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
524 (mouse-extend-internal 'SECONDARY event))) |
4934 | 525 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
526 (defun mouse-extend-internal (selection &optional initial-event) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
527 "Extend specified SELECTION using the mouse. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
528 Track mouse-motion events, adjusting the SELECTION appropriately. |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
529 Optional argument INITIAL-EVENT specifies an initial down-mouse event to |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
530 process. |
4934 | 531 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
532 See documentation for mouse-select-internal for more details." |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
533 (mouse-sel-eval-at-event-end initial-event |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
534 (let ((orig-cursor-type |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
535 (cdr (assoc 'cursor-type (frame-parameters (selected-frame)))))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
536 (unwind-protect |
4934 | 537 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
538 (let* ((thing-symbol (mouse-sel-selection-thing selection)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
539 (overlay (mouse-sel-selection-overlay selection)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
540 (orig-window (selected-window)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
541 (orig-window-frame (window-frame orig-window)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
542 (top (nth 1 (window-edges orig-window))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
543 (bottom (nth 3 (window-edges orig-window))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
544 (mark-active nil) ; inhibit normal region highlight |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
545 (echo-keystrokes 0) ; don't echo mouse events |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
546 min max |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
547 direction |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
548 event) |
4934 | 549 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
550 ;; Get current bounds of overlay |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
551 (if (eq (overlay-buffer overlay) (current-buffer)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
552 (setq min (overlay-start overlay) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
553 max (overlay-end overlay)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
554 (setq min (point) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
555 max min) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
556 (set thing-symbol nil)) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
557 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
558 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
559 ;; Bar cursor |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
560 (if (fboundp 'modify-frame-parameters) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
561 (modify-frame-parameters (selected-frame) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
562 '((cursor-type . bar)))) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
563 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
564 ;; Handle dragging |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
565 (track-mouse |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
566 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
567 (while (if initial-event ; Use initial event |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
568 (prog1 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
569 (setq event initial-event) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
570 (setq initial-event nil)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
571 (setq event (read-event)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
572 (and (consp event) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
573 (memq (car event) '(mouse-movement switch-frame)))) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
574 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
575 (let ((selection-thing (symbol-value thing-symbol)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
576 (end (event-end event))) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
577 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
578 (cond |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
579 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
580 ;; Ignore any movement outside the frame |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
581 ((eq (car-safe event) 'switch-frame) nil) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
582 ((and (posn-window end) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
583 (not (eq (let ((posn-w (posn-window end))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
584 (if (windowp posn-w) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
585 (window-frame posn-w) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
586 posn-w)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
587 (window-frame orig-window)))) nil) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
588 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
589 ;; Different window, same frame |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
590 ((not (eq (posn-window end) orig-window)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
591 (let ((end-row (cdr (cdr (mouse-position))))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
592 (cond |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
593 ((and end-row (not (bobp)) (< end-row top)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
594 (mouse-scroll-subr orig-window (- end-row top) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
595 overlay max)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
596 ((and end-row (not (eobp)) (>= end-row bottom)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
597 (mouse-scroll-subr orig-window (1+ (- end-row bottom)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
598 overlay min)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
599 ))) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
600 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
601 ;; On the mode line |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
602 ((eq (posn-point end) 'mode-line) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
603 (mouse-scroll-subr orig-window 1 overlay min)) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
604 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
605 ;; In original window |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
606 (t (goto-char (posn-point end))) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
607 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
608 ) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
609 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
610 ;; Determine direction of drag |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
611 (cond |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
612 ((and (not direction) (not (eq min max))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
613 (setq direction (if (< (point) (/ (+ min max) 2)) -1 1))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
614 ((and (not (eq direction -1)) (<= (point) min)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
615 (setq direction -1)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
616 ((and (not (eq direction 1)) (>= (point) max)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
617 (setq direction 1))) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
618 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
619 (if (not selection-thing) nil |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
620 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
621 ;; If dragging forward, goal is next character |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
622 (if (and (eq direction 1) (not (eobp))) (forward-char 1)) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
623 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
624 ;; Move to start/end of selected thing |
12592
efb59db39da7
Don't (require 'backquote).
Richard M. Stallman <rms@gnu.org>
parents:
11490
diff
changeset
|
625 (let ((goal (point))) |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
626 (goto-char (if (eq 1 direction) min max)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
627 (condition-case nil |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
628 (progn |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
629 (while (> (* direction (- goal (point))) 0) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
630 (forward-thing selection-thing direction)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
631 (let ((end (point))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
632 (forward-thing selection-thing (- direction)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
633 (goto-char |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
634 (if (> (* direction (- goal (point))) 0) |
12592
efb59db39da7
Don't (require 'backquote).
Richard M. Stallman <rms@gnu.org>
parents:
11490
diff
changeset
|
635 end (point))))) |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
636 (error)))) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
637 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
638 ;; Move overlay |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
639 (move-overlay overlay |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
640 (if (eq 1 direction) min (point)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
641 (if (eq -1 direction) max (point)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
642 (current-buffer)) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
643 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
644 ))) ; end track-mouse |
4934 | 645 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
646 ;; Finish up after dragging |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
647 (let ((overlay-start (overlay-start overlay)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
648 (overlay-end (overlay-end overlay))) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
649 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
650 ;; Set selection |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
651 (if (not (eq overlay-start overlay-end)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
652 (mouse-sel-set-selection |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
653 selection |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
654 (buffer-substring overlay-start overlay-end))) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
655 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
656 ;; Handle copy/kill |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
657 (let (this-command) |
4934 | 658 (cond |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
659 ((eq (event-basic-type last-input-event) 'mouse-2) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
660 (copy-region-as-kill overlay-start overlay-end) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
661 (read-event) (read-event)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
662 ((and (memq (event-basic-type last-input-event) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
663 '(mouse-1 mouse-3)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
664 (memq 'down (event-modifiers last-input-event))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
665 (kill-region overlay-start overlay-end) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
666 (move-overlay overlay overlay-start overlay-start) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
667 (read-event) (read-event)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
668 ((and (eq (event-basic-type last-input-event) 'mouse-3) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
669 (memq 'double (event-modifiers last-input-event))) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
670 (kill-region overlay-start overlay-end) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
671 (move-overlay overlay overlay-start overlay-start))))) |
4934 | 672 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
673 direction) |
4934 | 674 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
675 ;; Restore cursor |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
676 (if (fboundp 'modify-frame-parameters) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
677 (modify-frame-parameters |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
678 (selected-frame) (list (cons 'cursor-type orig-cursor-type)))) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
679 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
680 )))) |
4934 | 681 |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
682 ;;=== Paste =============================================================== |
4934 | 683 |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
684 (defun mouse-insert-selection (event arg) |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
685 "Insert the contents of the PRIMARY selection at mouse click. |
7644
d50f6828a89d
(mouse-insert-selection): Test mouse-yank-at-point.
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
686 If `mouse-yank-at-point' is non-nil, insert at point instead." |
46403
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
687 (interactive "e\nP") |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
688 (if (eq mouse-sel-default-bindings 'interprogram-cut-paste) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
689 (mouse-yank-at-click event arg) |
3b394c7ff111
(mouse-sel-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46385
diff
changeset
|
690 (mouse-insert-selection-internal 'PRIMARY event))) |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
691 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
692 (defun mouse-insert-secondary (event) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
693 "Insert the contents of the SECONDARY selection at mouse click. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
694 If `mouse-yank-at-point' is non-nil, insert at point instead." |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
695 (interactive "e") |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
696 (mouse-insert-selection-internal 'SECONDARY event)) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
697 |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
698 (defun mouse-insert-selection-internal (selection event) |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
699 "Insert the contents of the named SELECTION at mouse click. |
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
700 If `mouse-yank-at-point' is non-nil, insert at point instead." |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38897
diff
changeset
|
701 (unless mouse-yank-at-point |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
702 (mouse-set-point event)) |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
703 (when mouse-sel-get-selection-function |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
704 (push-mark (point) 'nomsg) |
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
705 (insert (or (funcall mouse-sel-get-selection-function selection) "")))) |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
706 |
12592
efb59db39da7
Don't (require 'backquote).
Richard M. Stallman <rms@gnu.org>
parents:
11490
diff
changeset
|
707 ;;=== Handle loss of selections =========================================== |
4934 | 708 |
12592
efb59db39da7
Don't (require 'backquote).
Richard M. Stallman <rms@gnu.org>
parents:
11490
diff
changeset
|
709 (defun mouse-sel-lost-selection-hook (selection) |
efb59db39da7
Don't (require 'backquote).
Richard M. Stallman <rms@gnu.org>
parents:
11490
diff
changeset
|
710 "Remove the overlay for a lost selection." |
13556
8c181dcb4fdd
(mouse-sel-lost-selection-hook): Undo prev change.
Richard M. Stallman <rms@gnu.org>
parents:
13547
diff
changeset
|
711 (let ((overlay (mouse-sel-selection-overlay selection))) |
12592
efb59db39da7
Don't (require 'backquote).
Richard M. Stallman <rms@gnu.org>
parents:
11490
diff
changeset
|
712 (delete-overlay overlay))) |
4934 | 713 |
18784
5e56fda13c2f
Customise. Don't install bindings on file load; use a fn.
Simon Marshall <simon@gnu.org>
parents:
17671
diff
changeset
|
714 (provide 'mouse-sel) |
11490
01f5b6e9c234
Downcase function parameters.
Richard M. Stallman <rms@gnu.org>
parents:
9427
diff
changeset
|
715 |
57781
1d855c5b0242
(mouse-sel-mode): Adjust to new names for x-lost-selection-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57687
diff
changeset
|
716 ;; arch-tag: 86e6c73f-deaa-48d3-a24e-c565fda1f7d7 |
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
30691
diff
changeset
|
717 ;;; mouse-sel.el ends here |