diff --git a/mc-mark-more.el b/mc-mark-more.el index ef4b877..45a87fc 100644 --- a/mc-mark-more.el +++ b/mc-mark-more.el @@ -292,6 +292,28 @@ With zero ARG, skip the last one and mark next." (multiple-cursors-mode 1) (multiple-cursors-mode 0)))))) +;;;###autoload +(defun mc/mark-all-in-region-regexp (beg end) + "Find and mark all the parts in the region matching the given regexp" + (interactive "r") + (let ((search (read-regexp "Mark regexp in region: ")) + (case-fold-search nil)) + (if (string= search "") + (message "Mark aborted") + (progn + (mc/remove-fake-cursors) + (goto-char beg) + (while (search-forward-regexp search end t) + (push-mark (match-beginning 0)) + (mc/create-fake-cursor-at-point)) + (let ((first (mc/furthest-cursor-before-point))) + (if (not first) + (error "Search failed for %S" search) + (mc/pop-state-from-overlay first))) + (if (> (mc/num-cursors) 1) + (multiple-cursors-mode 1) + (multiple-cursors-mode 0)))))) + (when (not (fboundp 'set-temporary-overlay-map)) ;; Backport this function from newer emacs versions (defun set-temporary-overlay-map (map &optional keep-pred)