Function: cua--rectangle-operation
cua--rectangle-operation is a byte-compiled function defined in
cua-rect.el.gz.
Signature
(cua--rectangle-operation KEEP-CLEAR VISIBLE UNDO PAD TABIFY &optional FCT POST-FCT)
Documentation
Call FCT for each line of region with 4 parameters: Region start, end, left-col, right-col. Point is at start when FCT is called. Call fct with (s,e) = whole lines if VISIBLE non-nil. Only call fct for visible lines if VISIBLE==t. Set undo boundary if UNDO is non-nil. Rectangle is padded if PAD = t or numeric and (cua--rectangle-virtual-edges) Perform auto-tabify after operation if TABIFY is non-nil. Mark is kept if keep-clear is 'keep and cleared if keep-clear is 'clear.
Source Code
;; Defined in /usr/src/emacs/lisp/emulation/cua-rect.el.gz
(defun cua--rectangle-operation (keep-clear visible undo pad tabify &optional fct post-fct)
"Call FCT for each line of region with 4 parameters:
Region start, end, left-col, right-col.
Point is at start when FCT is called.
Call fct with (s,e) = whole lines if VISIBLE non-nil.
Only call fct for visible lines if VISIBLE==t.
Set undo boundary if UNDO is non-nil.
Rectangle is padded if PAD = t or numeric and (cua--rectangle-virtual-edges)
Perform auto-tabify after operation if TABIFY is non-nil.
Mark is kept if keep-clear is 'keep and cleared if keep-clear is 'clear."
(declare (indent 4))
(let* ((inhibit-field-text-motion t)
(start (cua--rectangle-top))
(end (cua--rectangle-bot))
(l (cua--rectangle-left))
(r (1+ (cua--rectangle-right)))
(m (make-marker))
(tabpad (and (integerp pad) (= pad 2)))
(sel (cua--rectangle-restriction))
(tabify-start (and tabify (cua--tabify-start start end))))
(if undo
(cua--rectangle-undo-boundary))
(if (integerp pad)
(setq pad (cua--rectangle-virtual-edges)))
(save-excursion
(save-restriction
(widen)
(when (> (cua--rectangle-corner) 1)
(goto-char end)
(and (bolp) (not (eolp)) (not (eobp))
(setq end (1+ end))))
(when (eq visible t)
(setq start (max (window-start) start))
(setq end (min (window-end) end)))
(goto-char end)
(setq end (line-end-position))
(if (and visible (bolp) (not (eobp)))
(setq end (1+ end)))
(goto-char start)
(setq start (line-beginning-position))
(narrow-to-region start end)
(goto-char (point-min))
(while (< (point) (point-max))
(move-to-column r pad)
(and (not pad) (not visible) (> (current-column) r)
(backward-char 1))
(if (and tabpad (not pad) (looking-at "\t"))
(forward-char 1))
(set-marker m (point))
(move-to-column l pad)
(if (and fct (or visible (and (>= (current-column) l) (<= (current-column) r))))
(let ((v t) (p (point)))
(when sel
(if (car (cdr sel))
(setq v (looking-at (car sel)))
(setq v (re-search-forward (car sel) m t))
(goto-char p))
(if (car (cdr (cdr sel)))
(setq v (null v))))
(if visible
(funcall fct p m l r v)
(if v
(funcall fct p m l r)))))
(set-marker m nil)
(forward-line 1))
(if (not visible)
(cua--rectangle-bot t))
(if post-fct
(funcall post-fct l r))
(when tabify-start
(tabify tabify-start (point)))))
(cond
((eq keep-clear 'keep)
(cua--keep-active))
((eq keep-clear 'clear)
(cua--deactivate))
((eq keep-clear 'corners)
(cua--rectangle-set-corners)
(cua--keep-active)))
(setq cua--buffer-and-point-before-command nil)))