Mercurial > emacs
changeset 109146:6b22e0739484
Fix multi-click selection behavior (Bug#6565).
* lisp/mouse.el (mouse-drag-track): Call mouse-start-end to handle
word/line selection (Bug#6565).
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Mon, 05 Jul 2010 12:42:50 -0400 |
parents | d0090a8b66c3 |
children | 783986775ee8 |
files | lisp/ChangeLog lisp/mouse.el |
diffstat | 2 files changed, 16 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Mon Jul 05 09:29:35 2010 -0700 +++ b/lisp/ChangeLog Mon Jul 05 12:42:50 2010 -0400 @@ -1,3 +1,8 @@ +2010-07-05 Chong Yidong <cyd@stupidchicken.com> + + * mouse.el (mouse-drag-track): Call mouse-start-end to handle + word/line selection (Bug#6565). + 2010-07-04 Juanma Barranquero <lekktu@gmail.com> * net/dbus.el (dbus-send-signal): Declare function.
--- a/lisp/mouse.el Mon Jul 05 09:29:35 2010 -0700 +++ b/lisp/mouse.el Mon Jul 05 12:42:50 2010 -0400 @@ -936,25 +936,30 @@ ;; treatment, in case we click on a link inside an ;; intangible text. (mouse-on-link-p start-posn))) + (click-count (1- (event-click-count start-event))) ;; Suppress automatic hscrolling, because that is a nuisance ;; when setting point near the right fringe (but see below). (automatic-hscrolling-saved automatic-hscrolling) (automatic-hscrolling nil) event end end-point) - (setq mouse-selection-click-count (1- (event-click-count start-event))) + (setq mouse-selection-click-count click-count) ;; In case the down click is in the middle of some intangible text, ;; use the end of that text, and put it in START-POINT. (if (< (point) start-point) (goto-char start-point)) (setq start-point (point)) - ;; Activate the mark. + ;; Activate the region, using `mouse-start-end' to determine where + ;; to put point and mark (e.g., double-click will select a word). (setq transient-mark-mode (if (eq transient-mark-mode 'lambda) '(only) (cons 'only transient-mark-mode))) - (push-mark nil nil t) + (let ((range (mouse-start-end start-point start-point click-count))) + (goto-char (nth 0 range)) + (push-mark nil nil t) + (goto-char (nth 1 range))) ;; Track the mouse until we get a non-movement event. (track-mouse @@ -1017,8 +1022,9 @@ (copy-region-as-kill (mark) (point))))) ;; If point hasn't moved, run the binding of the ;; terminating up-event. - (if do-multi-click (goto-char start-point)) - (deactivate-mark) + (if do-multi-click + (goto-char start-point) + (deactivate-mark)) (when (and (functionp fun) (= start-hscroll (window-hscroll start-window)) ;; Don't run the up-event handler if the window