emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/multiple-cursors 092b0a1 074/434: Cycle through cursors wi


From: ELPA Syncer
Subject: [nongnu] elpa/multiple-cursors 092b0a1 074/434: Cycle through cursors with C-v and M-v
Date: Sat, 7 Aug 2021 09:19:58 -0400 (EDT)

branch: elpa/multiple-cursors
commit 092b0a1017cc00947825fd52451c38f146313a57
Author: Magnar Sveen <magnars@gmail.com>
Commit: Magnar Sveen <magnars@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)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]