mirror of
https://github.com/magnars/multiple-cursors.el.git
synced 2025-10-13 13:03:03 +00:00
Separate kill-ring for each cursor.
This commit is contained in:
parent
13668a9e1c
commit
c18aa846b6
@ -21,16 +21,17 @@
|
||||
(defun mc/add-cursor-at-point ()
|
||||
(let ((overlay (mc/make-cursor-overlay-at-point)))
|
||||
(overlay-put overlay 'type 'additional-cursor)
|
||||
(overlay-put overlay 'kill-ring kill-ring)
|
||||
(overlay-put overlay 'priority 100)))
|
||||
|
||||
(setq mc--cmds '(self-insert-command
|
||||
previous-line
|
||||
next-line
|
||||
newline
|
||||
right-char
|
||||
right-word
|
||||
left-char
|
||||
left-word
|
||||
right-char forward-char
|
||||
right-word forward-word
|
||||
left-char backward-char
|
||||
left-word backward-word
|
||||
yank
|
||||
kill-word
|
||||
kill-region-or-backward-word
|
||||
@ -41,18 +42,34 @@
|
||||
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)
|
||||
(setq mc--unsupported-cmds '(yank-pop))
|
||||
|
||||
;; todo: macro-ify and iterate over mc--unsupported-cmds
|
||||
(defadvice yank-pop (around yank-pop-unsupported-advice activate)
|
||||
"yank-pop isn't supported with multiple cursors"
|
||||
(unless multiple-cursors-mode
|
||||
ad-do-it))
|
||||
|
||||
(defun mc/execute-command-for-all-cursors (cmd)
|
||||
(let ((current-kill-ring kill-ring))
|
||||
(save-excursion
|
||||
(mapc #'(lambda (o)
|
||||
(when (eq (overlay-get o 'type) 'additional-cursor)
|
||||
(goto-char (overlay-start o))
|
||||
(setq kill-ring (overlay-get o 'kill-ring))
|
||||
(delete-overlay o)
|
||||
(ignore-errors
|
||||
(call-interactively this-original-command)
|
||||
(call-interactively cmd)
|
||||
(mc/add-cursor-at-point))))
|
||||
(overlays-in (point-min) (point-max))))))
|
||||
(overlays-in (point-min) (point-max))))
|
||||
(setq kill-ring current-kill-ring)))
|
||||
|
||||
(defun mc/execute-this-command-for-all-cursors ()
|
||||
(if (memq this-original-command mc--unsupported-cmds)
|
||||
(message "%S is not supported with multiple cursors" this-original-command)
|
||||
(if (not (memq this-original-command mc--cmds))
|
||||
(message "Skipping %S" this-original-command)
|
||||
(mc/execute-command-for-all-cursors this-original-command))))
|
||||
|
||||
(defun mc/remove-additional-cursors ()
|
||||
(mapc #'(lambda (o)
|
||||
@ -75,8 +92,10 @@
|
||||
(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 ()
|
||||
(defun mc/add-multiple-cursors-to-region-lines ()
|
||||
(interactive)
|
||||
(when (not (use-region-p))
|
||||
(error "Mark a set of lines first."))
|
||||
(mc/remove-additional-cursors)
|
||||
(let* ((point-line (line-number-at-pos))
|
||||
(mark-line (save-excursion (exchange-point-and-mark) (line-number-at-pos)))
|
||||
@ -84,11 +103,21 @@
|
||||
(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)))
|
||||
|
||||
(defun mc/edit-ends-of-lines ()
|
||||
(interactive)
|
||||
(mc/add-multiple-cursors-to-region-lines)
|
||||
(mc/execute-command-for-all-cursors 'end-of-line)
|
||||
(end-of-line))
|
||||
|
||||
(defun mc/edit-beginnings-of-lines ()
|
||||
(interactive)
|
||||
(mc/add-multiple-cursors-to-region-lines)
|
||||
(mc/execute-command-for-all-cursors 'beginning-of-line)
|
||||
(beginning-of-line))
|
||||
|
||||
(provide 'multiple-cursors)
|
||||
|
Loading…
x
Reference in New Issue
Block a user