emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r107893: Allow further `mouse-avoidan


From: Lars Ingebrigtsen
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r107893: Allow further `mouse-avoidance-mode' customisations
Date: Fri, 13 Apr 2012 23:15:22 +0200
User-agent: Bazaar (2.3.1)

------------------------------------------------------------
revno: 107893
author: Thierry Volpiatto <address@hidden>
committer: Lars Ingebrigtsen <address@hidden>
branch nick: trunk
timestamp: Fri 2012-04-13 23:15:22 +0200
message:
  Allow further `mouse-avoidance-mode' customisations
  
  * avoid.el (mouse-avoidance-banish-position): New variable.
  (mouse-avoidance-banish-destination): Use it.
modified:
  etc/NEWS
  lisp/avoid.el
=== modified file 'etc/NEWS'
--- a/etc/NEWS  2012-04-13 06:20:39 +0000
+++ b/etc/NEWS  2012-04-13 21:15:22 +0000
@@ -41,6 +41,9 @@
 ** 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
 

=== modified file 'lisp/avoid.el'
--- a/lisp/avoid.el     2012-01-19 07:21:25 +0000
+++ b/lisp/avoid.el     2012-04-13 21:15:22 +0000
@@ -115,6 +115,23 @@
   :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 @@
 
 (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)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]