annotate lisp/mouse-drag.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents 2441b667abdd
children acc3474759c0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17517
8f952e921136 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 16322
diff changeset
1 ;;; mouse-drag.el --- use mouse-2 to do a new style of scrolling
8f952e921136 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 16322
diff changeset
2
18026
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
3 ;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
16322
f4be70df6bb6 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 16320
diff changeset
5 ;; Author: John Heidemann <johnh@ISI.EDU>
f4be70df6bb6 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 16320
diff changeset
6 ;; Keywords: mouse
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; any later version.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; Boston, MA 02111-1307, USA.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;;; Commentary:
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;; What is ``mouse-drag.el''?
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;;; Doesn't that scroll bar seem far away when you want to scroll?
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;;; This module overloads mouse-2 to do ``throw'' scrolling. You
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;;; click and drag. The distance you move from your original click
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;;; turns into a scroll amount. The scroll amount is scaled
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;;; exponentially to make both large moves and short adjustments easy.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;;; What this boils down to is that you can easily scroll around the
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;;; buffer without much mouse movement. Finally, clicks which aren't
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;;; drags are passed off to the old mouse-2 binding, so old mouse-2
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;;; operations (find-file in dired-mode, yanking in most other modes)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;;; still work.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;;; There is an alternative way to scroll, ``drag'' scrolling. You
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;;; can click on a character and then drag it around, scrolling the
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;;; buffer with you. The character always stays under the mouse.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;;; Compared to throw-scrolling, this approach provides direct
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;;; manipulation (nice) but requires more mouse movement
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;;; (unfortunate). It is offered as an alternative for those who
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;;; prefer it.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;;; If you like mouse-drag, you should also check out mouse-copy
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;;; for ``one-click text copy and move''.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;;; To use mouse-drag, place the following in your .emacs file:
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;;; (require 'mouse-drag)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;;; -and either-
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;;; (global-set-key [down-mouse-2] 'mouse-drag-throw)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;;; -or-
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;;; (global-set-key [down-mouse-2] 'mouse-drag-drag)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;;; Options:
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;;; - reverse the throw-scroll direction with \\[mouse-throw-with-scroll-bar]
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ;;; - work around a bug with \\[mouse-extras-work-around-drag-bug]
18026
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
64 ;;; - auto-enable horizontal scrolling with
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
65 ;;; \\[mouse-drag-electric-col-scrolling]
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;;; History and related work:
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;;; One-click copying and moving was inspired by lemacs-19.8.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;;; Throw-scrolling was inspired by MacPaint's ``hand'' and by Tk's
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;;; mouse-2 scrolling. The package mouse-scroll.el by Tom Wurgler
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;;; <twurgler@goodyear.com> is similar to mouse-drag-throw, but
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;;; doesn't pass clicks through.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;;; These functions have been tested in emacs version 19.30,
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;;; and this package has run in the past on 19.25-19.29.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;;; Originally mouse-drag was part of a larger package.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;;; As of 11 July 96 the scrolling functions were split out
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;;; in preparation for incorporation into (the future) emacs-19.32.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;;; Thanks:
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;;; Thanks to Kai Grossjohann
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;;; <grossjoh@dusty.informatik.uni-dortmund.de> for reporting bugs, to
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;;; Tom Wurgler <twurgler@goodyear.com> for reporting bugs and
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;;; suggesting fixes, and to Joel Graber <jgraber@ti.com> for
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 ;;; prompting me to do drag-scrolling and for an initial
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 ;;; implementation of horizontal drag-scrolling.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 ;;; -johnh@isi.edu, 11-Jul-96
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 ;;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 ;;;
18026
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
96 ;;; What's new with mouse-drag 2.24?
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;;;
18026
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
98 ;;; - mouse-drag-electric-col-scrolling (default: on)
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
99 ;;; auto-enables horizontal scrolling when clicks on wrapped
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
100 ;;; lines occur
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 ;;; Code:
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 ;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 ;; scrolling code
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 ;;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 (defun mouse-drag-safe-scroll (row-delta &optional col-delta)
18134
2441b667abdd (mouse-drag-safe-scroll): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 18026
diff changeset
109 "Scroll down ROW-DELTA lines and right COL-DELTA, ignoring buffer edge errors.
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 Keep the cursor on the screen as needed."
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 (if (and row-delta
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 (/= 0 row-delta))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 (condition-case nil ;; catch and ignore movement errors
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 (scroll-down row-delta)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 (beginning-of-buffer (message "Beginning of buffer"))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 (end-of-buffer (message "End of buffer"))))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 (if (and col-delta
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 (/= 0 col-delta))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 (progn
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 (scroll-right col-delta)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 ;; Make sure that the point stays on the visible screen
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 ;; (if truncation-lines in set).
18134
2441b667abdd (mouse-drag-safe-scroll): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 18026
diff changeset
123 ;; This code mimics the behavior we automatically get
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ;; when doing vertical scrolling.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 ;; Problem identified and a fix suggested by Tom Wurgler.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 (cond
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ((< (current-column) (window-hscroll))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 (move-to-column (window-hscroll))) ; make on left column
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 ((> (- (current-column) (window-hscroll) (window-width) -2) 0)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 (move-to-column (+ (window-width) (window-hscroll) -3)))))))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 (defun mouse-drag-repeatedly-safe-scroll (row-delta &optional col-delta)
18134
2441b667abdd (mouse-drag-safe-scroll): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 18026
diff changeset
133 "Scroll ROW-DELTA rows and COL-DELTA cols until an event happens."
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 (while (sit-for mouse-scroll-delay)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 (mouse-drag-safe-scroll row-delta col-delta)))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 (defun mouse-drag-events-are-point-events-p (start-posn end-posn)
18134
2441b667abdd (mouse-drag-safe-scroll): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 18026
diff changeset
138 "Determine if START-POSN and END-POSN are \"close\"."
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 (let*
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 ((start-col-row (posn-col-row start-posn))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (end-col-row (posn-col-row end-posn)))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (and
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 ;; We no longer exclude things by time.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 ;; (< (- (posn-timestamp end-posn) (posn-timestamp start-posn))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 ;; (if (numberp double-click-time)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 ;; (* 2 double-click-time) ;; stretch it a little
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 ;; 999999)) ;; non-numeric => check by position alone
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 (= (car start-col-row) (car end-col-row))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 (= (cdr start-col-row) (cdr end-col-row)))))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150
18026
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
151 (defvar mouse-drag-electric-col-scrolling t
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
152 "If non-nil, mouse-drag on a long line enables truncate-lines.")
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
153
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 (defun mouse-drag-should-do-col-scrolling ()
18134
2441b667abdd (mouse-drag-safe-scroll): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 18026
diff changeset
155 "Determine if it's wise to enable col-scrolling for the current window.
18026
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
156 Basically, we check for existing horizontal scrolling."
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 (or truncate-lines
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 (> (window-hscroll (selected-window)) 0)
18026
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
159 (< (window-width) (screen-width))
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
160 (and
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
161 mouse-drag-electric-col-scrolling
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
162 (save-excursion ;; on a long line?
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
163 (let
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
164 ((beg (progn (beginning-of-line) (point)))
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
165 (end (progn (end-of-line) (point))))
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
166 (if (> (- end beg) (window-width))
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
167 (setq truncate-lines t)
e3b0e7dc5efd * mouse-drag.el (mouse-drag-electric-col-scrolling): New variable;
Karl Heuer <kwzh@gnu.org>
parents: 17517
diff changeset
168 nil))))))
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 (defvar mouse-throw-with-scroll-bar nil
18134
2441b667abdd (mouse-drag-safe-scroll): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 18026
diff changeset
171 "*Set direction of mouse-throwing.
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 If nil, the text moves in the direction the mouse moves.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 If t, the scroll bar moves in the direction the mouse moves.")
18134
2441b667abdd (mouse-drag-safe-scroll): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 18026
diff changeset
174 (defconst mouse-throw-magnifier-with-scroll-bar
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 [-16 -8 -4 -2 -1 0 0 0 1 2 4 8 16])
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 (defconst mouse-throw-magnifier-with-mouse-movement
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 [ 16 8 4 2 1 0 0 0 -1 -2 -4 -8 -16])
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (defconst mouse-throw-magnifier-min -6)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 (defconst mouse-throw-magnifier-max 6)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 (defun mouse-drag-throw (start-event)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 "\"Throw\" the page according to a mouse drag.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 A \"throw\" is scrolling the page at a speed relative to the distance
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 from the original mouse click to the current mouse location. Try it;
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 you'll like it. It's easier to observe than to explain.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 If the mouse is clicked and released in the same place of time we
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 assume that the user didn't want to scdebugroll but wanted to whatever
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 mouse-2 used to do, so we pass it through.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 Throw scrolling was inspired (but is not identical to) the \"hand\"
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 option in MacPaint, or the middle button in Tk text widgets.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 If `mouse-throw-with-scroll-bar' is non-nil, then this command scrolls
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 in the opposite direction. (Different people have different ideas
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 about which direction is natural. Perhaps it has to do with which
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 hemisphere you're in.)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 To test this function, evaluate:
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 (global-set-key [down-mouse-2] 'mouse-drag-throw)"
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 (interactive "e")
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 ;; we want to do save-selected-window, but that requires 19.29
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 (let* ((start-posn (event-start start-event))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 (start-window (posn-window start-posn))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 (start-row (cdr (posn-col-row start-posn)))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 (start-col (car (posn-col-row start-posn)))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 (old-selected-window (selected-window))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 event end row mouse-delta scroll-delta
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 have-scrolled point-event-p old-binding
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 window-last-row
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 col mouse-col-delta window-last-col
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 (scroll-col-delta 0)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 adjusted-mouse-col-delta
16320
56f494ed6b13 (mouse-drag-throw): Bind adjusted-mouse-delta.
Richard M. Stallman <rms@gnu.org>
parents: 16319
diff changeset
215 adjusted-mouse-delta
16319
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 ;; be conservative about allowing horizontal scrolling
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 (col-scrolling-p (mouse-drag-should-do-col-scrolling)))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 (select-window start-window)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 (track-mouse
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 (while (progn
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 (setq event (read-event)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 end (event-end event)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 row (cdr (posn-col-row end))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 col (car (posn-col-row end)))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 (or (mouse-movement-p event)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 (eq (car-safe event) 'switch-frame)))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 (if (eq start-window (posn-window end))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 (progn
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 (setq mouse-delta (- start-row row)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 adjusted-mouse-delta
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 (- (cond
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 ((<= mouse-delta mouse-throw-magnifier-min)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 mouse-throw-magnifier-min)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 ((>= mouse-delta mouse-throw-magnifier-max)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 mouse-throw-magnifier-max)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 (t mouse-delta))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 mouse-throw-magnifier-min)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 scroll-delta (aref (if mouse-throw-with-scroll-bar
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 mouse-throw-magnifier-with-scroll-bar
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 mouse-throw-magnifier-with-mouse-movement)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 adjusted-mouse-delta))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 (if col-scrolling-p
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 (setq mouse-col-delta (- start-col col)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 adjusted-mouse-col-delta
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 (- (cond
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 ((<= mouse-col-delta mouse-throw-magnifier-min)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 mouse-throw-magnifier-min)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 ((>= mouse-col-delta mouse-throw-magnifier-max)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 mouse-throw-magnifier-max)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 (t mouse-col-delta))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 mouse-throw-magnifier-min)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 scroll-col-delta (aref (if mouse-throw-with-scroll-bar
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 mouse-throw-magnifier-with-scroll-bar
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 mouse-throw-magnifier-with-mouse-movement)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 adjusted-mouse-col-delta)))))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 (if (or (/= 0 scroll-delta)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 (/= 0 scroll-col-delta))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 (progn
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 (setq have-scrolled t)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 (mouse-drag-safe-scroll scroll-delta scroll-col-delta)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 (mouse-drag-repeatedly-safe-scroll scroll-delta scroll-col-delta))))) ;xxx
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 ;; If it was a click and not a drag, prepare to pass the event on.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 ;; Note: We must determine the pass-through event before restoring
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 ;; the window, but invoke it after. Sigh.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 (if (and (not have-scrolled)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 (mouse-drag-events-are-point-events-p start-posn end))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 (setq point-event-p t
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 old-binding (key-binding
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 (vector (event-basic-type start-event)))))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 ;; Now restore the old window.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 (select-window old-selected-window)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 ;; For clicks, call the old function.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 (if point-event-p
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 (call-interactively old-binding))))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 (defun mouse-drag-drag (start-event)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 "\"Drag\" the page according to a mouse drag.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 Drag scrolling moves the page according to the movement of the mouse.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 You \"grab\" the character under the mouse and move it around.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 If the mouse is clicked and released in the same place of time we
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 assume that the user didn't want to scroll but wanted to whatever
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 mouse-2 used to do, so we pass it through.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 Drag scrolling is identical to the \"hand\" option in MacPaint, or the
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 middle button in Tk text widgets.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 To test this function, evaluate:
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 (global-set-key [down-mouse-2] 'mouse-drag-drag)"
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 (interactive "e")
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 ;; we want to do save-selected-window, but that requires 19.29
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 (let* ((start-posn (event-start start-event))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 (start-window (posn-window start-posn))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 (start-row (cdr (posn-col-row start-posn)))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 (start-col (car (posn-col-row start-posn)))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 (old-selected-window (selected-window))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 event end row mouse-delta scroll-delta
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 have-scrolled point-event-p old-binding
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 window-last-row
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 col mouse-col-delta window-last-col
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 (scroll-col-delta 0)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 ;; be conservative about allowing horizontal scrolling
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 (col-scrolling-p (mouse-drag-should-do-col-scrolling)))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 (select-window start-window)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 (setq window-last-row (- (window-height) 2)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 window-last-col (- (window-width) 2))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 (track-mouse
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 (while (progn
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 (setq event (read-event)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 end (event-end event)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 row (cdr (posn-col-row end))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 col (car (posn-col-row end)))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 (or (mouse-movement-p event)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 (eq (car-safe event) 'switch-frame)))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 ;; Scroll if see if we're on the edge.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 ;; NEEDSWORK: should handle mouse-in-other window.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 (cond
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 ((not (eq start-window (posn-window end)))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 t) ; wait for return to original window
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 ((<= row 0) (mouse-drag-repeatedly-safe-scroll -1 0))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 ((>= row window-last-row) (mouse-drag-repeatedly-safe-scroll 1 0))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 ((and col-scrolling-p (<= col 1)) (mouse-drag-repeatedly-safe-scroll 0 -1))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 ((and col-scrolling-p (>= col window-last-col)) (mouse-drag-repeatedly-safe-scroll 0 1))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 (t
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 (setq scroll-delta (- row start-row)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 start-row row)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 (if col-scrolling-p
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 (setq scroll-col-delta (- col start-col)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 start-col col))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 (if (or (/= 0 scroll-delta)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 (/= 0 scroll-col-delta))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 (progn
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 (setq have-scrolled t)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 (mouse-drag-safe-scroll scroll-delta scroll-col-delta)))))))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 ;; If it was a click and not a drag, prepare to pass the event on.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 ;; Note: We must determine the pass-through event before restoring
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 ;; the window, but invoke it after. Sigh.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 (if (and (not have-scrolled)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 (mouse-drag-events-are-point-events-p start-posn end))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 (setq point-event-p t
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 old-binding (key-binding
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 (vector (event-basic-type start-event)))))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 ;; Now restore the old window.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 (select-window old-selected-window)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 ;; For clicks, call the old function.
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 (if point-event-p
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 (call-interactively old-binding))))
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 (provide 'mouse-drag)
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351
8bd3981bd342 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 ;;; mouse-drag.el ends here