aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Berman2016-07-08 17:36:55 +0200
committerStephen Berman2016-07-08 17:36:55 +0200
commitd0c0b71d889ff223d2e5073b733f4047d541343b (patch)
tree30536c1fa00c205a6f462e628c99e313601ee4d2
parent381c6bbfb3eaa69ece0fce8dd92ccd3a1ef2729f (diff)
downloademacs-d0c0b71d889ff223d2e5073b733f4047d541343b.tar.gz
emacs-d0c0b71d889ff223d2e5073b733f4047d541343b.zip
Allow selecting region with mouse to move point to beginning
* etc/NEWS: Mention new user option `mouse-select-region-move-to-beginning'. * doc/emacs/frames.texi (Mouse Commands): Add cross-reference to the following. (Word and Line Mouse): Describe how double-clicking mouse-1 to activate region and `mouse-select-region-move-to-beginning' affect point. * lisp/mouse.el (mouse-select-region-move-to-beginning): New defcustom. (mouse-set-point): Use it. (Bug#23478)
-rw-r--r--doc/emacs/frames.texi16
-rw-r--r--etc/NEWS7
-rw-r--r--lisp/mouse.el19
3 files changed, 37 insertions, 5 deletions
diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi
index 7e6006262ce..03172b62cf5 100644
--- a/doc/emacs/frames.texi
+++ b/doc/emacs/frames.texi
@@ -97,7 +97,8 @@ ring; on a second click, kill it (@code{mouse-save-then-kill}).
97invoked by clicking with the left mouse button, @kbd{mouse-1}, in the 97invoked by clicking with the left mouse button, @kbd{mouse-1}, in the
98text area of a window. This moves point to the position where you 98text area of a window. This moves point to the position where you
99clicked. If that window was not the selected window, it becomes the 99clicked. If that window was not the selected window, it becomes the
100selected window. 100selected window. You can also activate a region by double-clicking
101mouse-1 (@pxref{Word and Line Mouse}).
101 102
102@vindex x-mouse-click-focus-ignore-position 103@vindex x-mouse-click-focus-ignore-position
103 Normally, if the frame you clicked in was not the selected frame, it 104 Normally, if the frame you clicked in was not the selected frame, it
@@ -215,7 +216,7 @@ also copied to the kill ring.
215 216
216@table @kbd 217@table @kbd
217@item Double-mouse-1 218@item Double-mouse-1
218Select the text around the word which you click on. 219Select the text around the word or character which you click on.
219 220
220Double-clicking on a character with symbol syntax (such as 221Double-clicking on a character with symbol syntax (such as
221underscore, in C mode) selects the symbol surrounding that character. 222underscore, in C mode) selects the symbol surrounding that character.
@@ -226,6 +227,17 @@ ends. Double-clicking on a character with string-delimiter syntax
226constant (Emacs uses heuristics to figure out whether that character 227constant (Emacs uses heuristics to figure out whether that character
227is the beginning or the end of it). 228is the beginning or the end of it).
228 229
230Double-clicking on the beginning of a parenthetical grouping or
231beginning string-delimiter moves point to the end of the region,
232scrolling the buffer display forward if necessary to show the new
233location of point. Double-clicking on the end of a parenthetical
234grouping or end string-delimiter keeps point at the end of the region
235by default, so the beginning of the region will not be visible if it
236is above the top of the window; setting the user option
237@code{mouse-select-region-move-to-beginning} to non-nil changes this
238to move point to the beginning of the region, scrolling the display
239backward if necessary.
240
229@item Double-Drag-mouse-1 241@item Double-Drag-mouse-1
230Select the text you drag across, in the form of whole words. 242Select the text you drag across, in the form of whole words.
231 243
diff --git a/etc/NEWS b/etc/NEWS
index 54b62f02ee3..5472dd84b77 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -56,6 +56,13 @@ affected by this, as SGI stopped supporting IRIX in December 2013.
56 56
57* Changes in Emacs 25.2 57* Changes in Emacs 25.2
58 58
59+++
60** The new user option 'mouse-select-region-move-to-beginning'
61controls the position of point when double-clicking mouse-1 on the end
62of a parenthetical grouping or string-delimiter: the default value nil
63keeps point at the end of the region, setting it to non-nil moves
64point to the beginning of the region.
65
59--- 66---
60** 'find-library-name' will now fall back on looking at 'load-history' 67** 'find-library-name' will now fall back on looking at 'load-history'
61to try to locate libraries that have been loaded with an explicit path 68to try to locate libraries that have been loaded with an explicit path
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 53d5a22167e..135e1f5d71f 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -538,15 +538,28 @@ must be one of the symbols `header', `mode', or `vertical'."
538 (interactive "e") 538 (interactive "e")
539 (mouse-drag-line start-event 'vertical)) 539 (mouse-drag-line start-event 'vertical))
540 540
541(defcustom mouse-select-region-move-to-beginning nil
542 "Effect of selecting a region extending backward from double click.
543Nil means keep point at the position clicked (region end);
544non-nil means move point to beginning of region."
545 :version "25.2"
546 :type '(choice (const :tag "Don't move point" nil)
547 (const :tag "Move point to beginning of region" t)))
548
541(defun mouse-set-point (event &optional promote-to-region) 549(defun mouse-set-point (event &optional promote-to-region)
542 "Move point to the position clicked on with the mouse. 550 "Move point to the position clicked on with the mouse.
543This should be bound to a mouse click event type. 551This should be bound to a mouse click event type.
544If PROMOTE-TO-REGION is non-nil and event is a multiple-click, 552If PROMOTE-TO-REGION is non-nil and event is a multiple-click, select
545select the corresponding element around point." 553the corresponding element around point, with the resulting position of
554point determined by `mouse-select-region-move-to-beginning'."
546 (interactive "e\np") 555 (interactive "e\np")
547 (mouse-minibuffer-check event) 556 (mouse-minibuffer-check event)
548 (if (and promote-to-region (> (event-click-count event) 1)) 557 (if (and promote-to-region (> (event-click-count event) 1))
549 (mouse-set-region event) 558 (progn
559 (mouse-set-region event)
560 (when mouse-select-region-move-to-beginning
561 (when (> (posn-point (event-start event)) (region-beginning))
562 (exchange-point-and-mark))))
550 ;; Use event-end in case called from mouse-drag-region. 563 ;; Use event-end in case called from mouse-drag-region.
551 ;; If EVENT is a click, event-end and event-start give same value. 564 ;; If EVENT is a click, event-end and event-start give same value.
552 (posn-set-point (event-end event)))) 565 (posn-set-point (event-end event))))