Don't use next-line and previous-line in non-interactive ways.

- it messes up in visual-line-mode

Fixes #10
This commit is contained in:
Magnar Sveen 2012-09-24 20:00:33 +02:00
parent 466d8bd4f8
commit f7d393d46e
3 changed files with 35 additions and 2 deletions

View File

@ -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

View File

@ -21,6 +21,7 @@
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this) (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-like-this)
(global-set-key (kbd "M-#") 'mc/mark-all-in-region) (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) (global-set-key (kbd "H-SPC") 'set-rectangular-region-anchor)
(switch-to-buffer (switch-to-buffer
(get-buffer-create "*multiple-cursors*")) (get-buffer-create "*multiple-cursors*"))

View File

@ -40,11 +40,11 @@ line point is on."
(mc/remove-fake-cursors) (mc/remove-fake-cursors)
(let* ((point-line (line-number-at-pos)) (let* ((point-line (line-number-at-pos))
(mark-line (progn (exchange-point-and-mark) (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) (deactivate-mark)
(while (not (eq (line-number-at-pos) point-line)) (while (not (eq (line-number-at-pos) point-line))
(mc/create-fake-cursor-at-point) (mc/create-fake-cursor-at-point)
(funcall navigation-func)) (if (eq direction :up) (forward-line -1) (forward-line 1)))
(multiple-cursors-mode))) (multiple-cursors-mode)))
;;;###autoload ;;;###autoload