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)