summaryrefslogtreecommitdiff
path: root/elpa/multiple-cursors-20220328.1724/mc-edit-lines.el
diff options
context:
space:
mode:
authormattkae <mattkae@protonmail.com>2022-05-11 09:23:58 -0400
committermattkae <mattkae@protonmail.com>2022-05-11 09:23:58 -0400
commit3f4a0d5370ae6c34afe180df96add3b8522f4af1 (patch)
treeae901409e02bde8ee278475f8cf6818f8f680a60 /elpa/multiple-cursors-20220328.1724/mc-edit-lines.el
initial commit
Diffstat (limited to 'elpa/multiple-cursors-20220328.1724/mc-edit-lines.el')
-rw-r--r--elpa/multiple-cursors-20220328.1724/mc-edit-lines.el110
1 files changed, 110 insertions, 0 deletions
diff --git a/elpa/multiple-cursors-20220328.1724/mc-edit-lines.el b/elpa/multiple-cursors-20220328.1724/mc-edit-lines.el
new file mode 100644
index 0000000..55772af
--- /dev/null
+++ b/elpa/multiple-cursors-20220328.1724/mc-edit-lines.el
@@ -0,0 +1,110 @@
+;;; mc-edit-lines.el
+
+;; Copyright (C) 2012-2016 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 to add multiple cursors to consecutive lines
+;; given an active region.
+
+;; Please see multiple-cursors.el for more commentary.
+
+;;; Code:
+
+(require 'multiple-cursors-core)
+
+(defcustom mc/edit-lines-empty-lines nil
+ "What should be done by `mc/edit-lines' when a line is not long enough."
+ :type '(radio (const :tag "Pad the line with spaces." pad)
+ (const :tag "Ignore the line." ignore)
+ (const :tag "Signal an error." error)
+ (const :tag "Nothing. Cursor is at end of line." nil))
+ :group 'multiple-cursors)
+
+;;;###autoload
+(defun mc/edit-lines (&optional arg)
+ "Add one cursor to each line of the active region.
+Starts from mark and moves in straight down or up towards the
+line point is on.
+
+What is done with lines which are not long enough is governed by
+`mc/edit-lines-empty-lines'. The prefix argument ARG can be used
+to override this. If ARG is a symbol (when called from Lisp),
+that symbol is used instead of `mc/edit-lines-empty-lines'.
+Otherwise, if ARG negative, short lines will be ignored. Any
+other non-nil value will cause short lines to be padded."
+ (interactive "P")
+ (when (not (and mark-active (/= (point) (mark))))
+ (error "Mark a set of lines first"))
+ (mc/remove-fake-cursors)
+ (let* ((col (current-column))
+ (point-line (mc/line-number-at-pos))
+ (mark-line (progn (exchange-point-and-mark) (mc/line-number-at-pos)))
+ (direction (if (< point-line mark-line) :up :down))
+ (style (cond
+ ;; called from lisp
+ ((and arg (symbolp arg))
+ arg)
+ ;; negative argument
+ ((< (prefix-numeric-value arg) 0)
+ 'ignore)
+ (arg 'pad)
+ (t mc/edit-lines-empty-lines))))
+ (deactivate-mark)
+ (when (and (eq direction :up) (bolp))
+ (previous-logical-line 1 nil)
+ (move-to-column col))
+ ;; Add the cursors
+ (while (not (eq (mc/line-number-at-pos) point-line))
+ ;; Pad the line
+ (when (eq style 'pad)
+ (while (< (current-column) col)
+ (insert " ")))
+ ;; Error
+ (when (and (eq style 'error)
+ (not (equal col (current-column))))
+ (error "Short line encountered in `mc/edit-lines'"))
+ ;; create the cursor
+ (unless (and (eq style 'ignore)
+ (not (equal col (current-column))))
+ (mc/create-fake-cursor-at-point))
+ ;; proceed to next
+ (if (eq direction :up)
+ (previous-logical-line 1 nil)
+ (next-logical-line 1 nil))
+ (move-to-column col))
+ (multiple-cursors-mode)))
+
+;;;###autoload
+(defun mc/edit-ends-of-lines ()
+ "Add one cursor to the end of each line in the active region."
+ (interactive)
+ (mc/edit-lines)
+ (mc/execute-command-for-all-cursors 'end-of-line))
+
+;;;###autoload
+(defun mc/edit-beginnings-of-lines ()
+ "Add one cursor to the beginning of each line in the active region."
+ (interactive)
+ (mc/edit-lines)
+ (mc/execute-command-for-all-cursors 'beginning-of-line))
+
+(provide 'mc-edit-lines)
+
+;;; mc-edit-lines.el ends here