emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r101093: Fix mouse dragging of words


From: Chong Yidong
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r101093: Fix mouse dragging of words and lines (Bug#6840).
Date: Sun, 15 Aug 2010 22:08:01 -0400
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 101093
committer: Chong Yidong <address@hidden>
branch nick: trunk
timestamp: Sun 2010-08-15 22:08:01 -0400
message:
  Fix mouse dragging of words and lines (Bug#6840).
  
  * mouse.el (mouse--drag-set-mark-and-point): New function.
  (mouse-drag-track): Use LOCATION arg to push-mark.  Use
  mouse--drag-set-mark-and-point to take click-count into
  consideration when updating point and mark (Bug#6840).
modified:
  lisp/ChangeLog
  lisp/mouse.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2010-08-15 00:04:53 +0000
+++ b/lisp/ChangeLog    2010-08-16 02:08:01 +0000
@@ -1,5 +1,12 @@
 2010-08-15  Chong Yidong  <address@hidden>
 
+       * mouse.el (mouse--drag-set-mark-and-point): New function.
+       (mouse-drag-track): Use LOCATION arg to push-mark.  Use
+       mouse--drag-set-mark-and-point to take click-count into
+       consideration when updating point and mark (Bug#6840).
+
+2010-08-15  Chong Yidong  <address@hidden>
+
        * progmodes/compile.el (compilation-error-regexp-alist-alist):
        Give the Ruby rule a lower priority than Gnu (Bug#6778).
 

=== modified file 'lisp/mouse.el'
--- a/lisp/mouse.el     2010-08-14 15:41:22 +0000
+++ b/lisp/mouse.el     2010-08-16 02:08:01 +0000
@@ -954,8 +954,7 @@
              '(only)
            (cons 'only transient-mark-mode)))
     (let ((range (mouse-start-end start-point start-point click-count)))
-      (goto-char (nth 0 range))
-      (push-mark nil t t)
+      (push-mark (nth 0 range) t t)
       (goto-char (nth 1 range)))
 
     ;; Track the mouse until we get a non-movement event.
@@ -974,14 +973,8 @@
                end-point (posn-point end))
          (if (and (eq (posn-window end) start-window)
                   (integer-or-marker-p end-point))
-             ;; If moving in the original window, move point by going
-             ;; to start first, so that if end is in intangible text,
-             ;; point jumps away from start.  Don't do it if
-             ;; start=end, or a single click would select a region if
-             ;; it's on intangible text.
-             (unless (= start-point end-point)
-               (goto-char start-point)
-               (goto-char end-point))
+             (mouse--drag-set-mark-and-point start-point
+                                             end-point click-count)
            (let ((mouse-row (cdr (cdr (mouse-position)))))
              (cond
               ((null mouse-row))
@@ -999,8 +992,9 @@
                 (eq (posn-window end) start-window)
                 (integer-or-marker-p end-point)
                 (/= start-point end-point))
-       (goto-char start-point)
-       (goto-char end-point))
+       (mouse--drag-set-mark-and-point start-point
+                                       end-point click-count))
+
       ;; Find its binding.
       (let* ((fun (key-binding (vector (car event))))
             (do-multi-click (and (> (event-click-count event) 0)
@@ -1051,6 +1045,21 @@
                (put 'mouse-2 'event-kind 'mouse-click)))
            (push event unread-command-events)))))))
 
+(defun mouse--drag-set-mark-and-point (start click click-count)
+  (let* ((range (mouse-start-end start click click-count))
+        (beg (nth 0 range))
+        (end (nth 1 range)))
+    (cond ((eq (mark) beg)
+          (goto-char end))
+         ((eq (mark) end)
+          (goto-char beg))
+         ((< click (mark))
+          (set-mark end)
+          (goto-char beg))
+         (t
+          (set-mark beg)
+          (goto-char end)))))
+
 (defun mouse--remap-link-click-p (start-event end-event)
   (or (and (eq mouse-1-click-follows-link 'double)
           (= (event-click-count start-event) 2))
@@ -1166,8 +1175,7 @@
         ((= mode 2)
         (list (save-excursion
                 (goto-char start)
-                (beginning-of-line 1)
-                (point))
+                (line-beginning-position 1))
               (save-excursion
                 (goto-char end)
                 (forward-line 1)


reply via email to

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