branch: elpa/multiple-cursors
commit 9b53e892e6167f930763a3c5aedf8773110a8ae9
Merge: 2588cce 5d677f7
Author: Magnar Sveen <[email protected]>
Commit: Magnar Sveen <[email protected]>
Merge pull request #203 from dovej/master
Changed mc/furthest-cursor-after(before)-point to check if mark is active.
---
mc-mark-more.el | 56 ++++++++++++++++++++++++++++++--------------------------
1 file changed, 30 insertions(+), 26 deletions(-)
diff --git a/mc-mark-more.el b/mc-mark-more.el
index 445f6d3..1e87521 100644
--- a/mc-mark-more.el
+++ b/mc-mark-more.el
@@ -55,8 +55,8 @@
beg))
(defun mc/furthest-cursor-before-point ()
- (let ((beg (min (mark) (point)))
- furthest)
+ (let ((beg (if mark-active (min (mark) (point)) (point)))
+ furthest)
(mc/for-each-fake-cursor
(when (< (mc/cursor-beg cursor) beg)
(setq beg (mc/cursor-beg cursor))
@@ -64,8 +64,8 @@
furthest))
(defun mc/furthest-cursor-after-point ()
- (let ((end (max (mark) (point)))
- furthest)
+ (let ((end (if mark-active (max (mark) (point)) (point)))
+ furthest)
(mc/for-each-fake-cursor
(when (> (mc/cursor-end cursor) end)
(setq end (mc/cursor-end cursor))
@@ -127,14 +127,14 @@ Use like case-fold-search, don't recommend setting it
globally.")
With negative ARG, delete the last one instead.
With zero ARG, skip the last one and mark next."
(interactive "p")
- (if (region-active-p)
- (if (< arg 0)
- (let ((cursor (mc/furthest-cursor-after-point)))
- (if cursor
- (mc/remove-fake-cursor cursor)
- (error "No cursors to be unmarked")))
- (mc/mark-more-like-this (= arg 0) 'forwards))
- (mc/mark-lines arg 'forwards))
+ (if (< arg 0)
+ (let ((cursor (mc/furthest-cursor-after-point)))
+ (if cursor
+ (mc/remove-fake-cursor cursor)
+ (error "No cursors to be unmarked")))
+ (if (region-active-p)
+ (mc/mark-more-like-this (= arg 0) 'forwards)
+ (mc/mark-lines arg 'forwards)))
(mc/maybe-multiple-cursors-mode))
;;;###autoload
@@ -155,14 +155,14 @@ With zero ARG, skip the last one and mark next."
With negative ARG, delete the last one instead.
With zero ARG, skip the last one and mark next."
(interactive "p")
- (if (region-active-p)
- (if (< arg 0)
- (let ((cursor (mc/furthest-cursor-before-point)))
- (if cursor
- (mc/remove-fake-cursor cursor)
- (error "No cursors to be unmarked")))
- (mc/mark-more-like-this (= arg 0) 'backwards))
- (mc/mark-lines arg 'backwards))
+ (if (< arg 0)
+ (let ((cursor (mc/furthest-cursor-before-point)))
+ (if cursor
+ (mc/remove-fake-cursor cursor)
+ (error "No cursors to be unmarked")))
+ (if (region-active-p)
+ (mc/mark-more-like-this (= arg 0) 'backwards)
+ (mc/mark-lines arg 'backwards)))
(mc/maybe-multiple-cursors-mode))
;;;###autoload
@@ -179,12 +179,16 @@ With zero ARG, skip the last one and mark next."
(defun mc/mark-lines (num-lines direction)
(dotimes (i num-lines)
- (mc/create-fake-cursor-at-point)
- (ecase direction
- (forwards (loop do (next-logical-line 1 nil)
- while (mc/all-fake-cursors (point) (1+ (point)))))
- (backwards (loop do (previous-logical-line 1 nil)
- while (mc/all-fake-cursors (point) (1+ (point))))))))
+ (mc/save-excursion
+ (let ((furthest-cursor (ecase direction
+ (forwards (mc/furthest-cursor-after-point))
+ (backwards (mc/furthest-cursor-before-point)))))
+ (if (overlayp furthest-cursor)
+ (goto-char (overlay-get furthest-cursor 'point))))
+ (ecase direction
+ (forwards (next-logical-line 1 nil))
+ (backwards (previous-logical-line 1 nil)))
+ (mc/create-fake-cursor-at-point))))
;;;###autoload
(defun mc/mark-next-lines (arg)