summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1996-06-21 16:15:21 +0000
committerRichard M. Stallman <rms@gnu.org>1996-06-21 16:15:21 +0000
commit010bb2d3bc58b94befa10366330b698ae0c05b92 (patch)
treec050b44494b01eba03b1644c55fa0bb1f0399e0f
parent670b562ceae780262bfe80dd30ab294401376d95 (diff)
downloademacs-010bb2d3bc58b94befa10366330b698ae0c05b92.tar.gz
(mouse-drag-region): Be smart about which end
gets point and which end gets the mark.
-rw-r--r--lisp/mouse.el19
1 files changed, 16 insertions, 3 deletions
diff --git a/lisp/mouse.el b/lisp/mouse.el
index bd4e439b21e..41fda55689b 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -574,9 +574,22 @@ remains active. Otherwise, it remains until the next input event."
(cons event unread-command-events)))
(if (not (= (overlay-start mouse-drag-overlay)
(overlay-end mouse-drag-overlay)))
- (let (last-command this-command)
- (push-mark (overlay-start mouse-drag-overlay) t t)
- (goto-char (overlay-end mouse-drag-overlay))
+ (let* ((stop-point (posn-point (event-end event)))
+ ;; The end that comes from where we ended the drag.
+ ;; Point goes here.
+ (region-termination
+ (if (< stop-point start-point)
+ (overlay-start mouse-drag-overlay)
+ (overlay-end mouse-drag-overlay)))
+ ;; The end that comes from where we started the drag.
+ ;; Mark goes there.
+ (region-commencement
+ (- (+ (overlay-end mouse-drag-overlay)
+ (overlay-start mouse-drag-overlay))
+ region-termination))
+ last-command this-command)
+ (push-mark region-commencement t t)
+ (goto-char region-termination)
(copy-region-as-kill (point) (mark t))
(mouse-show-mark)
(mouse-set-region-1))