Mercurial > emacs
annotate lisp/avoid.el @ 106768:21fd634f447a
Make line<->pixel_y conversion macros aware of native menu/tool bars.
They are placed above the internal border. This supersedes special
treatment of native tool bars in the display code.
This fixes wrong display position of native menu bars and bogus mouse
highlighting of native tool bars, both of which can be found when
internal border width is large. Also it fixes wrong flashed part on
visible bell with native menu bars.
* frame.h (FRAME_TOP_MARGIN_HEIGHT): New macro.
(FRAME_LINE_TO_PIXEL_Y, FRAME_PIXEL_Y_TO_LINE): Take account of pseudo
windows above internal border.
* window.h (WINDOW_MENU_BAR_P, WINDOW_TOOL_BAR_P): New macros.
(WINDOW_TOP_EDGE_Y, WINDOW_BOTTOM_EDGE_Y): Take account of pseudo
windows above internal border.
* xdisp.c (get_glyph_string_clip_rects, init_glyph_string): Don't treat
tool bar windows specially.
* xfns.c (x_set_tool_bar_lines): Take account of menu bar height.
* xterm.c (x_after_update_window_line): Don't treat tool bar windows
specially.
(XTflash): Take account of menu bar height.
* w32term.c (x_after_update_window_line): Don't treat tool bar windows
specially.
author | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
---|---|
date | Sat, 09 Jan 2010 13:16:32 +0900 |
parents | a9dc0e7c3f2b |
children | 1d1d5d9bd884 |
rev | line source |
---|---|
13337 | 1 ;;; avoid.el --- make mouse pointer stay out of the way of editing |
5119 | 2 |
74439 | 3 ;; Copyright (C) 1993, 1994, 2000, 2001, 2002, 2003, 2004, |
100908 | 4 ;; 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. |
5119 | 5 |
25278 | 6 ;; Author: Boris Goldowsky <boris@gnu.org> |
5119 | 7 ;; Keywords: mouse |
8 | |
9 ;; This file is part of GNU Emacs. | |
10 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
11 ;; GNU Emacs is free software: you can redistribute it and/or modify |
5119 | 12 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
13 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
14 ;; (at your option) any later version. |
5119 | 15 |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
5119 | 23 |
24 ;;; Commentary: | |
25 | |
14169 | 26 ;; For those who are annoyed by the mouse pointer obscuring text, |
27 ;; this mode moves the mouse pointer - either just a little out of | |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
28 ;; the way, or all the way to the corner of the frame. |
14169 | 29 ;; To use, load or evaluate this file and type M-x mouse-avoidance-mode . |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
30 ;; To set up permanently, put the following in your .emacs: |
14169 | 31 ;; |
29200
28c61db89225
Remove window-system from comments, suggest using display-*-p instead.
Eli Zaretskii <eliz@gnu.org>
parents:
28101
diff
changeset
|
32 ;; (if (display-mouse-p) (mouse-avoidance-mode 'animate)) |
14169 | 33 ;; |
20512
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
34 ;; Other legitimate alternatives include |
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
35 ;; `banish', `exile', `jump', `cat-and-mouse', and `proteus'. |
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
36 ;; They do somewhat different things. |
14169 | 37 ;; See the documentation for function `mouse-avoidance-mode' for |
38 ;; details of the different modes. | |
39 ;; | |
40 ;; For added silliness, make the animatee animate... | |
41 ;; put something similar to the following into your .emacs: | |
42 ;; | |
29200
28c61db89225
Remove window-system from comments, suggest using display-*-p instead.
Eli Zaretskii <eliz@gnu.org>
parents:
28101
diff
changeset
|
43 ;; (if (eq window-system 'x) |
14169 | 44 ;; (mouse-avoidance-set-pointer-shape |
45 ;; (eval (nth (random 4) | |
46 ;; '(x-pointer-man x-pointer-spider | |
47 ;; x-pointer-gobbler x-pointer-gumby))))) | |
48 ;; | |
49 ;; For completely random pointer shape, replace the setq above with: | |
50 ;; (setq x-pointer-shape (mouse-avoidance-random-shape)) | |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
51 ;; |
14169 | 52 ;; Bugs / Warnings / To-Do: |
53 ;; | |
56730
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
54 ;; - Using this code does slow Emacs down. "banish" mode shouldn't |
14169 | 55 ;; be too bad, and on my workstation even "animate" is reasonable. |
56 ;; | |
57 ;; - It ought to find out where any overlapping frames are and avoid them, | |
58 ;; rather than always raising the frame. | |
59 | |
60 ;; Credits: | |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
61 ;; This code was helped by all those who contributed suggestions, |
14169 | 62 ;; fixes, and additions |
63 ;; Joe Harrington (and his advisor), for the original inspiration. | |
64 ;; Ken Manheimer, for dreaming up the Protean mode. | |
65 ;; Richard Stallman, for the awful cat-and-mouse pun, among other things. | |
66 ;; Mike Williams, Denis Howe, Bill Benedetto, Chris Moore, Don Morris, | |
67 ;; Simon Marshall, and M.S. Ashton, for their feedback. | |
68 | |
5119 | 69 ;;; Code: |
70 | |
71 (provide 'avoid) | |
72 | |
17436
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
73 (defgroup avoid nil |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
74 "Make mouse pointer stay out of the way of editing." |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
75 :prefix "mouse-avoidance-" |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
76 :group 'mouse) |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
77 |
28101
b59523f7ce40
(mouse-avoidance-mode): Add autoload cookie to
Dave Love <fx@gnu.org>
parents:
25278
diff
changeset
|
78 ;;;###autoload |
20512
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
79 (defcustom mouse-avoidance-mode nil |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
80 "Activate mouse avoidance mode. |
20512
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
81 See function `mouse-avoidance-mode' for possible values. |
24639 | 82 Setting this variable directly does not take effect; |
83 use either \\[customize] or the function `mouse-avoidance-mode'." | |
20512
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
84 :set (lambda (symbol value) |
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
85 ;; 'none below prevents toggling when value is nil. |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
86 (mouse-avoidance-mode (or value 'none))) |
20512
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
87 :initialize 'custom-initialize-default |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
88 :type '(choice (const :tag "none" nil) (const banish) (const jump) |
20512
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
89 (const animate) (const exile) (const proteus) |
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
90 ) |
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
91 :group 'avoid |
21670
808ecc2eaa84
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
20993
diff
changeset
|
92 :require 'avoid |
808ecc2eaa84
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
20993
diff
changeset
|
93 :version "20.3") |
20512
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
94 |
5119 | 95 |
17436
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
96 (defcustom mouse-avoidance-nudge-dist 15 |
100171 | 97 "Average distance that mouse will be moved when approached by cursor. |
56730
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
98 Only applies in Mouse-Avoidance mode `jump' and its derivatives. |
17436
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
99 For best results make this larger than `mouse-avoidance-threshold'." |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
100 :type 'integer |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
101 :group 'avoid) |
5119 | 102 |
17436
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
103 (defcustom mouse-avoidance-nudge-var 10 |
100171 | 104 "Variability of `mouse-avoidance-nudge-dist' (which see)." |
17436
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
105 :type 'integer |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
106 :group 'avoid) |
5119 | 107 |
17436
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
108 (defcustom mouse-avoidance-animation-delay .01 |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
109 "Delay between animation steps, in seconds." |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
110 :type 'number |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
111 :group 'avoid) |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
112 |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
113 (defcustom mouse-avoidance-threshold 5 |
100171 | 114 "Mouse-pointer's flight distance. |
5119 | 115 If the cursor gets closer than this, the mouse pointer will move away. |
17436
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
116 Only applies in mouse-avoidance-modes `animate' and `jump'." |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
117 :type 'integer |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17067
diff
changeset
|
118 :group 'avoid) |
5119 | 119 |
7015 | 120 ;; Internal variables |
121 (defvar mouse-avoidance-state nil) | |
5119 | 122 (defvar mouse-avoidance-pointer-shapes nil) |
123 (defvar mouse-avoidance-n-pointer-shapes 0) | |
14897
9cce31ba2d61
(mouse-avoidance-old-pointer-shape): New vbl.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
124 (defvar mouse-avoidance-old-pointer-shape nil) |
72334
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
125 (defvar mouse-avoidance-animating-pointer nil) |
5119 | 126 |
19323
b686f7cb6849
(mouse-avoidance-timer): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17436
diff
changeset
|
127 ;; This timer is used to run something when Emacs is idle. |
b686f7cb6849
(mouse-avoidance-timer): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17436
diff
changeset
|
128 (defvar mouse-avoidance-timer nil) |
b686f7cb6849
(mouse-avoidance-timer): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17436
diff
changeset
|
129 |
5119 | 130 ;;; Functions: |
131 | |
11269
26d830b04546
avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents:
7879
diff
changeset
|
132 (defsubst mouse-avoidance-set-pointer-shape (shape) |
26d830b04546
avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents:
7879
diff
changeset
|
133 "Set the shape of the mouse pointer to SHAPE." |
38539
f150471f4c55
(mouse-avoidance-too-close-p): If the frame lacks a
Eli Zaretskii <eliz@gnu.org>
parents:
33809
diff
changeset
|
134 (when (boundp 'x-pointer-shape) |
f150471f4c55
(mouse-avoidance-too-close-p): If the frame lacks a
Eli Zaretskii <eliz@gnu.org>
parents:
33809
diff
changeset
|
135 (setq x-pointer-shape shape) |
f150471f4c55
(mouse-avoidance-too-close-p): If the frame lacks a
Eli Zaretskii <eliz@gnu.org>
parents:
33809
diff
changeset
|
136 (set-mouse-color nil))) |
11269
26d830b04546
avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents:
7879
diff
changeset
|
137 |
7015 | 138 (defun mouse-avoidance-point-position () |
7556 | 139 "Return the position of point as (FRAME X . Y). |
56730
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
140 Analogous to `mouse-position'." |
70412
12496a44a084
(mouse-avoidance-point-position): Use posn-at-point instead of compute-motion.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
141 (let ((edges (window-inside-edges)) |
12496a44a084
(mouse-avoidance-point-position): Use posn-at-point instead of compute-motion.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
142 (x-y (posn-x-y (posn-at-point)))) |
7849
bbc7770db51c
(mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents:
7571
diff
changeset
|
143 (cons (selected-frame) |
70412
12496a44a084
(mouse-avoidance-point-position): Use posn-at-point instead of compute-motion.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
144 (cons (+ (car edges) |
12496a44a084
(mouse-avoidance-point-position): Use posn-at-point instead of compute-motion.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
145 (/ (car x-y) (frame-char-width))) |
12496a44a084
(mouse-avoidance-point-position): Use posn-at-point instead of compute-motion.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
146 (+ (car (cdr edges)) |
12496a44a084
(mouse-avoidance-point-position): Use posn-at-point instead of compute-motion.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
147 (/ (cdr x-y) (frame-char-height))))))) |
7849
bbc7770db51c
(mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents:
7571
diff
changeset
|
148 |
bbc7770db51c
(mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents:
7571
diff
changeset
|
149 ;(defun mouse-avoidance-point-position-test () |
bbc7770db51c
(mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents:
7571
diff
changeset
|
150 ; (interactive) |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
151 ; (message (format "point=%s mouse=%s" |
7849
bbc7770db51c
(mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents:
7571
diff
changeset
|
152 ; (cdr (mouse-avoidance-point-position)) |
bbc7770db51c
(mouse-avoidance-point-position): Fix compute-motion
Richard M. Stallman <rms@gnu.org>
parents:
7571
diff
changeset
|
153 ; (cdr (mouse-position))))) |
7015 | 154 |
155 (defun mouse-avoidance-set-mouse-position (pos) | |
156 ;; Carefully set mouse position to given position (X . Y) | |
157 ;; Ideally, should check if X,Y is in the current frame, and if not, | |
158 ;; leave the mouse where it was. However, this is currently | |
159 ;; difficult to do, so we just raise the frame to avoid frame switches. | |
160 ;; Returns t if it moved the mouse. | |
161 (let ((f (selected-frame))) | |
162 (raise-frame f) | |
163 (set-mouse-position f (car pos) (cdr pos)) | |
164 t)) | |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
165 |
7015 | 166 (defun mouse-avoidance-too-close-p (mouse) |
33809
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
167 "Return t if mouse pointer and point cursor are too close. |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
168 MOUSE is the current mouse position as returned by `mouse-position'. |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
169 Acceptable distance is defined by `mouse-avoidance-threshold'." |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
170 (let* ((frame (car mouse)) |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
171 (mouse-y (cdr (cdr mouse))) |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
172 (tool-bar-lines (frame-parameter nil 'tool-bar-lines))) |
38539
f150471f4c55
(mouse-avoidance-too-close-p): If the frame lacks a
Eli Zaretskii <eliz@gnu.org>
parents:
33809
diff
changeset
|
173 (or tool-bar-lines |
f150471f4c55
(mouse-avoidance-too-close-p): If the frame lacks a
Eli Zaretskii <eliz@gnu.org>
parents:
33809
diff
changeset
|
174 (setq tool-bar-lines 0)) |
33809
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
175 (if (and mouse-y (< mouse-y tool-bar-lines)) |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
176 nil |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
177 (let ((point (mouse-avoidance-point-position)) |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
178 (mouse-x (car (cdr mouse)))) |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
179 (and (eq frame (car point)) |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
180 (not (null mouse-x)) |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
181 (< (abs (- mouse-x (car (cdr point)))) |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
182 mouse-avoidance-threshold) |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
183 (< (abs (- mouse-y (cdr (cdr point)))) |
19c8badbcb15
(mouse-avoidance-too-close-p): Return nil if mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30765
diff
changeset
|
184 mouse-avoidance-threshold)))))) |
5119 | 185 |
7015 | 186 (defun mouse-avoidance-banish-destination () |
56730
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
187 "The position to which Mouse-Avoidance mode `banish' moves the mouse. |
7015 | 188 You can redefine this if you want the mouse banished to a different corner." |
56730
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
189 (let* ((pos (window-edges))) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
190 (cons (- (nth 2 pos) 2) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
191 (nth 1 pos)))) |
7015 | 192 |
5119 | 193 (defun mouse-avoidance-banish-mouse () |
194 ;; Put the mouse pointer in the upper-right corner of the current frame. | |
7015 | 195 (mouse-avoidance-set-mouse-position (mouse-avoidance-banish-destination))) |
196 | |
197 (defsubst mouse-avoidance-delta (cur delta dist var min max) | |
198 ;; Decide how far to move in either dimension. | |
199 ;; Args are the CURRENT location, the desired DELTA for | |
200 ;; warp-conservation, the DISTANCE we like to move, the VARIABILITY | |
201 ;; in distance allowed, and the MIN and MAX possible window positions. | |
14040 | 202 ;; Returns something as close to DELTA as possible within the constraints. |
7015 | 203 (let ((L1 (max (- min cur) (+ (- dist) (- var)))) |
204 (R1 (+ (- dist) var )) | |
205 (L2 (+ dist (- var))) | |
206 (R2 (min (- max cur) (+ dist var)))) | |
207 (if (< R1 (- min cur)) (setq L1 nil R1 nil)) | |
208 (if (> L2 (- max cur)) (setq L2 nil R2 nil)) | |
209 (cond ((and L1 (< delta L1)) L1) | |
210 ((and R1 (< delta R1)) delta) | |
211 ((and R1 (< delta 0)) R1) | |
212 ((and L2 (< delta L2)) L2) | |
213 ((and R2 (< delta R2)) delta) | |
214 (R2) | |
215 ((or R1 L2)) | |
216 (t 0)))) | |
5119 | 217 |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
218 (defun mouse-avoidance-nudge-mouse () |
56730
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
219 ;; Push the mouse a little way away, possibly animating the move. |
7015 | 220 ;; For these modes, state keeps track of the total offset that we've |
221 ;; accumulated, and tries to keep it close to zero. | |
5119 | 222 (let* ((cur (mouse-position)) |
7015 | 223 (cur-frame (car cur)) |
224 (cur-pos (cdr cur)) | |
56730
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
225 (pos (window-edges)) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
226 (wleft (pop pos)) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
227 (wtop (pop pos)) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
228 (wright (pop pos)) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
229 (wbot (pop pos)) |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
230 (deltax (mouse-avoidance-delta |
7015 | 231 (car cur-pos) (- (random mouse-avoidance-nudge-var) |
232 (car mouse-avoidance-state)) | |
233 mouse-avoidance-nudge-dist mouse-avoidance-nudge-var | |
56730
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
234 wleft (1- wright))) |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
235 (deltay (mouse-avoidance-delta |
7015 | 236 (cdr cur-pos) (- (random mouse-avoidance-nudge-var) |
237 (cdr mouse-avoidance-state)) | |
238 mouse-avoidance-nudge-dist mouse-avoidance-nudge-var | |
56730
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
239 wtop (1- wbot)))) |
7015 | 240 (setq mouse-avoidance-state |
241 (cons (+ (car mouse-avoidance-state) deltax) | |
242 (+ (cdr mouse-avoidance-state) deltay))) | |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
243 (if (or (eq mouse-avoidance-mode 'animate) |
5119 | 244 (eq mouse-avoidance-mode 'proteus)) |
72334
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
245 (let ((i 0.0) |
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
246 (incr (max .1 (/ 1.0 mouse-avoidance-nudge-dist)))) |
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
247 (setq mouse-avoidance-animating-pointer t) |
5119 | 248 (while (<= i 1) |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
249 (mouse-avoidance-set-mouse-position |
7015 | 250 (cons (+ (car cur-pos) (round (* i deltax))) |
251 (+ (cdr cur-pos) (round (* i deltay))))) | |
72334
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
252 (setq i (+ i incr)) |
5119 | 253 (if (eq mouse-avoidance-mode 'proteus) |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
254 (mouse-avoidance-set-pointer-shape |
11269
26d830b04546
avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents:
7879
diff
changeset
|
255 (mouse-avoidance-random-shape))) |
72334
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
256 (sit-for mouse-avoidance-animation-delay)) |
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
257 (setq mouse-avoidance-animating-pointer nil)) |
7556 | 258 (mouse-avoidance-set-mouse-position (cons (+ (car (cdr cur)) deltax) |
259 (+ (cdr (cdr cur)) deltay)))))) | |
5119 | 260 |
261 (defun mouse-avoidance-random-shape () | |
262 "Return a random cursor shape. | |
263 This assumes that any variable whose name begins with x-pointer- and | |
264 has an integer value is a valid cursor shape. You might want to | |
265 redefine this function to suit your own tastes." | |
266 (if (null mouse-avoidance-pointer-shapes) | |
267 (progn | |
268 (setq mouse-avoidance-pointer-shapes | |
29550
48ef50f314bf
(mouse-avoidance-random-shape): Don't quote lambda.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29200
diff
changeset
|
269 (mapcar (lambda (x) (symbol-value (intern x))) |
5119 | 270 (all-completions "x-pointer-" obarray |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
271 (lambda (x) |
5119 | 272 (and (boundp x) |
273 (integerp (symbol-value x))))))) | |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
274 (setq mouse-avoidance-n-pointer-shapes |
5119 | 275 (length mouse-avoidance-pointer-shapes)))) |
276 (nth (random mouse-avoidance-n-pointer-shapes) | |
277 mouse-avoidance-pointer-shapes)) | |
278 | |
56730
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
279 (defun mouse-avoidance-ignore-p () |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
280 (let ((mp (mouse-position))) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
281 (or executing-kbd-macro ; don't check inside macro |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
282 (null (cadr mp)) ; don't move unless in an Emacs frame |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
283 (not (eq (car mp) (selected-frame))) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
284 ;; Don't do anything if last event was a mouse event. |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
285 ;; FIXME: this code fails in the case where the mouse was moved |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
286 ;; since the last key-press but without generating any event. |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
287 (and (consp last-input-event) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
288 (symbolp (car last-input-event)) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
289 (let ((modifiers (event-modifiers (car last-input-event)))) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
290 (or (memq (car last-input-event) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
291 '(mouse-movement scroll-bar-movement |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
292 select-window switch-frame)) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
293 (memq 'click modifiers) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
294 (memq 'double modifiers) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
295 (memq 'triple modifiers) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
296 (memq 'drag modifiers) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
297 (memq 'down modifiers))))))) |
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
298 |
72334
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
299 (defun mouse-avoidance-banish () |
56730
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
300 (if (not (mouse-avoidance-ignore-p)) |
7015 | 301 (mouse-avoidance-banish-mouse))) |
302 | |
72334
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
303 (defun mouse-avoidance-exile () |
7015 | 304 ;; For exile mode, the state is nil when the mouse is in its normal |
305 ;; position, and set to the old mouse-position when the mouse is in exile. | |
56730
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
306 (if (not (mouse-avoidance-ignore-p)) |
7015 | 307 (let ((mp (mouse-position))) |
308 (cond ((and (not mouse-avoidance-state) | |
309 (mouse-avoidance-too-close-p mp)) | |
310 (setq mouse-avoidance-state mp) | |
311 (mouse-avoidance-banish-mouse)) | |
312 ((and mouse-avoidance-state | |
313 (not (mouse-avoidance-too-close-p mouse-avoidance-state))) | |
314 (if (and (eq (car mp) (selected-frame)) | |
315 (equal (cdr mp) (mouse-avoidance-banish-destination))) | |
316 (mouse-avoidance-set-mouse-position | |
317 ;; move back only if user has not moved mouse | |
318 (cdr mouse-avoidance-state))) | |
319 ;; but clear state anyway, to be ready for another move | |
320 (setq mouse-avoidance-state nil)))))) | |
5119 | 321 |
72334
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
322 (defun mouse-avoidance-fancy () |
7015 | 323 ;; Used for the "fancy" modes, ie jump et al. |
72334
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
324 (if (and (not mouse-avoidance-animating-pointer) |
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
325 (not (mouse-avoidance-ignore-p)) |
7015 | 326 (mouse-avoidance-too-close-p (mouse-position))) |
5745 | 327 (let ((old-pos (mouse-position))) |
328 (mouse-avoidance-nudge-mouse) | |
11269
26d830b04546
avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents:
7879
diff
changeset
|
329 (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
|
330 ;; This should never happen. |
26d830b04546
avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents:
7879
diff
changeset
|
331 (apply 'set-mouse-position old-pos))))) |
5119 | 332 |
11269
26d830b04546
avoid.el Add autoload cookies; doc fixes.
Boris Goldowsky <boris@gnu.org>
parents:
7879
diff
changeset
|
333 ;;;###autoload |
5119 | 334 (defun mouse-avoidance-mode (&optional mode) |
335 "Set cursor avoidance mode to MODE. | |
7015 | 336 MODE should be one of the symbols `banish', `exile', `jump', `animate', |
5745 | 337 `cat-and-mouse', `proteus', or `none'. |
338 | |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
339 If MODE is nil, toggle mouse avoidance between `none' and `banish' |
5745 | 340 modes. Positive numbers and symbols other than the above are treated |
341 as equivalent to `banish'; negative numbers and `-' are equivalent to `none'. | |
342 | |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
343 Effects of the different modes: |
7556 | 344 * banish: Move the mouse to the upper-right corner on any keypress. |
345 * exile: Move the mouse to the corner only if the cursor gets too close, | |
7015 | 346 and allow it to return once the cursor is out of the way. |
7556 | 347 * jump: If the cursor gets too close to the mouse, displace the mouse |
7015 | 348 a random distance & direction. |
7556 | 349 * animate: As `jump', but shows steps along the way for illusion of motion. |
350 * cat-and-mouse: Same as `animate'. | |
351 * proteus: As `animate', but changes the shape of the mouse pointer too. | |
5745 | 352 |
7015 | 353 Whenever the mouse is moved, the frame is also raised. |
354 | |
7879
e0f3cfb55df7
(mouse-avoidance-threshold): Renamed from ...threshhold.
Richard M. Stallman <rms@gnu.org>
parents:
7849
diff
changeset
|
355 \(see `mouse-avoidance-threshold' for definition of \"too close\", |
5745 | 356 and `mouse-avoidance-nudge-dist' and `mouse-avoidance-nudge-var' for |
357 definition of \"random distance\".)" | |
5119 | 358 (interactive |
359 (list (intern (completing-read | |
360 "Select cursor avoidance technique (SPACE for list): " | |
7015 | 361 '(("banish") ("exile") ("jump") ("animate") |
362 ("cat-and-mouse") ("proteus") ("none")) | |
5119 | 363 nil t)))) |
364 (if (eq mode 'cat-and-mouse) | |
365 (setq mode 'animate)) | |
19323
b686f7cb6849
(mouse-avoidance-timer): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17436
diff
changeset
|
366 (if mouse-avoidance-timer |
b686f7cb6849
(mouse-avoidance-timer): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17436
diff
changeset
|
367 (cancel-timer mouse-avoidance-timer)) |
b686f7cb6849
(mouse-avoidance-timer): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17436
diff
changeset
|
368 (setq mouse-avoidance-timer nil) |
14897
9cce31ba2d61
(mouse-avoidance-old-pointer-shape): New vbl.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
369 |
9cce31ba2d61
(mouse-avoidance-old-pointer-shape): New vbl.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
370 ;; Restore pointer shape if necessary |
9cce31ba2d61
(mouse-avoidance-old-pointer-shape): New vbl.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
371 (if (eq mouse-avoidance-mode 'proteus) |
9cce31ba2d61
(mouse-avoidance-old-pointer-shape): New vbl.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
372 (mouse-avoidance-set-pointer-shape mouse-avoidance-old-pointer-shape)) |
9cce31ba2d61
(mouse-avoidance-old-pointer-shape): New vbl.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
373 |
9cce31ba2d61
(mouse-avoidance-old-pointer-shape): New vbl.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
374 ;; Do additional setup depending on version of mode requested |
5119 | 375 (cond ((eq mode 'none) |
376 (setq mouse-avoidance-mode nil)) | |
377 ((or (eq mode 'jump) | |
378 (eq mode 'animate) | |
379 (eq mode 'proteus)) | |
19323
b686f7cb6849
(mouse-avoidance-timer): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17436
diff
changeset
|
380 (setq mouse-avoidance-timer |
72334
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
381 (run-with-idle-timer 0.1 t 'mouse-avoidance-fancy)) |
7015 | 382 (setq mouse-avoidance-mode mode |
14897
9cce31ba2d61
(mouse-avoidance-old-pointer-shape): New vbl.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
383 mouse-avoidance-state (cons 0 0) |
38539
f150471f4c55
(mouse-avoidance-too-close-p): If the frame lacks a
Eli Zaretskii <eliz@gnu.org>
parents:
33809
diff
changeset
|
384 mouse-avoidance-old-pointer-shape |
f150471f4c55
(mouse-avoidance-too-close-p): If the frame lacks a
Eli Zaretskii <eliz@gnu.org>
parents:
33809
diff
changeset
|
385 (and (boundp 'x-pointer-shape) x-pointer-shape))) |
7015 | 386 ((eq mode 'exile) |
19323
b686f7cb6849
(mouse-avoidance-timer): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17436
diff
changeset
|
387 (setq mouse-avoidance-timer |
72334
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
388 (run-with-idle-timer 0.1 t 'mouse-avoidance-exile)) |
7015 | 389 (setq mouse-avoidance-mode mode |
390 mouse-avoidance-state nil)) | |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
391 ((or (eq mode 'banish) |
5119 | 392 (eq mode t) |
393 (and (null mode) (null mouse-avoidance-mode)) | |
394 (and mode (> (prefix-numeric-value mode) 0))) | |
19323
b686f7cb6849
(mouse-avoidance-timer): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17436
diff
changeset
|
395 (setq mouse-avoidance-timer |
72334
872d10db66d6
* avoid.el (mouse-avoidance-animating-pointer): New var.
Chong Yidong <cyd@stupidchicken.com>
parents:
70412
diff
changeset
|
396 (run-with-idle-timer 0.1 t 'mouse-avoidance-banish)) |
5119 | 397 (setq mouse-avoidance-mode 'banish)) |
7015 | 398 (t (setq mouse-avoidance-mode nil))) |
399 (force-mode-line-update)) | |
5119 | 400 |
17067
15b18d794b75
Don't put "Avoid" in the mode line.
Karl Heuer <kwzh@gnu.org>
parents:
14897
diff
changeset
|
401 ;; Most people who use avoid mode leave it on all the time, so it's not |
15b18d794b75
Don't put "Avoid" in the mode line.
Karl Heuer <kwzh@gnu.org>
parents:
14897
diff
changeset
|
402 ;; very informative to announce it in the mode line. |
15b18d794b75
Don't put "Avoid" in the mode line.
Karl Heuer <kwzh@gnu.org>
parents:
14897
diff
changeset
|
403 ;;(or (assq 'mouse-avoidance-mode minor-mode-alist) |
15b18d794b75
Don't put "Avoid" in the mode line.
Karl Heuer <kwzh@gnu.org>
parents:
14897
diff
changeset
|
404 ;; (setq minor-mode-alist (cons '(mouse-avoidance-mode " Avoid") |
15b18d794b75
Don't put "Avoid" in the mode line.
Karl Heuer <kwzh@gnu.org>
parents:
14897
diff
changeset
|
405 ;; minor-mode-alist))) |
5119 | 406 |
20512
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
407 ;; Needed for custom. |
30765
1e5a486b8b25
punctuation fixes in doc strings
Sam Steingold <sds@gnu.org>
parents:
29550
diff
changeset
|
408 (if mouse-avoidance-mode |
20512
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
409 (mouse-avoidance-mode mouse-avoidance-mode)) |
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
410 |
56730
a00d573807f9
(mouse-avoidance-ignore-p): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56586
diff
changeset
|
411 ;; arch-tag: 64ad4ef8-a870-4183-8d96-3aa93b7a6800 |
20512
65399b8cd0ad
(mouse-avoidance-mode): Variable customized to automatically load the package.
Richard M. Stallman <rms@gnu.org>
parents:
19323
diff
changeset
|
412 ;;; avoid.el ends here |