all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Thierry Volpiatto <thierry.volpiatto@gmail.com>
To: Juri Linkov <juri@jurta.org>
Cc: 10165@debbugs.gnu.org
Subject: bug#10165: [PATCH] Allow setting corner in mouse avoidance mode.
Date: Mon, 05 Dec 2011 19:06:26 +0100	[thread overview]
Message-ID: <871usilwpp.fsf@gmail.com> (raw)
In-Reply-To: <87d3c370j8.fsf@mail.jurta.org> (Juri Linkov's message of "Mon, 05 Dec 2011 12:52:59 +0200")

[-- Attachment #1: Type: text/plain, Size: 586 bytes --]

Juri Linkov <juri@jurta.org> writes:

>> Use this, as there is an error in precedent patch (still using value of
>> old variable), sorry.
>
> Thanks.  I think names like `frame-or-window' and `top-or-bottom-pos'
> are quite confusing.
Yes, if you have better names tell me.

Also here on last version of patch I am using symbol instead of sexp
which is better.

> But fortunately we could avoid them.
Can you develop this?

Find here the last version of patch for review, (more or less what you
have actually) I will apply as soon Emacs is no more in feature freeze 
if no objections.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: mouse avoidance banish --]
[-- Type: text/x-diff, Size: 4136 bytes --]

##Merge of all patches applied from revision 118117
## patch-r118037: * lisp/avoid.el:  Allow setting in which corner banish move the mouse.
## patch-r118084: * lisp/avoid.el (mouse-avoidance-banish-distance-from-edge): Allow banishing mouse in frame or window corner.
## patch-r118114: * lisp/avoid.el Allow specifying a vertical position when banishing mouse.
## 
diff --git a/lisp/avoid.el b/lisp/avoid.el
--- a/lisp/avoid.el
+++ b/lisp/avoid.el
@@ -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)

[-- Attachment #3: Type: text/plain, Size: 83 bytes --]


-- 
  Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997 

  reply	other threads:[~2011-12-05 18:06 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-30  5:58 bug#10165: [PATCH] Allow setting corner in mouse avoidance mode Thierry Volpiatto
2011-11-30  6:05 ` Thierry Volpiatto
2011-11-30  9:32 ` Juri Linkov
2011-11-30 10:31   ` Thierry Volpiatto
2011-11-30 17:40     ` Thierry Volpiatto
2011-12-01  7:48       ` Juri Linkov
2011-12-01  8:45         ` Thierry Volpiatto
2011-12-02  7:30         ` Thierry Volpiatto
2011-12-02  7:36           ` Thierry Volpiatto
2011-12-02 10:52             ` Juri Linkov
2011-12-02 11:24               ` Thierry Volpiatto
2011-12-02 17:07                 ` Juri Linkov
2011-12-02 17:35                   ` Thierry Volpiatto
2011-12-03  8:58                     ` Thierry Volpiatto
2011-12-03  9:26                       ` Thierry Volpiatto
2011-12-05 10:52                         ` Juri Linkov
2011-12-05 18:06                           ` Thierry Volpiatto [this message]
2011-12-07 17:30                             ` Juri Linkov
2011-12-07 18:04                               ` Thierry Volpiatto
2011-12-07 19:52                                 ` Juri Linkov
2011-12-08  6:33                                   ` Thierry Volpiatto
2011-12-08 20:20                                     ` Stefan Monnier
2012-04-12 20:04                                     ` Lars Magne Ingebrigtsen
2012-04-12 21:12                                       ` Thierry Volpiatto
2012-04-13 15:19                                       ` Thierry Volpiatto
2012-04-13 21:13                                         ` Lars Ingebrigtsen
2012-04-14  5:14                                           ` Thierry Volpiatto

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=871usilwpp.fsf@gmail.com \
    --to=thierry.volpiatto@gmail.com \
    --cc=10165@debbugs.gnu.org \
    --cc=juri@jurta.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.