mirror of
https://github.com/magnars/multiple-cursors.el.git
synced 2025-10-13 05:03:03 +00:00
Add mc/sort-regions and mc/reverse-regions
This commit is contained in:
parent
56839dfdca
commit
82a1fe3746
@ -66,6 +66,8 @@ 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.
|
- `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/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-numbers`: Insert increasing numbers for each cursor, top to bottom.
|
||||||
|
- `mc/sort-regions`: Sort the marked regions alphabetically.
|
||||||
|
- `mc/reverse-regions`: Reverse the order of the marked regions.
|
||||||
|
|
||||||
## Tips and tricks
|
## Tips and tricks
|
||||||
|
|
||||||
|
19
features/sort-and-reverse.feature
Normal file
19
features/sort-and-reverse.feature
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Feature: Sorting and reversing cursor regions
|
||||||
|
|
||||||
|
Scenario: Reversing regions
|
||||||
|
Given I have cursors at "text" in "This text contains the word text thrice (text here)"
|
||||||
|
When I press "M-f"
|
||||||
|
And I press "C-f"
|
||||||
|
And I press "C-SPC"
|
||||||
|
And I press "M-f"
|
||||||
|
And I press "H-1"
|
||||||
|
Then I should see "This text here the word text thrice (text contains)"
|
||||||
|
|
||||||
|
Scenario: Sorting regions
|
||||||
|
Given I have cursors at "text" in "This text contains the word text thrice (text here)"
|
||||||
|
When I press "M-f"
|
||||||
|
And I press "C-f"
|
||||||
|
And I press "C-SPC"
|
||||||
|
And I press "M-f"
|
||||||
|
And I press "H-2"
|
||||||
|
Then I should see "This text contains the word text here (text thrice)"
|
@ -26,6 +26,8 @@
|
|||||||
(global-set-key (kbd "M-$") 'mc/mark-all-like-this-dwim)
|
(global-set-key (kbd "M-$") 'mc/mark-all-like-this-dwim)
|
||||||
(global-set-key (kbd "M-#") 'mc/mark-all-in-region)
|
(global-set-key (kbd "M-#") 'mc/mark-all-in-region)
|
||||||
(global-set-key (kbd "H-0") 'mc/insert-numbers)
|
(global-set-key (kbd "H-0") 'mc/insert-numbers)
|
||||||
|
(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)
|
(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)
|
||||||
(global-set-key (kbd "H-SPC") 'set-rectangular-region-anchor)
|
(global-set-key (kbd "H-SPC") 'set-rectangular-region-anchor)
|
||||||
(switch-to-buffer
|
(switch-to-buffer
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
;;; mc-insert-numbers.el
|
|
||||||
|
|
||||||
;; Copyright (C) 2012 Magnar Sveen
|
|
||||||
|
|
||||||
;; Author: Magnar Sveen <magnars@gmail.com>
|
|
||||||
;; Keywords: editing cursors
|
|
||||||
|
|
||||||
;; This program is free software; you can redistribute it and/or modify
|
|
||||||
;; it under the terms of the GNU General Public License as published by
|
|
||||||
;; the Free Software Foundation, either version 3 of the License, or
|
|
||||||
;; (at your option) any later version.
|
|
||||||
|
|
||||||
;; This program is distributed in the hope that it will be useful,
|
|
||||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
;; GNU General Public License for more details.
|
|
||||||
|
|
||||||
;; You should have received a copy of the GNU General Public License
|
|
||||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
;;; Commentary:
|
|
||||||
|
|
||||||
;; This file contains functions for adding increasing integers to
|
|
||||||
;; each cursor.
|
|
||||||
|
|
||||||
;; Please see multiple-cursors.el for more commentary.
|
|
||||||
|
|
||||||
;;; Code:
|
|
||||||
|
|
||||||
(require 'multiple-cursors-core)
|
|
||||||
|
|
||||||
;;;###autoload
|
|
||||||
(defun mc/insert-numbers (arg)
|
|
||||||
(interactive "P")
|
|
||||||
(setq mc--insert-numbers-number (or arg 0))
|
|
||||||
(mc/for-each-cursor-ordered
|
|
||||||
(mc/execute-command-for-fake-cursor 'mc--insert-number-and-increase cursor)))
|
|
||||||
|
|
||||||
(defvar mc--insert-numbers-number 0)
|
|
||||||
|
|
||||||
(defun mc--insert-number-and-increase ()
|
|
||||||
(interactive)
|
|
||||||
(insert (number-to-string mc--insert-numbers-number))
|
|
||||||
(setq mc--insert-numbers-number (1+ mc--insert-numbers-number)))
|
|
||||||
|
|
||||||
(provide 'mc-insert-numbers)
|
|
||||||
;;; mc-insert-numbers.el ends here
|
|
85
mc-separate-operations.el
Normal file
85
mc-separate-operations.el
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
;;; mc-separate-operations.el - functions that work differently on each cursor
|
||||||
|
|
||||||
|
;; Copyright (C) 2012 Magnar Sveen
|
||||||
|
|
||||||
|
;; Author: Magnar Sveen <magnars@gmail.com>
|
||||||
|
;; Keywords: editing cursors
|
||||||
|
|
||||||
|
;; This program is free software; you can redistribute it and/or modify
|
||||||
|
;; it under the terms of the GNU General Public License as published by
|
||||||
|
;; the Free Software Foundation, either version 3 of the License, or
|
||||||
|
;; (at your option) any later version.
|
||||||
|
|
||||||
|
;; This program is distributed in the hope that it will be useful,
|
||||||
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
;; GNU General Public License for more details.
|
||||||
|
|
||||||
|
;; You should have received a copy of the GNU General Public License
|
||||||
|
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;; This file contains functions that work differently on each cursor,
|
||||||
|
;; instead of treating all of them the same.
|
||||||
|
|
||||||
|
;; Please see multiple-cursors.el for more commentary.
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(require 'multiple-cursors-core)
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun mc/insert-numbers (arg)
|
||||||
|
"Insert increasing numbers for each cursor, starting at 0 or ARG."
|
||||||
|
(interactive "P")
|
||||||
|
(setq mc--insert-numbers-number (or arg 0))
|
||||||
|
(mc/for-each-cursor-ordered
|
||||||
|
(mc/execute-command-for-fake-cursor 'mc--insert-number-and-increase cursor)))
|
||||||
|
|
||||||
|
(defvar mc--insert-numbers-number 0)
|
||||||
|
|
||||||
|
(defun mc--insert-number-and-increase ()
|
||||||
|
(interactive)
|
||||||
|
(insert (number-to-string mc--insert-numbers-number))
|
||||||
|
(setq mc--insert-numbers-number (1+ mc--insert-numbers-number)))
|
||||||
|
|
||||||
|
(defun mc--ordered-region-strings ()
|
||||||
|
(let (strings)
|
||||||
|
(save-excursion
|
||||||
|
(mc/for-each-cursor-ordered
|
||||||
|
(add-to-list 'strings (buffer-substring-no-properties
|
||||||
|
(mc/cursor-beg cursor)
|
||||||
|
(mc/cursor-end cursor))))strings)
|
||||||
|
(nreverse strings)))
|
||||||
|
|
||||||
|
(defvar mc--strings-to-replace nil)
|
||||||
|
|
||||||
|
(defun mc--replace-region-strings-1 ()
|
||||||
|
(interactive)
|
||||||
|
(delete-region (region-beginning) (region-end))
|
||||||
|
(insert (car mc--strings-to-replace))
|
||||||
|
(setq mc--strings-to-replace (cdr mc--strings-to-replace)))
|
||||||
|
|
||||||
|
(defun mc--replace-region-strings ()
|
||||||
|
(mc/for-each-cursor-ordered
|
||||||
|
(mc/execute-command-for-fake-cursor 'mc--replace-region-strings-1 cursor)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun mc/reverse-regions ()
|
||||||
|
(interactive)
|
||||||
|
(if (not (use-region-p))
|
||||||
|
(message "Mark regions to reverse first.")
|
||||||
|
(setq mc--strings-to-replace (nreverse (mc--ordered-region-strings)))
|
||||||
|
(mc--replace-region-strings)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun mc/sort-regions ()
|
||||||
|
(interactive)
|
||||||
|
(if (not (use-region-p))
|
||||||
|
(message "Mark regions to sort first.")
|
||||||
|
(setq mc--strings-to-replace (sort (mc--ordered-region-strings) 'string<))
|
||||||
|
(mc--replace-region-strings)))
|
||||||
|
|
||||||
|
(provide 'mc-separate-operations)
|
||||||
|
;;; mc-separate-operations.el ends here
|
@ -566,6 +566,8 @@ for running commands with multiple cursors.")
|
|||||||
mc/mark-all-like-this-dwim
|
mc/mark-all-like-this-dwim
|
||||||
mc/mark-sgml-tag-pair
|
mc/mark-sgml-tag-pair
|
||||||
mc/insert-numbers
|
mc/insert-numbers
|
||||||
|
mc/sort-regions
|
||||||
|
mc/reverse-regions
|
||||||
mc/cycle-forward
|
mc/cycle-forward
|
||||||
mc/cycle-backward
|
mc/cycle-backward
|
||||||
rrm/switch-to-multiple-cursors
|
rrm/switch-to-multiple-cursors
|
||||||
|
@ -83,6 +83,8 @@
|
|||||||
;; - `set-rectangular-region-anchor`: Think of this one as `set-mark` except you're marking a rectangular region.
|
;; - `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/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-numbers`: Insert increasing numbers for each cursor, top to bottom.
|
||||||
|
;; - `mc/sort-regions`: Sort the marked regions alphabetically.
|
||||||
|
;; - `mc/reverse-regions`: Reverse the order of the marked regions.
|
||||||
|
|
||||||
;; ## Tips and tricks
|
;; ## Tips and tricks
|
||||||
|
|
||||||
@ -164,7 +166,7 @@
|
|||||||
(require 'mc-cycle-cursors)
|
(require 'mc-cycle-cursors)
|
||||||
(require 'mc-mark-more)
|
(require 'mc-mark-more)
|
||||||
(require 'rectangular-region-mode)
|
(require 'rectangular-region-mode)
|
||||||
(require 'mc-insert-numbers)
|
(require 'mc-separate-operations)
|
||||||
|
|
||||||
(provide 'multiple-cursors)
|
(provide 'multiple-cursors)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user