branch: elpa/multiple-cursors commit 092b0a1017cc00947825fd52451c38f146313a57 Author: Magnar Sveen <magn...@gmail.com> Commit: Magnar Sveen <magn...@gmail.com>
Cycle through cursors with C-v and M-v --- mc-cycle-cursors.el | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ multiple-cursors.el | 1 + 2 files changed, 49 insertions(+) diff --git a/mc-cycle-cursors.el b/mc-cycle-cursors.el new file mode 100644 index 0000000..f89a9d0 --- /dev/null +++ b/mc-cycle-cursors.el @@ -0,0 +1,48 @@ +(eval-when-compile (require 'cl)) + +(defun mc/next-cursor-after-point () + (let ((pos (point)) + (next-pos (point-max)) + next) + (mc/for-each-fake-cursor + (let ((cursor-pos (overlay-get cursor 'point))) + (when (and (< pos cursor-pos) + (< cursor-pos next-pos)) + (setq next-pos cursor-pos) + (setq next cursor)))) + next)) + +(defun mc/prev-cursor-before-point () + (let ((pos (point)) + (prev-pos (point-min)) + prev) + (mc/for-each-fake-cursor + (let ((cursor-pos (overlay-get cursor 'point))) + (when (and (> pos cursor-pos) + (> cursor-pos prev-pos)) + (setq prev-pos cursor-pos) + (setq prev cursor)))) + prev)) + +(defun mc/cycle-forward () + (interactive) + (let ((next-cursor (mc/next-cursor-after-point))) + (unless next-cursor + (error "We're already at the last cursor")) + (mc/create-fake-cursor-at-point) + (mc/pop-state-from-overlay next-cursor) + (recenter))) + +(defun mc/cycle-backward () + (interactive) + (let ((prev-cursor (mc/prev-cursor-before-point))) + (unless prev-cursor + (error "We're already at the first cursor")) + (mc/create-fake-cursor-at-point) + (mc/pop-state-from-overlay prev-cursor) + (recenter))) + +(define-key mc/keymap (kbd "C-v") 'mc/cycle-forward) +(define-key mc/keymap (kbd "M-v") 'mc/cycle-backward) + +(provide 'mc-cycle-cursors) diff --git a/multiple-cursors.el b/multiple-cursors.el index 505dadf..3ceeaef 100644 --- a/multiple-cursors.el +++ b/multiple-cursors.el @@ -74,6 +74,7 @@ (require 'multiple-cursors-core) (require 'mc-edit-lines) +(require 'mc-cycle-cursors) (require 'mc-mark-multiple-integration) (require 'rectangular-region-mode)