diff --git a/features/edit-lines.feature b/features/edit-lines.feature new file mode 100644 index 0000000..de62c80 --- /dev/null +++ b/features/edit-lines.feature @@ -0,0 +1,32 @@ +Feature: Switching from a multiline region to multiple cursors + + Scenario: Single line region + When I insert "hello there" + And I select "there" + And I press "C-S-c C-S-c" + Then I should have one cursor + + Scenario: Edit lines + When I insert: + """ + hello + there + """ + And I go to the front of the word "hello" + And I set the mark + And I go to the front of the word "there" + And I press "C-S-c C-S-c" + Then I should have 2 cursors + + Scenario: Edit only real lines, even in visual-line-mode + Given I turn on visual-line-mode + And I insert: + """ + some very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very + long text + """ + And I go to the front of the word "some" + And I set the mark + And I go to the front of the word "long" + And I press "C-S-c C-S-c" + Then I should have 2 cursors diff --git a/features/support/env.el b/features/support/env.el index 78b7297..652016a 100644 --- a/features/support/env.el +++ b/features/support/env.el @@ -21,6 +21,7 @@ (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) (global-set-key (kbd "M-!") 'mc/mark-all-like-this) (global-set-key (kbd "M-#") 'mc/mark-all-in-region) + (global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines) (global-set-key (kbd "H-SPC") 'set-rectangular-region-anchor) (switch-to-buffer (get-buffer-create "*multiple-cursors*")) diff --git a/mc-edit-lines.el b/mc-edit-lines.el index 0a923f1..de6d343 100644 --- a/mc-edit-lines.el +++ b/mc-edit-lines.el @@ -40,11 +40,11 @@ line point is on." (mc/remove-fake-cursors) (let* ((point-line (line-number-at-pos)) (mark-line (progn (exchange-point-and-mark) (line-number-at-pos))) - (navigation-func (if (< point-line mark-line) 'previous-line 'next-line))) + (direction (if (< point-line mark-line) :up :down))) (deactivate-mark) (while (not (eq (line-number-at-pos) point-line)) (mc/create-fake-cursor-at-point) - (funcall navigation-func)) + (if (eq direction :up) (forward-line -1) (forward-line 1))) (multiple-cursors-mode))) ;;;###autoload