emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/multiple-cursors 980a880 223/434: Merge pull request #63 f


From: ELPA Syncer
Subject: [nongnu] elpa/multiple-cursors 980a880 223/434: Merge pull request #63 from tkf/select-thing-at-point
Date: Sat, 7 Aug 2021 09:20:30 -0400 (EDT)

branch: elpa/multiple-cursors
commit 980a8808ddfc4e48def0cab76782a909a3456029
Merge: ed18fa4 1cdd730
Author: Magnar Sveen <magnars@gmail.com>
Commit: Magnar Sveen <magnars@gmail.com>

    Merge pull request #63 from tkf/select-thing-at-point
    
    Automatically select word/symbol
---
 features/mark-things.feature                       | 137 +++++++++++++++++++++
 .../step-definitions/multiple-cursors-steps.el     |   8 ++
 mc-mark-more.el                                    |  15 +++
 3 files changed, 160 insertions(+)

diff --git a/features/mark-things.feature b/features/mark-things.feature
new file mode 100644
index 0000000..c99c24f
--- /dev/null
+++ b/features/mark-things.feature
@@ -0,0 +1,137 @@
+Feature: Mark things
+
+  Scenario: Mark all symbols like this with select
+    Given I turn on emacs-lisp-mode
+    And I turn on delete-selection-mode
+    And I insert:
+    """
+    (defun abc (ghi) (message ghi))
+    (defun def (ghi) (message some-other-ghi))
+    """
+    When I select "ghi"
+    And I mark all symbols like this
+    And I type "hmm"
+    Then I should see:
+    """
+    (defun abc (hmm) (message hmm))
+    (defun def (hmm) (message some-other-ghi))
+    """
+
+  Scenario: Mark all words like this with select
+    Given I turn on emacs-lisp-mode
+    And I turn on delete-selection-mode
+    And I insert:
+    """
+    (defun abc (ghi) (message ghi))
+    (defun def (ghi) (message some-other-ghi))
+    """
+    When I select "ghi"
+    And I mark all words like this
+    And I type "hmm"
+    Then I should see:
+    """
+    (defun abc (hmm) (message hmm))
+    (defun def (hmm) (message some-other-hmm))
+    """
+
+  Scenario: Mark all symbols like this in defun with select
+    Given I turn on emacs-lisp-mode
+    And I turn on delete-selection-mode
+    And I insert:
+    """
+    (defun abc (ghi) (message ghi))
+    (defun def (ghi) (message some-other-ghi))
+    """
+    When I select "ghi"
+    And I mark all symbols like this in defun
+    And I type "hmm"
+    Then I should see:
+    """
+    (defun abc (hmm) (message hmm))
+    (defun def (ghi) (message some-other-ghi))
+    """
+
+  Scenario: Mark all words like this in defun with select
+    Given I turn on emacs-lisp-mode
+    And I turn on delete-selection-mode
+    And I insert:
+    """
+    (defun abc (ghi) (message ghi))
+    (defun def (ghi) (message some-other-ghi))
+    """
+    When I select "ghi"
+    And I mark all words like this in defun
+    And I type "hmm"
+    Then I should see:
+    """
+    (defun abc (hmm) (message hmm))
+    (defun def (ghi) (message some-other-ghi))
+    """
+
+  Scenario: Mark all symbols like this with no select
+    Given I turn on emacs-lisp-mode
+    And I turn on delete-selection-mode
+    And I insert:
+    """
+    (defun abc (ghi) (message ghi))
+    (defun def (ghi) (message some-other-ghi))
+    """
+    When I go to word "ghi"
+    And I mark all symbols like this
+    And I type "hmm"
+    Then I should see:
+    """
+    (defun abc (hmm) (message hmm))
+    (defun def (hmm) (message some-other-ghi))
+    """
+
+  Scenario: Mark all words like this with no select
+    Given I turn on emacs-lisp-mode
+    And I turn on delete-selection-mode
+    And I insert:
+    """
+    (defun abc (ghi) (message ghi))
+    (defun def (ghi) (message some-other-ghi))
+    """
+    When I go to word "ghi"
+    And I mark all words like this
+    And I type "hmm"
+    Then I should see:
+    """
+    (defun abc (hmm) (message hmm))
+    (defun def (hmm) (message some-other-hmm))
+    """
+
+  Scenario: Mark all symbols like this in defun with no select
+    Given I turn on emacs-lisp-mode
+    And I turn on delete-selection-mode
+    And I insert:
+    """
+    (defun abc (ghi) (message ghi))
+    (defun def (ghi) (message some-other-ghi))
+    """
+    When I go to word "ghi"
+    And I mark all symbols like this in defun
+    And I type "hmm"
+    Then I should see:
+    """
+    (defun abc (hmm) (message hmm))
+    (defun def (ghi) (message some-other-ghi))
+    """
+
+  Scenario: Mark all words like this in defun with no select
+    Given I turn on emacs-lisp-mode
+    And I turn on delete-selection-mode
+    And I insert:
+    """
+    (defun abc (ghi) (message ghi))
+    (defun def (ghi) (message some-other-ghi))
+    """
+    When I go to word "ghi"
+    And I mark all words like this in defun
+    And I type "hmm"
+    Then I should see:
+    """
+    (defun abc (hmm) (message hmm))
+    (defun def (ghi) (message some-other-ghi))
+    """
diff --git a/features/step-definitions/multiple-cursors-steps.el 
b/features/step-definitions/multiple-cursors-steps.el
index 900eeed..ba25181 100644
--- a/features/step-definitions/multiple-cursors-steps.el
+++ b/features/step-definitions/multiple-cursors-steps.el
@@ -95,3 +95,11 @@
           (assert search nil "The text '%s' was not found in the current 
buffer." text))
         (set-mark (point))
         (re-search-forward text)))
