Allow further `mouse-avoidance-mode' customisations
* avoid.el (mouse-avoidance-banish-position): New variable. (mouse-avoidance-banish-destination): Use it.
This commit is contained in:
parent
7b55b8bf5a
commit
0f84437ba2
2 changed files with 57 additions and 5 deletions
3
etc/NEWS
3
etc/NEWS
|
@ -41,6 +41,9 @@ been adding them there, put them somewhere else, eg site-lisp.
|
|||
** M-x move-to-column, if called interactively with no prefix arg, now
|
||||
prompts for a column number.
|
||||
|
||||
** `mouse-avoidance-banish-position' can now be used to customize
|
||||
`mouse-avoidance-mode' further.
|
||||
|
||||
|
||||
* Changes in Specialized Modes and Packages in Emacs 24.2
|
||||
|
||||
|
|
|
@ -115,6 +115,23 @@ Only applies in Mouse Avoidance modes `animate' and `jump'."
|
|||
:type 'integer
|
||||
:group 'avoid)
|
||||
|
||||
(defcustom mouse-avoidance-banish-position '((frame-or-window . frame)
|
||||
(side . right)
|
||||
(side-pos . 3)
|
||||
(top-or-bottom . top)
|
||||
(top-or-bottom-pos . 0))
|
||||
"Position to which Mouse Avoidance mode `banish' moves the mouse.
|
||||
An alist where keywords mean:
|
||||
FRAME-OR-WINDOW: banish the mouse to corner of frame or window.
|
||||
SIDE: banish the mouse on right or left corner of frame or window.
|
||||
SIDE-POS: Distance from right or left edge of frame or window.
|
||||
TOP-OR-BOTTOM: banish the mouse to top or bottom of frame or window.
|
||||
TOP-OR-BOTTOM-POS: Distance from top or bottom edge of frame or window."
|
||||
:group 'avoid
|
||||
:type '(alist :key-type symbol :value-type symbol)
|
||||
:options '(frame-or-window side (side-pos integer)
|
||||
top-or-bottom (top-or-bottom-pos integer)))
|
||||
|
||||
;; Internal variables
|
||||
(defvar mouse-avoidance-state nil)
|
||||
(defvar mouse-avoidance-pointer-shapes nil)
|
||||
|
@ -183,13 +200,45 @@ Acceptable distance is defined by `mouse-avoidance-threshold'."
|
|||
|
||||
(defun mouse-avoidance-banish-destination ()
|
||||
"The position to which Mouse Avoidance mode `banish' moves the mouse.
|
||||
You can redefine this if you want the mouse banished to a different corner."
|
||||
(let* ((pos (window-edges)))
|
||||
(cons (- (nth 2 pos) 2)
|
||||
(nth 1 pos))))
|
||||
|
||||
If you want the mouse banished to a different corner set
|
||||
`mouse-avoidance-banish-position' as you need."
|
||||
(let* ((fra-or-win (assoc-default
|
||||
'frame-or-window
|
||||
mouse-avoidance-banish-position 'eq))
|
||||
(list-values (case fra-or-win
|
||||
(frame (list 0 0 (frame-width) (frame-height)))
|
||||
(window (window-edges))))
|
||||
(alist (loop for v in list-values
|
||||
for k in '(left top right bottom)
|
||||
collect (cons k v)))
|
||||
(side (assoc-default
|
||||
'side
|
||||
mouse-avoidance-banish-position 'eq))
|
||||
(side-dist (assoc-default
|
||||
'side-pos
|
||||
mouse-avoidance-banish-position 'eq))
|
||||
(top-or-bottom (assoc-default
|
||||
'top-or-bottom
|
||||
mouse-avoidance-banish-position 'eq))
|
||||
(top-or-bottom-dist (assoc-default
|
||||
'top-or-bottom-pos
|
||||
mouse-avoidance-banish-position 'eq))
|
||||
(side-fn (case side
|
||||
(left '+)
|
||||
(right '-)))
|
||||
(top-or-bottom-fn (case top-or-bottom
|
||||
(top '+)
|
||||
(bottom '-))))
|
||||
(cons (funcall side-fn ; -/+
|
||||
(assoc-default side alist 'eq) ; right or left
|
||||
side-dist) ; distance from side
|
||||
(funcall top-or-bottom-fn ; -/+
|
||||
(assoc-default top-or-bottom alist 'eq) ; top/bottom
|
||||
top-or-bottom-dist)))) ; distance from top/bottom
|
||||
|
||||
(defun mouse-avoidance-banish-mouse ()
|
||||
;; Put the mouse pointer in the upper-right corner of the current frame.
|
||||
"Put the mouse pointer to `mouse-avoidance-banish-position'."
|
||||
(mouse-avoidance-set-mouse-position (mouse-avoidance-banish-destination)))
|
||||
|
||||
(defsubst mouse-avoidance-delta (cur delta dist var min max)
|
||||
|
|
Loading…
Add table
Reference in a new issue