mirror of
https://github.com/magnars/multiple-cursors.el.git
synced 2025-10-13 21:03:05 +00:00
Add pre- & post-command-hook to be cursor specific
This commit is contained in:
parent
4c293c46fd
commit
6cff0c2ebd
@ -124,22 +124,24 @@ highlights the entire width of the window."
|
||||
(overlay-put overlay 'type 'additional-region)
|
||||
overlay))
|
||||
|
||||
(defvar mc/cursor-specific-vars '(autopair-action
|
||||
(defvar mc/cursor-specific-vars '(transient-mark-mode
|
||||
pre-command-hook
|
||||
post-command-hook
|
||||
kill-ring
|
||||
kill-ring-yank-pointer
|
||||
mark-ring
|
||||
mark-active
|
||||
yank-undo-function
|
||||
kill-ring-yank-pointer
|
||||
autopair-action
|
||||
autopair-wrap-action
|
||||
transient-mark-mode
|
||||
er/history)
|
||||
"A list of vars that need to be tracked on a per-cursor basis.")
|
||||
|
||||
(defun mc/store-current-state-in-overlay (o)
|
||||
"Store relevant info about point and mark in the given overlay."
|
||||
(overlay-put o 'point (set-marker (make-marker) (point)))
|
||||
(overlay-put o 'kill-ring kill-ring)
|
||||
(overlay-put o 'kill-ring-yank-pointer kill-ring-yank-pointer)
|
||||
(overlay-put o 'mark (set-marker (make-marker) (mark)))
|
||||
(overlay-put o 'mark-ring mark-ring)
|
||||
(overlay-put o 'mark-active mark-active)
|
||||
(overlay-put o 'yank-undo-function yank-undo-function)
|
||||
(overlay-put o 'kill-ring-yank-pointer kill-ring-yank-pointer)
|
||||
(dolist (var mc/cursor-specific-vars)
|
||||
(when (boundp var) (overlay-put o var (symbol-value var))))
|
||||
o)
|
||||
@ -147,13 +149,7 @@ highlights the entire width of the window."
|
||||
(defun mc/restore-state-from-overlay (o)
|
||||
"Restore point and mark from stored info in the given overlay."
|
||||
(goto-char (overlay-get o 'point))
|
||||
(setq kill-ring (overlay-get o 'kill-ring))
|
||||
(setq kill-ring-yank-pointer (overlay-get o 'kill-ring-yank-pointer))
|
||||
(set-marker (mark-marker) (overlay-get o 'mark))
|
||||
(setq mark-ring (overlay-get o 'mark-ring))
|
||||
(setq mark-active (overlay-get o 'mark-active))
|
||||
(setq yank-undo-function (overlay-get o 'yank-undo-function))
|
||||
(setq kill-ring-yank-pointer (overlay-get o 'kill-ring-yank-pointer))
|
||||
(dolist (var mc/cursor-specific-vars)
|
||||
(when (boundp var) (set var (overlay-get o var)))))
|
||||
|
||||
@ -396,8 +392,7 @@ you should disable multiple-cursors-mode."
|
||||
"Keymap while multiple cursors are active.
|
||||
Main goal of the keymap is to rebind C-g and <return> to conclude
|
||||
multiple cursors editing.")
|
||||
(if mc/keymap
|
||||
nil
|
||||
(unless mc/keymap
|
||||
(setq mc/keymap (make-sparse-keymap))
|
||||
(define-key mc/keymap (kbd "C-g") 'mc/keyboard-quit)
|
||||
(define-key mc/keymap (kbd "<return>") 'multiple-cursors-mode)
|
||||
@ -406,13 +401,13 @@ multiple cursors editing.")
|
||||
(when (fboundp 'phi-search-backward)
|
||||
(define-key mc/keymap (kbd "C-r") 'phi-search-backward)))
|
||||
|
||||
(defun mc--all-equal (entries)
|
||||
"Are all these entries equal?"
|
||||
(let ((first (car entries))
|
||||
(defun mc--all-equal (list)
|
||||
"Are all the items in LIST equal?"
|
||||
(let ((first (car list))
|
||||
(all-equal t))
|
||||
(while (and all-equal entries)
|
||||
(setq all-equal (equal first (car entries)))
|
||||
(setq entries (cdr entries)))
|
||||
(while (and all-equal list)
|
||||
(setq all-equal (equal first (car list)))
|
||||
(setq list (cdr list)))
|
||||
all-equal))
|
||||
|
||||
(defun mc--kill-ring-entries ()
|
||||
|
@ -67,6 +67,9 @@ an exceedingly quick way of adding multiple cursors to multiple lines."
|
||||
|
||||
(defun rrm/repaint ()
|
||||
"Start from the anchor and draw a rectangle between it and point."
|
||||
(if (not rectangular-region-mode)
|
||||
(remove-hook 'post-command-hook 'rrm/repaint t)
|
||||
;; else
|
||||
(rrm/remove-rectangular-region-overlays)
|
||||
(let* ((annoying-arrows-mode nil)
|
||||
(point-column (current-column))
|
||||
@ -87,7 +90,7 @@ an exceedingly quick way of adding multiple cursors to multiple lines."
|
||||
(set-mark (point))
|
||||
(move-to-column point-column)
|
||||
(when (= point-column (current-column))
|
||||
(mc/create-fake-cursor-at-point)))))))
|
||||
(mc/create-fake-cursor-at-point))))))))
|
||||
|
||||
(defun rrm/switch-to-multiple-cursors (&rest forms)
|
||||
"Switch from rectangular-region-mode to multiple-cursors-mode."
|
||||
|
Loading…
x
Reference in New Issue
Block a user