+
+(When "^I mark all \\(.+\\)$"
+      (lambda (rest)
+        (let ((func (intern (mapconcat 'identity
+                                       (cons  "mc/mark-all"
+                                              (split-string rest))
+                                       "-"))))
+          (call-interactively func))))
diff --git a/mc-mark-more.el b/mc-mark-more.el
index ca239e0..eba7bed 100644
--- a/mc-mark-more.el
+++ b/mc-mark-more.el
@@ -225,15 +225,28 @@ With zero ARG, skip the last one and mark next."
       (multiple-cursors-mode 1)
     (multiple-cursors-mode 0)))
 
+(defun mc--select-thing-at-point (thing)
+  (let ((bound (bounds-of-thing-at-point thing)))
+    (when bound
+      (set-mark (car bound))
+      (goto-char (cdr bound))
+      bound)))
+
+(defun mc--select-thing-at-point-or-bark (thing)
+  (unless (or (region-active-p) (mc--select-thing-at-point thing))
+    (error "Mark a region or set cursor on a %s." thing)))
+
 ;;;###autoload
 (defun mc/mark-all-words-like-this ()
   (interactive)
+  (mc--select-thing-at-point-or-bark 'word)
   (let ((mc/enclose-search-term 'words))
     (mc/mark-all-like-this)))
 
 ;;;###autoload
 (defun mc/mark-all-symbols-like-this ()
   (interactive)
+  (mc--select-thing-at-point-or-bark 'symbol)
   (let ((mc/enclose-search-term 'symbols))
     (mc/mark-all-like-this)))
 
@@ -355,6 +368,7 @@ With prefix, it behaves the same as original 
`mc/mark-all-like-this'"
 (defun mc/mark-all-words-like-this-in-defun ()
   "Mark all words like this in defun."
   (interactive)
+  (mc--select-thing-at-point-or-bark 'word)
   (if (mc--in-defun)
       (save-restriction
         (widen)
@@ -366,6 +380,7 @@ With prefix, it behaves the same as original 
`mc/mark-all-like-this'"
 (defun mc/mark-all-symbols-like-this-in-defun ()
   "Mark all symbols like this in defun."
   (interactive)
+  (mc--select-thing-at-point-or-bark 'symbol)
   (if (mc--in-defun)
       (save-restriction
         (widen)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]