Fix click-toggling and make it robust (address all PR #239 comments)

- use marker-position for cursor overlay's point
- new helper function finds fake cursor with its actual *point* where we
  want it
- this also eliminates any need for additional require statements
This commit is contained in:
Ingo Lohmar 2016-03-02 21:25:17 +01:00
parent 4c52fb1e56
commit e17851efd3

View File

@ -72,6 +72,18 @@
(setq furthest cursor)))
furthest))
(defun mc/fake-cursor-at-point (&optional point)
"Return the fake cursor with its point right at POINT (defaults
to (point)), or nil."
(setq point (or point (point)))
(let ((cursors (mc/all-fake-cursors))
(c nil))
(catch 'found
(while (setq c (pop cursors))
(when (eq (marker-position (overlay-get c 'point))
point)
(throw 'found c))))))
(defun mc/region-strings ()
(let ((strings (list (buffer-substring-no-properties (point) (mark)))))
(mc/for-each-fake-cursor
@ -587,14 +599,15 @@ already there."
(if (not (windowp (posn-window position)))
(error "Position not in text area of window"))
(select-window (posn-window position))
(if (numberp (posn-point position))
(save-excursion
(goto-char (posn-point position))
(let ((existing (mc/last-fake-cursor-before (point))))
(if (and existing
(eq (overlay-get existing 'point) (point)))
(let ((pt (posn-point position)))
(if (numberp pt)
;; is there a fake cursor with the actual *point* right where we are?
(let ((existing (mc/fake-cursor-at-point pt)))
(if existing
(mc/remove-fake-cursor existing)
(mc/create-fake-cursor-at-point)))))
(save-excursion
(goto-char pt)
(mc/create-fake-cursor-at-point))))))
(mc/maybe-multiple-cursors-mode)))
;;;###autoload