branch: elpa/multiple-cursors commit b48e2b7682d98720f4f48a30472096fdccdb402a Author: Magnar Sveen <magn...@gmail.com> Commit: Magnar Sveen <magn...@gmail.com>
mc/edit-lines: Don't include the 'invisible' line - when marking a region from bottom to top there is an invisible line in the region if mark is at the beginning of the line. - don't count that line when doing mc/edit-lines --- features/edit-lines.feature | 12 ++++++++++++ mc-edit-lines.el | 9 +++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/features/edit-lines.feature b/features/edit-lines.feature index de62c80..69c40a6 100644 --- a/features/edit-lines.feature +++ b/features/edit-lines.feature @@ -18,6 +18,18 @@ Feature: Switching from a multiline region to multiple cursors And I press "C-S-c C-S-c" Then I should have 2 cursors + Scenario: Edit lines from bottom up + When I insert: + """ + hello + there + """ + And I go to the front of the word "there" + And I set the mark + And I go to the front of the word "hello" + And I press "C-S-c C-S-c" + Then I should have one cursor + Scenario: Edit only real lines, even in visual-line-mode Given I turn on visual-line-mode And I insert: diff --git a/mc-edit-lines.el b/mc-edit-lines.el index de6d343..76452cc 100644 --- a/mc-edit-lines.el +++ b/mc-edit-lines.el @@ -38,13 +38,18 @@ line point is on." (when (not (use-region-p)) (error "Mark a set of lines first.")) (mc/remove-fake-cursors) - (let* ((point-line (line-number-at-pos)) + (let* ((col (current-column)) + (point-line (line-number-at-pos)) (mark-line (progn (exchange-point-and-mark) (line-number-at-pos))) (direction (if (< point-line mark-line) :up :down))) (deactivate-mark) + (when (and (eq direction :up) (bolp)) + (forward-line -1) + (move-to-column col)) (while (not (eq (line-number-at-pos) point-line)) (mc/create-fake-cursor-at-point) - (if (eq direction :up) (forward-line -1) (forward-line 1))) + (if (eq direction :up) (forward-line -1) (forward-line 1)) + (move-to-column col)) (multiple-cursors-mode))) ;;;###autoload