Function: mc/edit-lines

mc/edit-lines is an interactive and natively compiled function defined in mc-edit-lines.el.

Signature

(mc/edit-lines &optional ARG)

Documentation

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.

Key Bindings

This command is not in any keymaps.

Source Code

;; Defined in /nix/store/5q7a78ihkz25lf4xmxaa9m7b2ym63m36-emacs-packages-deps/share/emacs/site-lisp/elpa/multiple-cursors-20260419.931/mc-edit-lines.el
;;;###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")
  (unless mark-active
    (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)))