diff --git a/README.md b/README.md index d97345a..145fe79 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,8 @@ You can [watch an intro to multiple-cursors at Emacs Rocks](http://emacsrocks.co ### Mark one more occurrence - `mc/mark-next-like-this`: Adds a cursor and region at the next part of the buffer forwards that matches the current region. + - `mc/mark-next-like-this-word`: Adds a cursor and region at the next part of the buffer forwards that matches the current region, if no region is selected it selects the word at the point. + - `mc/mark-next-like-this-symbol`: Adds a cursor and region at the next part of the buffer forwards that matches the current region, if no region is selected it selects the symbol at the point. - `mc/mark-next-word-like-this`: Like `mc/mark-next-like-this` but only for whole words. - `mc/mark-next-symbol-like-this`: Like `mc/mark-next-like-this` but only for whole symbols. - `mc/mark-previous-like-this`: Adds a cursor and region at the next part of the buffer backwards that matches the current region. @@ -101,6 +103,10 @@ You can [watch an intro to multiple-cursors at Emacs Rocks](http://emacsrocks.co - Try pressing `mc/mark-next-like-this` with no region selected. It will just add a cursor on the next line. +- Try pressing `mc/mark-next-like-this-word` or + `mc/mark-next-like-this-symbol` with no region selected. It will + mark the word or symbol and add a cursor at the next occurance + - Try pressing `mc/mark-all-like-this-dwim` on a tagname in html-mode. - Notice that the number of cursors active can be seen in the modeline. diff --git a/features/step-definitions/multiple-cursors-steps.el b/features/step-definitions/multiple-cursors-steps.el index a5590b7..4d3fc09 100644 --- a/features/step-definitions/multiple-cursors-steps.el +++ b/features/step-definitions/multiple-cursors-steps.el @@ -1,6 +1,12 @@ (When "^I mark next like this$" (lambda () (call-interactively 'mc/mark-next-like-this))) +(When "^I mark next like this word$" + (lambda () (call-interactively 'mc/mark-next-like-this-word))) + +(When "^I mark next like this symbol$" + (lambda () (call-interactively 'mc/mark-next-like-this-symbol))) + (When "^I mark previous like this$" (lambda () (call-interactively 'mc/mark-previous-like-this))) diff --git a/features/support/env.el b/features/support/env.el index 3ce7c91..35b9cd7 100644 --- a/features/support/env.el +++ b/features/support/env.el @@ -21,6 +21,8 @@ (multiple-cursors-mode 0) (rectangular-region-mode 0) (global-set-key (kbd "C->") 'mc/mark-next-like-this) + (global-set-key (kbd "C-S-c C->") 'mc/mark-next-like-this-word) + (global-set-key (kbd "C-S-c M->") 'mc/mark-next-like-this-symbol) (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) (global-set-key (kbd "M-!") 'mc/mark-all-like-this) (global-set-key (kbd "M-$") 'mc/mark-all-like-this-dwim) diff --git a/mc-mark-more.el b/mc-mark-more.el index 1e87521..68addce 100644 --- a/mc-mark-more.el +++ b/mc-mark-more.el @@ -124,6 +124,7 @@ Use like case-fold-search, don't recommend setting it globally.") ;;;###autoload (defun mc/mark-next-like-this (arg) "Find and mark the next part of the buffer matching the currently active region +If no region is active add a cursor on the next line With negative ARG, delete the last one instead. With zero ARG, skip the last one and mark next." (interactive "p") @@ -137,6 +138,42 @@ With zero ARG, skip the last one and mark next." (mc/mark-lines arg 'forwards))) (mc/maybe-multiple-cursors-mode)) +;;;###autoload +(defun mc/mark-next-like-this-word (arg) + "Find and mark the next part of the buffer matching the currently active region +If no region is active, mark the word at the point and find the next match +With negative ARG, delete the last one instead. +With zero ARG, skip the last one and mark next." + (interactive "p") + (if (< arg 0) + (let ((cursor (mc/furthest-cursor-after-point))) + (if cursor + (mc/remove-fake-cursor cursor) + (error "No cursors to be unmarked"))) + (if (region-active-p) + (mc/mark-more-like-this (= arg 0) 'forwards) + (mc--select-thing-at-point 'word) + (mc/mark-more-like-this (= arg 0) 'forwards))) + (mc/maybe-multiple-cursors-mode)) + +(defun mc/mark-next-like-this-symbol (arg) + "Find and mark the next part of the buffer matching the currently active region +If no region is active, mark the symbol at the point and find the next match +With negative ARG, delete the last one instead. +With zero ARG, skip the last one and mark next." + (interactive "p") + (if (< arg 0) + (let ((cursor (mc/furthest-cursor-after-point))) + (if cursor + (mc/remove-fake-cursor cursor) + (error "No cursors to be unmarked"))) + (if (region-active-p) + (mc/mark-more-like-this (= arg 0) 'forwards) + (mc--select-thing-at-point 'symbol) + (mc/mark-more-like-this (= arg 0) 'forwards))) + (mc/maybe-multiple-cursors-mode)) + + ;;;###autoload (defun mc/mark-next-word-like-this (arg) (interactive "p") @@ -461,7 +498,7 @@ If the region is active and spans multiple lines, it will behave as if `mc/mark-all-in-region'. With the prefix ARG, it will call `mc/edit-lines' instead. -If the region is inactive or on a single line, it will behave like +If the region is inactive or on a single line, it will behave like `mc/mark-all-like-this-dwim'." (interactive "P") (if (and (use-region-p) diff --git a/multiple-cursors-core.el b/multiple-cursors-core.el index 6602703..7e919cc 100644 --- a/multiple-cursors-core.el +++ b/multiple-cursors-core.el @@ -596,6 +596,8 @@ for running commands with multiple cursors.") mc/edit-ends-of-lines mc/edit-beginnings-of-lines mc/mark-next-like-this + mc/mark-next-like-this-word + mc/mark-next-like-this-symbol mc/mark-next-word-like-this mc/mark-next-symbol-like-this mc/mark-previous-like-this diff --git a/multiple-cursors.el b/multiple-cursors.el index 9c44db9..645c713 100644 --- a/multiple-cursors.el +++ b/multiple-cursors.el @@ -61,6 +61,8 @@ ;; ### Mark one more occurrence ;; - `mc/mark-next-like-this`: Adds a cursor and region at the next part of the buffer forwards that matches the current region. +;; - `mc/mark-next-like-this-word`: Adds a cursor and region at the next part of the buffer forwards that matches the current region, if no region is selected it selects the word at the point. +;; - `mc/mark-next-like-this-symbol`: Adds a cursor and region at the next part of the buffer forwards that matches the current region, if no region is selected it selects the symbol at the point. ;; - `mc/mark-next-word-like-this`: Like `mc/mark-next-like-this` but only for whole words. ;; - `mc/mark-next-symbol-like-this`: Like `mc/mark-next-like-this` but only for whole symbols. ;; - `mc/mark-previous-like-this`: Adds a cursor and region at the next part of the buffer backwards that matches the current region. @@ -100,6 +102,10 @@ ;; - Try pressing `mc/mark-next-like-this` with no region selected. It will just add a cursor ;; on the next line. ;; +;; - Try pressing `mc/mark-next-like-this-word` or +;; `mc/mark-next-like-this-symbol` with no region selected. It will +;; mark the symbol and add a cursor at the next occurance +;; ;; - Try pressing `mc/mark-all-like-this-dwim` on a tagname in html-mode. ;; ;; - Notice that the number of cursors active can be seen in the modeline.