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

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

[nongnu] elpa/multiple-cursors a393384 353/434: Merge pull request #227


From: ELPA Syncer
Subject: [nongnu] elpa/multiple-cursors a393384 353/434: Merge pull request #227 from jtamagnan/insert_letters
Date: Sat, 7 Aug 2021 09:20:58 -0400 (EDT)

branch: elpa/multiple-cursors
commit a393384b3508e7d8d721e66d2bfb97fa7153dd4f
Merge: 415e29f ca822cd
Author: Magnar Sveen <magnars@gmail.com>
Commit: Magnar Sveen <magnars@gmail.com>

    Merge pull request #227 from jtamagnan/insert_letters
    
    Add mc/insert-letters function and test cases
---
 README.md                                          |  1 +
 features/insert-letters.feature                    | 19 +++++++++++++
 .../step-definitions/multiple-cursors-steps.el     |  3 +++
 features/support/env.el                            |  1 +
 mc-separate-operations.el                          | 31 +++++++++++++++++++---
 multiple-cursors-core.el                           |  1 +
 multiple-cursors.el                                |  1 +
 7 files changed, 54 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index e2b0f17..21a7a37 100644
--- a/README.md
+++ b/README.md
@@ -87,6 +87,7 @@ You can [watch an intro to multiple-cursors at Emacs 
Rocks](http://emacsrocks.co
  - `set-rectangular-region-anchor`: Think of this one as `set-mark` except 
you're marking a rectangular region.
  - `mc/mark-sgml-tag-pair`: Mark the current opening and closing tag.
  - `mc/insert-numbers`: Insert increasing numbers for each cursor, top to 
bottom.
+ - `mc/insert-letters`: Insert increasing letters for each cursor, top to 
bottom.
  - `mc/sort-regions`: Sort the marked regions alphabetically.
  - `mc/reverse-regions`: Reverse the order of the marked regions.
 
diff --git a/features/insert-letters.feature b/features/insert-letters.feature
new file mode 100644
index 0000000..7bf56a3
--- /dev/null
+++ b/features/insert-letters.feature
@@ -0,0 +1,19 @@
+Feature: Insert increasing letters
+
+  Scenario: Three cursors, a-b-c
+    Given I have cursors at "text" in "This text contains the word text thrice 
(text)"
+    When I press "H-3"
+    And I press "SPC"
+    Then I should see "This a text contains the word b text thrice (c text)"
+
+  Scenario: Three cursors, j-k-l
+    Given I have cursors at "text" in "This text contains the word text thrice 
(text)"
+    When I press "C-9 H-3"
+    And I press "SPC"
+    Then I should see "This j text contains the word k text thrice (l text)"
+
+  Scenario: Three cursors, z-aa-ab
+    Given I have cursors at "text" in "This text contains the word text thrice 
(text)"
+    When I press "C-u 2 5 H-3"
+    And I press "SPC"
+    Then I should see "This z text contains the word aa text thrice (ab text)"
\ No newline at end of file
diff --git a/features/step-definitions/multiple-cursors-steps.el 
b/features/step-definitions/multiple-cursors-steps.el
index 4d3fc09..11e59dd 100644
--- a/features/step-definitions/multiple-cursors-steps.el
+++ b/features/step-definitions/multiple-cursors-steps.el
@@ -22,6 +22,9 @@
 (When "^I insert numbers$"
       (lambda () (call-interactively 'mc/insert-numbers)))
 
+(When "^I insert letters$"
+      (lambda () (call-interactively 'mc/insert-letters)))
+
 (When "^I reverse regions$"
       (lambda () (call-interactively 'mc/reverse-regions)))
 
diff --git a/features/support/env.el b/features/support/env.el
index 35b9cd7..225c429 100644
--- a/features/support/env.el
+++ b/features/support/env.el
@@ -29,6 +29,7 @@
  (global-set-key (kbd "C-$") 'mc/mark-all-dwim)
  (global-set-key (kbd "M-#") 'mc/mark-all-in-region)
  (global-set-key (kbd "H-0") 'mc/insert-numbers)
+ (global-set-key (kbd "H-3") 'mc/insert-letters)
  (global-set-key (kbd "H-1") 'mc/reverse-regions)
  (global-set-key (kbd "H-2") 'mc/sort-regions)
  (global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)
diff --git a/mc-separate-operations.el b/mc-separate-operations.el
index b587530..412a443 100644
--- a/mc-separate-operations.el
+++ b/mc-separate-operations.el
@@ -53,6 +53,31 @@
                             (mc/cursor-end cursor)) strings))))
     (nreverse strings)))
 
+;;;###autoload
+(defun mc/insert-letters (arg)
+  "Insert increasing letters for each cursor, starting at 0 or ARG.
+     Where letter[0]=a letter[2]=c letter[26]=aa"
+  (interactive "P")
+  (setq mc--insert-letters-number (or arg 0))
+  (mc/for-each-cursor-ordered
+   (mc/execute-command-for-fake-cursor 'mc--insert-letter-and-increase 
cursor)))
+
+(defun mc--number-to-letters (number)
+  (let ((letter
+        (char-to-string
+         (nth (mod number 26) '(?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o 
?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z))))
+       (number2 (/ number 26)))
+    (if (> number2 0)
+       (concat (mc--number-to-letters (- number2 1)) letter)
+      letter)))
+
+(defvar mc--insert-letters-number 0)
+
+(defun mc--insert-letter-and-increase ()
+  (interactive)
+  (insert (mc--number-to-letters mc--insert-letters-number))
+  (setq mc--insert-letters-number (1+ mc--insert-letters-number)))
+
 (defvar mc--strings-to-replace nil)
 
 (defun mc--replace-region-strings-1 ()
@@ -94,13 +119,13 @@ highest colum number (the rightest).
 Might not behave as intended if more than one cursors are on the same line."
   (interactive "c")
   (let ((rightest-column (current-column)))
-    (mc/execute-command-for-all-cursors 
+    (mc/execute-command-for-all-cursors
      (lambda () "get the rightest cursor"
        (interactive)
        (setq rightest-column (max (current-column) rightest-column))
        ))
-    (mc/execute-command-for-all-cursors 
-     (lambda () 
+    (mc/execute-command-for-all-cursors
+     (lambda ()
        (interactive)
        (let ((missing-spaces (- rightest-column (current-column))))
         (save-excursion (insert (make-string missing-spaces character)))
diff --git a/multiple-cursors-core.el b/multiple-cursors-core.el
index 7e919cc..e25f946 100644
--- a/multiple-cursors-core.el
+++ b/multiple-cursors-core.el
@@ -614,6 +614,7 @@ for running commands with multiple cursors.")
                                      mc/mark-all-dwim
                                      mc/mark-sgml-tag-pair
                                      mc/insert-numbers
+                                    mc/insert-letters
                                      mc/sort-regions
                                      mc/reverse-regions
                                      mc/cycle-forward
diff --git a/multiple-cursors.el b/multiple-cursors.el
index 645c713..675cf38 100644
--- a/multiple-cursors.el
+++ b/multiple-cursors.el
@@ -87,6 +87,7 @@
 ;;  - `set-rectangular-region-anchor`: Think of this one as `set-mark` except 
you're marking a rectangular region.
 ;;  - `mc/mark-sgml-tag-pair`: Mark the current opening and closing tag.
 ;;  - `mc/insert-numbers`: Insert increasing numbers for each cursor, top to 
bottom.
+;;  - `mc/insert-letters`: Insert increasing letters for each cursor, top to 
bottom.
 ;;  - `mc/sort-regions`: Sort the marked regions alphabetically.
 ;;  - `mc/reverse-regions`: Reverse the order of the marked regions.
 



reply via email to

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