Skip to content

Commit

Permalink
Merge pull request #227 from jtamagnan/insert_letters
Browse files Browse the repository at this point in the history
Add mc/insert-letters function and test cases
  • Loading branch information
magnars committed Dec 5, 2015
2 parents 415e29f + ca822cd commit a393384
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 3 deletions.
1 change: 1 addition & 0 deletions README.md
Expand Up @@ -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.

Expand Down
19 changes: 19 additions & 0 deletions 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)"
3 changes: 3 additions & 0 deletions features/step-definitions/multiple-cursors-steps.el
Expand Up @@ -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)))

Expand Down
1 change: 1 addition & 0 deletions features/support/env.el
Expand Up @@ -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)
Expand Down
31 changes: 28 additions & 3 deletions mc-separate-operations.el
Expand Up @@ -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 ()
Expand Down Expand Up @@ -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)))
Expand Down
1 change: 1 addition & 0 deletions multiple-cursors-core.el
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions multiple-cursors.el
Expand Up @@ -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.

Expand Down

0 comments on commit a393384

Please sign in to comment.