From f7d393d46e081b4cf23fa9836be6fe8bb6f4f3d4 Mon Sep 17 00:00:00 2001 From: Magnar Sveen Date: Mon, 24 Sep 2012 20:00:33 +0200 Subject: [PATCH] Don't use next-line and previous-line in non-interactive ways. - it messes up in visual-line-mode Fixes #10 --- features/edit-lines.feature | 32 ++++++++++++++++++++++++++++++++ features/support/env.el | 1 + mc-edit-lines.el | 4 ++-- 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 features/edit-lines.feature 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