annotate lisp/avoid.el @ 13883:a4eef7470b6b

(ls-lisp-support-shell-wildcards): New variable. (insert-directory): Convert the filename wildcard to an equivalent Emacs regexp, when `ls-lisp-support-shell-wildcards' is non-nil. Handle file patterns like "/foo*/" as if it were "/foo*", like the shell would. Print zero total for files whose total size is exactly zero (in particular, for no files at all). Say "No match" when no files match the given wildcard. (ls-lisp-format): Make directory listing format more like POSIX ls.
author Richard M. Stallman <rms@gnu.org>
date Thu, 28 Dec 1995 23:36:50 +0000
parents 84acc3adcd63
children 187735b53d52
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13337
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12940
diff changeset
1 ;;; avoid.el --- make mouse pointer stay out of the way of editing
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
5745
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
3 ;;; Copyright (C) 1993, 1994 Free Software Foundation, Inc.
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
12082
257af4819582 Change email address for Boris.
Boris Goldowsky <boris@gnu.org>
parents: 11269
diff changeset
5 ;; Author: Boris Goldowsky <boris@gnu.ai.mit.edu>
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Keywords: mouse
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
bf9e7676a73e 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
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; any later version.
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;;; Commentary:
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;;;
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; For those who are annoyed by the mouse pointer obscuring text,
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;; this mode moves the mouse pointer - either just a little out of
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;;; the way, or all the way to the corner of the frame.
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;;; To use, load or evaluate this file and type M-x mouse-avoidance-mode .
11269
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
30 ;;; To set up permanently, put the following in your .emacs:
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;;;
11269
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
32 ;;; (if window-system (mouse-avoidance-mode 'animate))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;;;
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
34 ;;; The 'animate can be 'jump or 'banish or 'exile or 'protean if you prefer.
5745
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
35 ;;; See the documentation for function `mouse-avoidance-mode' for
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
36 ;;; details of the different modes.
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;;;
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;;; For added silliness, make the animatee animate...
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;;; put something similar to the following into your .emacs:
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;;;
11269
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
41 ;;; (if window-system
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
42 ;;; (mouse-avoidance-set-pointer-shape
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;;; (eval (nth (random 4)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;;; '(x-pointer-man x-pointer-spider
11269
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
45 ;;; x-pointer-gobbler x-pointer-gumby)))))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;;;
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;;; For completely random pointer shape, replace the setq above with:
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;;; (setq x-pointer-shape (mouse-avoidance-random-shape))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;;;
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
50 ;;; Bugs / Warnings / To-Do:
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;;;
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;;; - Using this code does slow emacs down. "banish" mode shouldn't
11269
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
53 ;;; be too bad, and on my workstation even "animate" is reasonable.
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;;;
11269
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
55 ;;; - It ought to find out where any overlapping frames are and avoid them,
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
56 ;;; rather than always raising the frame.
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;;; Credits:
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
59 ;;; This code was helped by all those who contributed suggestions,
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
60 ;;; fixes, and additions
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
61 ;;; Joe Harrington (and his advisor), for the original inspiration.
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
62 ;;; Ken Manheimer, for dreaming up the Protean mode.
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
63 ;;; Richard Stallman, for the awful cat-and-mouse pun, among other things.
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;;; Mike Williams, Denis Howe, Bill Benedetto, Chris Moore, Don Morris,
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;;; Simon Marshall, and M.S. Ashton, for their feedback.
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;;;
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;;; Code:
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 (provide 'avoid)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 (defvar mouse-avoidance-mode nil
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 "Value is t or a symbol if the mouse pointer should avoid the cursor.
7556
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
73 See function `mouse-avoidance-mode' for possible values. Changing this
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
74 variable is NOT the recommended way to change modes; use that function
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 instead.")
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
77 (defvar mouse-avoidance-nudge-dist 15
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 "*Average distance that mouse will be moved when approached by cursor.
7571
d0c9af68a5ba (mouse-avoidance-nudge-dist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7556
diff changeset
79 Only applies in mouse-avoidance-mode `jump' and its derivatives.
7879
e0f3cfb55df7 (mouse-avoidance-threshold): Renamed from ...threshhold.
Richard M. Stallman <rms@gnu.org>
parents: 7849
diff changeset
80 For best results make this larger than `mouse-avoidance-threshold'.")
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
82 (defvar mouse-avoidance-nudge-var 10
7556
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
83 "*Variability of `mouse-avoidance-nudge-dist' (which see).")
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 (defvar mouse-avoidance-animation-delay .01
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 "Delay between animation steps, in seconds.")
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87
7879
e0f3cfb55df7 (mouse-avoidance-threshold): Renamed from ...threshhold.
Richard M. Stallman <rms@gnu.org>
parents: 7849
diff changeset
88 (defvar mouse-avoidance-threshold 5
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 "*Mouse-pointer's flight distance.
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 If the cursor gets closer than this, the mouse pointer will move away.
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 Only applies in mouse-avoidance-modes `animate' and `jump'.")
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
93 ;; Internal variables
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
94 (defvar mouse-avoidance-state nil)
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 (defvar mouse-avoidance-pointer-shapes nil)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 (defvar mouse-avoidance-n-pointer-shapes 0)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 ;;; Functions:
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99
11269
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
100 (defsubst mouse-avoidance-set-pointer-shape (shape)
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
101 "Set the shape of the mouse pointer to SHAPE."
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
102 (setq x-pointer-shape shape)
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
103 (set-mouse-color nil))
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
104
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
105 (defun mouse-avoidance-point-position ()
7556
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
106 "Return the position of point as (FRAME X . Y).
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
107 Analogous to mouse-position."
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
108 (let* ((w (selected-window))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
109 (edges (window-edges w))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
110 (list
7849
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
111 (compute-motion (max (window-start w) (point-min)) ; start pos
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
112 ;; window-start can be < point-min if the
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
113 ;; latter has changed since the last redisplay
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
114 '(0 . 0) ; start XY
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
115 (point) ; stop pos
7849
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
116 (cons (window-width) (window-height)); stop XY: none
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
117 (1- (window-width)) ; width
7849
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
118 (cons (window-hscroll w) 0) ; 0 may not be right?
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
119 (selected-window))))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
120 ;; compute-motion returns (pos HPOS VPOS prevhpos contin)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
121 ;; we want: (frame hpos . vpos)
7849
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
122 (cons (selected-frame)
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
123 (cons (+ (car edges) (car (cdr list)))
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
124 (+ (car (cdr edges)) (car (cdr (cdr list))))))))
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
125
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
126 ;(defun mouse-avoidance-point-position-test ()
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
127 ; (interactive)
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
128 ; (message (format "point=%s mouse=%s"
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
129 ; (cdr (mouse-avoidance-point-position))
bbc7770db51c (mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents: 7571
diff changeset
130 ; (cdr (mouse-position)))))
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
131
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
132 (defun mouse-avoidance-set-mouse-position (pos)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
133 ;; Carefully set mouse position to given position (X . Y)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
134 ;; Ideally, should check if X,Y is in the current frame, and if not,
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
135 ;; leave the mouse where it was. However, this is currently
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
136 ;; difficult to do, so we just raise the frame to avoid frame switches.
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
137 ;; Returns t if it moved the mouse.
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
138 (let ((f (selected-frame)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
139 (raise-frame f)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
140 (set-mouse-position f (car pos) (cdr pos))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
141 t))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
142
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
143 (defun mouse-avoidance-too-close-p (mouse)
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 ;; Return t if mouse pointer and point cursor are too close.
7879
e0f3cfb55df7 (mouse-avoidance-threshold): Renamed from ...threshhold.
Richard M. Stallman <rms@gnu.org>
parents: 7849
diff changeset
145 ;; Acceptable distance is defined by mouse-avoidance-threshold.
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
146 (let ((point (mouse-avoidance-point-position)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
147 (and (eq (car mouse) (car point))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
148 (car (cdr mouse))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
149 (< (abs (- (car (cdr mouse)) (car (cdr point))))
7879
e0f3cfb55df7 (mouse-avoidance-threshold): Renamed from ...threshhold.
Richard M. Stallman <rms@gnu.org>
parents: 7849
diff changeset
150 mouse-avoidance-threshold)
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
151 (< (abs (- (cdr (cdr mouse)) (cdr (cdr point))))
7879
e0f3cfb55df7 (mouse-avoidance-threshold): Renamed from ...threshhold.
Richard M. Stallman <rms@gnu.org>
parents: 7849
diff changeset
152 mouse-avoidance-threshold))))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
154 (defun mouse-avoidance-banish-destination ()
7556
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
155 "The position to which mouse-avoidance-mode `banish' moves the mouse.
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
156 You can redefine this if you want the mouse banished to a different corner."
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
157 (cons (1- (frame-width))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
158 0))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
159
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 (defun mouse-avoidance-banish-mouse ()
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 ;; Put the mouse pointer in the upper-right corner of the current frame.
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
162 (mouse-avoidance-set-mouse-position (mouse-avoidance-banish-destination)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
163
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
164 (defsubst mouse-avoidance-delta (cur delta dist var min max)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
165 ;; Decide how far to move in either dimension.
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
166 ;; Args are the CURRENT location, the desired DELTA for
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
167 ;; warp-conservation, the DISTANCE we like to move, the VARIABILITY
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
168 ;; in distance allowed, and the MIN and MAX possible window positions.
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
169 ;; Returns something as close to DELTA as possible withing the constraints.
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
170 (let ((L1 (max (- min cur) (+ (- dist) (- var))))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
171 (R1 (+ (- dist) var ))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
172 (L2 (+ dist (- var)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
173 (R2 (min (- max cur) (+ dist var))))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
174 (if (< R1 (- min cur)) (setq L1 nil R1 nil))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
175 (if (> L2 (- max cur)) (setq L2 nil R2 nil))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
176 (cond ((and L1 (< delta L1)) L1)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
177 ((and R1 (< delta R1)) delta)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
178 ((and R1 (< delta 0)) R1)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
179 ((and L2 (< delta L2)) L2)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
180 ((and R2 (< delta R2)) delta)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
181 (R2)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
182 ((or R1 L2))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
183 (t 0))))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 (defun mouse-avoidance-nudge-mouse ()
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 ;; Push the mouse a little way away, possibly animating the move
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
187 ;; For these modes, state keeps track of the total offset that we've
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
188 ;; accumulated, and tries to keep it close to zero.
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 (let* ((cur (mouse-position))
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
190 (cur-frame (car cur))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
191 (cur-pos (cdr cur))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
192 (deltax (mouse-avoidance-delta
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
193 (car cur-pos) (- (random mouse-avoidance-nudge-var)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
194 (car mouse-avoidance-state))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
195 mouse-avoidance-nudge-dist mouse-avoidance-nudge-var
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
196 0 (frame-width)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
197 (deltay (mouse-avoidance-delta
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
198 (cdr cur-pos) (- (random mouse-avoidance-nudge-var)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
199 (cdr mouse-avoidance-state))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
200 mouse-avoidance-nudge-dist mouse-avoidance-nudge-var
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
201 0 (frame-height))))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
202 (setq mouse-avoidance-state
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
203 (cons (+ (car mouse-avoidance-state) deltax)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
204 (+ (cdr mouse-avoidance-state) deltay)))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 (if (or (eq mouse-avoidance-mode 'animate)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 (eq mouse-avoidance-mode 'proteus))
11269
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
207 (let ((i 0.0))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 (while (<= i 1)
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
209 (mouse-avoidance-set-mouse-position
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
210 (cons (+ (car cur-pos) (round (* i deltax)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
211 (+ (cdr cur-pos) (round (* i deltay)))))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
212 (setq i (+ i (max .1 (/ 1.0 mouse-avoidance-nudge-dist))))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 (if (eq mouse-avoidance-mode 'proteus)
11269
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
214 (mouse-avoidance-set-pointer-shape
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
215 (mouse-avoidance-random-shape)))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 (sit-for mouse-avoidance-animation-delay)))
7556
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
217 (mouse-avoidance-set-mouse-position (cons (+ (car (cdr cur)) deltax)
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
218 (+ (cdr (cdr cur)) deltay))))))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 (defun mouse-avoidance-random-shape ()
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 "Return a random cursor shape.
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 This assumes that any variable whose name begins with x-pointer- and
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 has an integer value is a valid cursor shape. You might want to
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 redefine this function to suit your own tastes."
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 (if (null mouse-avoidance-pointer-shapes)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 (progn
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 (setq mouse-avoidance-pointer-shapes
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 (mapcar '(lambda (x) (symbol-value (intern x)))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 (all-completions "x-pointer-" obarray
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 '(lambda (x)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 (and (boundp x)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 (integerp (symbol-value x)))))))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 (setq mouse-avoidance-n-pointer-shapes
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 (length mouse-avoidance-pointer-shapes))))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 (nth (random mouse-avoidance-n-pointer-shapes)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 mouse-avoidance-pointer-shapes))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
238 (defun mouse-avoidance-banish-hook ()
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
239 (if (and (not executing-kbd-macro) ; don't check inside macro
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
240 (mouse-avoidance-kbd-command (this-command-keys)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
241 (mouse-avoidance-banish-mouse)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
242
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
243 (defun mouse-avoidance-exile-hook ()
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
244 ;; For exile mode, the state is nil when the mouse is in its normal
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
245 ;; position, and set to the old mouse-position when the mouse is in exile.
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
246 (if (and (not executing-kbd-macro)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
247 (mouse-avoidance-kbd-command (this-command-keys)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
248 (let ((mp (mouse-position)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
249 (cond ((and (not mouse-avoidance-state)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
250 (mouse-avoidance-too-close-p mp))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
251 (setq mouse-avoidance-state mp)
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
252 (mouse-avoidance-banish-mouse))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
253 ((and mouse-avoidance-state
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
254 (not (mouse-avoidance-too-close-p mouse-avoidance-state)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
255 (if (and (eq (car mp) (selected-frame))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
256 (equal (cdr mp) (mouse-avoidance-banish-destination)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
257 (mouse-avoidance-set-mouse-position
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
258 ;; move back only if user has not moved mouse
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
259 (cdr mouse-avoidance-state)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
260 ;; but clear state anyway, to be ready for another move
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
261 (setq mouse-avoidance-state nil))))))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 (defun mouse-avoidance-fancy-hook ()
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
264 ;; Used for the "fancy" modes, ie jump et al.
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
265 (if (and (not executing-kbd-macro) ; don't check inside macro
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
266 (mouse-avoidance-kbd-command (this-command-keys))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
267 (mouse-avoidance-too-close-p (mouse-position)))
5745
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
268 (let ((old-pos (mouse-position)))
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
269 (mouse-avoidance-nudge-mouse)
11269
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
270 (if (not (eq (selected-frame) (car old-pos)))
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
271 ;; This should never happen.
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
272 (apply 'set-mouse-position old-pos)))))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
274 (defun mouse-avoidance-kbd-command (key)
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 "Return t if the KEYSEQENCE is composed of keyboard events only.
7556
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
276 Return nil if there are any lists in the key sequence."
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 (cond ((null key) nil) ; Null event seems to be
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 ; returned occasionally.
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 ((not (vectorp key)) t) ; Strings are keyboard events.
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 ((catch 'done
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 (let ((i 0)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 (l (length key)))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 (while (< i l)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 (if (listp (aref key i))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 (throw 'done nil))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 (setq i (1+ i))))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 t))))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288
11269
26d830b04546 avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents: 7879
diff changeset
289 ;;;###autoload
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 (defun mouse-avoidance-mode (&optional mode)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 "Set cursor avoidance mode to MODE.
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
292 MODE should be one of the symbols `banish', `exile', `jump', `animate',
5745
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
293 `cat-and-mouse', `proteus', or `none'.
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
294
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
295 If MODE is nil, toggle mouse avoidance between `none` and `banish'
5745
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
296 modes. Positive numbers and symbols other than the above are treated
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
297 as equivalent to `banish'; negative numbers and `-' are equivalent to `none'.
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
298
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
299 Effects of the different modes:
7556
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
300 * banish: Move the mouse to the upper-right corner on any keypress.
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
301 * exile: Move the mouse to the corner only if the cursor gets too close,
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
302 and allow it to return once the cursor is out of the way.
7556
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
303 * jump: If the cursor gets too close to the mouse, displace the mouse
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
304 a random distance & direction.
7556
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
305 * animate: As `jump', but shows steps along the way for illusion of motion.
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
306 * cat-and-mouse: Same as `animate'.
48f98b59a339 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 7015
diff changeset
307 * proteus: As `animate', but changes the shape of the mouse pointer too.
5745
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
308
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
309 Whenever the mouse is moved, the frame is also raised.
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
310
7879
e0f3cfb55df7 (mouse-avoidance-threshold): Renamed from ...threshhold.
Richard M. Stallman <rms@gnu.org>
parents: 7849
diff changeset
311 \(see `mouse-avoidance-threshold' for definition of \"too close\",
5745
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
312 and `mouse-avoidance-nudge-dist' and `mouse-avoidance-nudge-var' for
01628c0b2646 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5145
diff changeset
313 definition of \"random distance\".)"
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 (interactive
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 (list (intern (completing-read
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 "Select cursor avoidance technique (SPACE for list): "
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
317 '(("banish") ("exile") ("jump") ("animate")
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
318 ("cat-and-mouse") ("proteus") ("none"))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 nil t))))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 (if (eq mode 'cat-and-mouse)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 (setq mode 'animate))
12940
f7d26ee5ea26 (mouse-avoidance-mode): Use post-command-idle-hook. Use remove-hook.
Richard M. Stallman <rms@gnu.org>
parents: 12082
diff changeset
322 (remove-hook 'post-command-idle-hook 'mouse-avoidance-banish-hook)
f7d26ee5ea26 (mouse-avoidance-mode): Use post-command-idle-hook. Use remove-hook.
Richard M. Stallman <rms@gnu.org>
parents: 12082
diff changeset
323 (remove-hook 'post-command-idle-hook 'mouse-avoidance-exile-hook)
f7d26ee5ea26 (mouse-avoidance-mode): Use post-command-idle-hook. Use remove-hook.
Richard M. Stallman <rms@gnu.org>
parents: 12082
diff changeset
324 (remove-hook 'post-command-idle-hook 'mouse-avoidance-fancy-hook)
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 (cond ((eq mode 'none)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 (setq mouse-avoidance-mode nil))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 ((or (eq mode 'jump)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 (eq mode 'animate)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 (eq mode 'proteus))
12940
f7d26ee5ea26 (mouse-avoidance-mode): Use post-command-idle-hook. Use remove-hook.
Richard M. Stallman <rms@gnu.org>
parents: 12082
diff changeset
330 (add-hook 'post-command-idle-hook 'mouse-avoidance-fancy-hook)
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
331 (setq mouse-avoidance-mode mode
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
332 mouse-avoidance-state (cons 0 0)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
333 ((eq mode 'exile)
12940
f7d26ee5ea26 (mouse-avoidance-mode): Use post-command-idle-hook. Use remove-hook.
Richard M. Stallman <rms@gnu.org>
parents: 12082
diff changeset
334 (add-hook 'post-command-idle-hook 'mouse-avoidance-exile-hook)
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
335 (setq mouse-avoidance-mode mode
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
336 mouse-avoidance-state nil))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 ((or (eq mode 'banish)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 (eq mode t)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 (and (null mode) (null mouse-avoidance-mode))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 (and mode (> (prefix-numeric-value mode) 0)))
12940
f7d26ee5ea26 (mouse-avoidance-mode): Use post-command-idle-hook. Use remove-hook.
Richard M. Stallman <rms@gnu.org>
parents: 12082
diff changeset
341 (add-hook 'post-command-idle-hook 'mouse-avoidance-banish-hook)
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 (setq mouse-avoidance-mode 'banish))
7015
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
343 (t (setq mouse-avoidance-mode nil)))
41b90d7dd228 doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6106
diff changeset
344 (force-mode-line-update))
5119
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 (or (assq 'mouse-avoidance-mode minor-mode-alist)
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 (setq minor-mode-alist (cons '(mouse-avoidance-mode " Avoid")
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 minor-mode-alist)))
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349
bf9e7676a73e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 ;;; End of avoid.el