[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/multiple-cursors 13668a9 001/434: initial commit
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/multiple-cursors 13668a9 001/434: initial commit |
Date: |
Sat, 7 Aug 2021 09:19:42 -0400 (EDT) |
branch: elpa/multiple-cursors
commit 13668a9e1c9963b5d74a2601c24fcba689feb391
Author: Magnar Sveen <magnars@gmail.com>
Commit: Magnar Sveen <magnars@gmail.com>
initial commit
---
README.org | 3 ++
multiple-cursors.el | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 97 insertions(+)
diff --git a/README.org b/README.org
new file mode 100644
index 0000000..c169def
--- /dev/null
+++ b/README.org
@@ -0,0 +1,3 @@
+* multiple-cursors.el
+
+An experiment in multiple cursors for emacs. Still very much in beta.
diff --git a/multiple-cursors.el b/multiple-cursors.el
new file mode 100644
index 0000000..e6aded8
--- /dev/null
+++ b/multiple-cursors.el
@@ -0,0 +1,94 @@
+(defface mc/cursor-face
+ '((t (:inverse-video t)))
+ "The face used for additional cursors"
+ :group 'multiple-cursors)
+
+(defun mc/make-cursor-overlay-at-eol (pos)
+ (let ((overlay (make-overlay pos pos nil nil t)))
+ (overlay-put overlay 'after-string (propertize " " 'face 'mc/cursor-face))
+ overlay))
+
+(defun mc/make-cursor-overlay-inline (pos)
+ (let ((overlay (make-overlay pos (1+ pos) nil nil t)))
+ (overlay-put overlay 'face 'mc/cursor-face)
+ overlay))
+
+(defun mc/make-cursor-overlay-at-point ()
+ (if (eolp)
+ (mc/make-cursor-overlay-at-eol (point))
+ (mc/make-cursor-overlay-inline (point))))
+
+(defun mc/add-cursor-at-point ()
+ (let ((overlay (mc/make-cursor-overlay-at-point)))
+ (overlay-put overlay 'type 'additional-cursor)
+ (overlay-put overlay 'priority 100)))
+
+(setq mc--cmds '(self-insert-command
+ previous-line
+ next-line
+ newline
+ right-char
+ right-word
+ left-char
+ left-word
+ yank
+ kill-word
+ kill-region-or-backward-word
+ backward-kill-word
+ backward-delete-char-untabify
+ delete-char
+ delete-backward-char
+ move-end-of-line-or-next-line
+ move-start-of-line-or-prev-line))
+
+(defun mc/execute-this-command-for-all-cursors ()
+ (if (not (memq this-original-command mc--cmds))
+ (message "Skipping %S" this-original-command)
+ (save-excursion
+ (mapc #'(lambda (o)
+ (when (eq (overlay-get o 'type) 'additional-cursor)
+ (goto-char (overlay-start o))
+ (delete-overlay o)
+ (ignore-errors
+ (call-interactively this-original-command)
+ (mc/add-cursor-at-point))))
+ (overlays-in (point-min) (point-max))))))
+
+(defun mc/remove-additional-cursors ()
+ (mapc #'(lambda (o)
+ (when (eq (overlay-get o 'type) 'additional-cursor)
+ (delete-overlay o)))
+ (overlays-in (point-min) (point-max))))
+
+(defvar mc/keymap nil
+ "Keymap while multiple cursors are active.")
+(if mc/keymap
+ nil
+ (setq mc/keymap (make-sparse-keymap))
+ (define-key mc/keymap (kbd "C-g") 'multiple-cursors-mode))
+
+(define-minor-mode multiple-cursors-mode
+ "Mode while multiple cursors are active."
+ nil " mc" mc/keymap
+ (cond ((not multiple-cursors-mode)
+ (remove-hook 'post-command-hook
'mc/execute-this-command-for-all-cursors t)
+ (mc/remove-additional-cursors))
+ (t (add-hook 'post-command-hook
'mc/execute-this-command-for-all-cursors t t))))
+
+(defun mc/edit-ends-of-lines ()
+ (interactive)
+ (mc/remove-additional-cursors)
+ (let* ((point-line (line-number-at-pos))
+ (mark-line (save-excursion (exchange-point-and-mark)
(line-number-at-pos)))
+ (num-cursors (abs (- point-line mark-line)))
+ (navigation-func (if (< point-line mark-line) 'previous-line
'next-line)))
+ (exchange-point-and-mark)
+ (while (not (eq (line-number-at-pos) point-line))
+ (end-of-line)
+ (mc/add-cursor-at-point)
+ (funcall navigation-func))
+ (end-of-line)
+ (deactivate-mark)
+ (multiple-cursors-mode)))
+
+(provide 'multiple-cursors)
- [nongnu] branch elpa/multiple-cursors created (now 616fbdd), ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors 224f919 008/434: Explicitly depend on mark-multiple., ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors e44f45f 019/434: More white-listing in multiple-cursors., ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors b28e8f9 023/434: Update test to fix missing step definition., ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors a682c15 027/434: Disable regions first with C-g, then multiple-cursors., ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors 13668a9 001/434: initial commit,
ELPA Syncer <=
- [nongnu] elpa/multiple-cursors c18aa84 002/434: Separate kill-ring for each cursor., ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors 0d40ea1 003/434: Updated readme., ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors 18f7f1a 010/434: More white-listed commands for multiple cursors., ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors cf82088 014/434: Add backward-list to white-list., ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors 26d0e52 015/434: Add more commands to white-list., ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors 5e64246 025/434: Move todo to own file., ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors e0ffd9c 026/434: Disable marker when done with it, for performance reasons., ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors 9938aca 028/434: Save er/history for each cursor, to be able to contract., ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors dfe8a2d 029/434: Slight optimisation, ELPA Syncer, 2021/08/07
- [nongnu] elpa/multiple-cursors 6c0e16e 033/434: More things to do., ELPA Syncer, 2021/08/07