From 36b7025a350ccdf9036a7ca8c16aec6f204fcd88 Mon Sep 17 00:00:00 2001 From: Jules Tamagnan Date: Fri, 4 Dec 2015 13:34:47 -0500 Subject: [PATCH 1/3] Add alternative to mc/mark-next-like-this * README.md: Add mc/mark-next-like-this-word tidbits to readme. * features/step-definitions/multiple-cursors-steps.el: Add mc/mark-next-like-this-word call. * features/support/env.el: Add shortcut for mc/mark-next-like-this-word as "C-S-c C->". * mc-mark-more.el: Add to mc/mark-next-like-this description to explain what happens when no region is selected. Add mc/mark-next-like-this-word function. * multiple-cursors-core.el: Add mc/mark-next-like-this-word to commands to run once. * multiple-cursors.el: Add information about mc/mark-next-like-this-word. --- README.md | 8 +++++-- .../multiple-cursors-steps.el | 3 +++ features/support/env.el | 1 + mc-mark-more.el | 22 ++++++++++++++++++- multiple-cursors-core.el | 1 + multiple-cursors.el | 6 ++++- 6 files changed, 37 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d97345a..dfc8ad1 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ add a cursor to each line: When you want to add multiple cursors not based on continuous lines, but based on keywords in the buffer, use: - (global-set-key (kbd "C->") 'mc/mark-next-like-this) + (global-set-key (kbd "C->") 'mc/mark-next-like-this) or (global-set-key (kbd "C->") 'mc/mark-next-like-this-word) (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) (global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this) @@ -49,6 +49,7 @@ 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-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 +102,9 @@ 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` with no region selected. It will mark the word 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. @@ -118,7 +122,7 @@ You can [watch an intro to multiple-cursors at Emacs Rocks](http://emacsrocks.co - If you would like to keep the global bindings clean, and get custom keybindings when the region is active, you can try [region-bindings-mode](https://github.com/fgallina/region-bindings-mode). -BTW, I highly recommend adding `mc/mark-next-like-this` to a key binding that's +BTW, I highly recommend adding `mc/mark-next-like-this` or `mc/mark-next-like-this-word` to a key binding that's right next to the key for `er/expand-region`. ### Binding mouse events diff --git a/features/step-definitions/multiple-cursors-steps.el b/features/step-definitions/multiple-cursors-steps.el index a5590b7..a3864e5 100644 --- a/features/step-definitions/multiple-cursors-steps.el +++ b/features/step-definitions/multiple-cursors-steps.el @@ -1,6 +1,9 @@ (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 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..b7dfaa6 100644 --- a/features/support/env.el +++ b/features/support/env.el @@ -21,6 +21,7 @@ (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) (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..a25c16c 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,25 @@ 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) + (mark-word) + (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 +481,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..23115df 100644 --- a/multiple-cursors-core.el +++ b/multiple-cursors-core.el @@ -596,6 +596,7 @@ 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-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..c56f5c3 100644 --- a/multiple-cursors.el +++ b/multiple-cursors.el @@ -42,7 +42,7 @@ ;; When you want to add multiple cursors not based on continuous lines, but based on ;; keywords in the buffer, use: -;; (global-set-key (kbd "C->") 'mc/mark-next-like-this) +;; (global-set-key (kbd "C->") 'mc/mark-next-like-this) or (global-set-key (kbd "C->") 'mc/mark-next-like-this-word) ;; (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) ;; (global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this) @@ -61,6 +61,7 @@ ;; ### 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-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 +101,9 @@ ;; - 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` with no region selected. It will mark the word 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. From bbbe90d274ffd27ebce7a0ba48e23edfe4d00a84 Mon Sep 17 00:00:00 2001 From: Jules Tamagnan Date: Fri, 4 Dec 2015 16:28:29 -0500 Subject: [PATCH 2/3] Minor changes mark-next-like-this-word and readme * README.md: Adjust read to no longer recommend extend region if user is using mark-next-like-this-word * mc-mark-more.el: mark-next-like-this-word makrs whole word and not only from point to the end of the word --- README.md | 2 +- mc-mark-more.el | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dfc8ad1..541f2b1 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ You can [watch an intro to multiple-cursors at Emacs Rocks](http://emacsrocks.co - If you would like to keep the global bindings clean, and get custom keybindings when the region is active, you can try [region-bindings-mode](https://github.com/fgallina/region-bindings-mode). -BTW, I highly recommend adding `mc/mark-next-like-this` or `mc/mark-next-like-this-word` to a key binding that's +BTW, I highly recommend adding `mc/mark-next-like-this` to a key binding that's right next to the key for `er/expand-region`. ### Binding mouse events diff --git a/mc-mark-more.el b/mc-mark-more.el index a25c16c..ee5eb5f 100644 --- a/mc-mark-more.el +++ b/mc-mark-more.el @@ -152,7 +152,7 @@ With zero ARG, skip the last one and mark next." (error "No cursors to be unmarked"))) (if (region-active-p) (mc/mark-more-like-this (= arg 0) 'forwards) - (mark-word) + (mc--select-thing-at-point 'word) (mc/mark-more-like-this (= arg 0) 'forwards))) (mc/maybe-multiple-cursors-mode)) From 8703b19872d12347bb91be5f70cb251244dae7b9 Mon Sep 17 00:00:00 2001 From: Jules Tamagnan Date: Fri, 4 Dec 2015 16:56:50 -0500 Subject: [PATCH 3/3] Add mark-next-like-this-symbol function * README.md: Update readme to include mark-next-like-this symbol * features/step-definitions/multiple-cursors-steps.el: Add phrase for mark-next-like-this-symbol * features/support/env.el: Add keyboard shortcut for mark-next-like-this-symbol and fix shortcut for mark-next-like-this-word * mc-mark-more.el: Add mc/mark-next-like-this-symbol function * multiple-cursors-core.el: Add mc/mark-next-like-this-symbol to functions to run only once * multiple-cursors.el: Add to readme section. --- README.md | 8 +++++--- .../step-definitions/multiple-cursors-steps.el | 3 +++ features/support/env.el | 3 ++- mc-mark-more.el | 17 +++++++++++++++++ multiple-cursors-core.el | 1 + multiple-cursors.el | 8 +++++--- 6 files changed, 33 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 541f2b1..145fe79 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ add a cursor to each line: When you want to add multiple cursors not based on continuous lines, but based on keywords in the buffer, use: - (global-set-key (kbd "C->") 'mc/mark-next-like-this) or (global-set-key (kbd "C->") 'mc/mark-next-like-this-word) + (global-set-key (kbd "C->") 'mc/mark-next-like-this) (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) (global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this) @@ -50,6 +50,7 @@ You can [watch an intro to multiple-cursors at Emacs Rocks](http://emacsrocks.co - `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. @@ -102,8 +103,9 @@ 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` with no region selected. It will mark the word and - add a cursor at the next occurance +- 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. diff --git a/features/step-definitions/multiple-cursors-steps.el b/features/step-definitions/multiple-cursors-steps.el index a3864e5..4d3fc09 100644 --- a/features/step-definitions/multiple-cursors-steps.el +++ b/features/step-definitions/multiple-cursors-steps.el @@ -4,6 +4,9 @@ (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 b7dfaa6..35b9cd7 100644 --- a/features/support/env.el +++ b/features/support/env.el @@ -21,7 +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) + (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 ee5eb5f..68addce 100644 --- a/mc-mark-more.el +++ b/mc-mark-more.el @@ -156,6 +156,23 @@ With zero ARG, skip the last one and mark next." (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) diff --git a/multiple-cursors-core.el b/multiple-cursors-core.el index 23115df..7e919cc 100644 --- a/multiple-cursors-core.el +++ b/multiple-cursors-core.el @@ -597,6 +597,7 @@ for running commands with multiple cursors.") 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 c56f5c3..645c713 100644 --- a/multiple-cursors.el +++ b/multiple-cursors.el @@ -42,7 +42,7 @@ ;; When you want to add multiple cursors not based on continuous lines, but based on ;; keywords in the buffer, use: -;; (global-set-key (kbd "C->") 'mc/mark-next-like-this) or (global-set-key (kbd "C->") 'mc/mark-next-like-this-word) +;; (global-set-key (kbd "C->") 'mc/mark-next-like-this) ;; (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) ;; (global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this) @@ -62,6 +62,7 @@ ;; - `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,8 +102,9 @@ ;; - 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` with no region selected. It will mark the word and -;; add a cursor at the next occurance +;; - 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. ;;