Cycle through cursors with C-v and M-v

This commit is contained in:
Magnar Sveen 2012-07-21 08:26:41 +02:00
parent d69ae15fef
commit 092b0a1017
2 changed files with 49 additions and 0 deletions

48
mc-cycle-cursors.el Normal file
View File

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

View File

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