From 7fe34999c0926bf9a988cdd1a0913de3f41ab18d Mon Sep 17 00:00:00 2001 From: Jari Aalto Date: Fri, 3 Dec 2010 11:20:38 +0200 Subject: [PATCH] lisp/rect.el: (number-rectangle): New user key binding C-x r N Organization: Private Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Signed-off-by: Jari Aalto --- lisp/rect.el | 40 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 40 insertions(+), 0 deletions(-) diff --git a/lisp/rect.el b/lisp/rect.el index 6658408..f05af8d 100644 --- a/lisp/rect.el +++ b/lisp/rect.el @@ -40,6 +40,7 @@ ;;;###autoload (define-key ctl-x-r-map "y" 'yank-rectangle) ;;;###autoload (define-key ctl-x-r-map "o" 'open-rectangle) ;;;###autoload (define-key ctl-x-r-map "t" 'string-rectangle) +;;;###autoload (define-key ctl-x-r-map "N" 'rectangle-number-lines) ;;; Code: @@ -396,6 +397,45 @@ rectangle which were empty." (delete-region pt (point)) (indent-to endcol))))) +(defvar rectangle-number-line-counter nil + "Variable holding line numbering information. +Initial value is set in function `rectangle-number-lines' +and incremented for each line in `rectangle-number-line-callback'.") + +(defvar rectangle-number-line-format-history nil + "History variable that records previous format strings.") + +(defun rectangle-number-line-callback (start end format-string) + (move-to-column start t) + (setq rectangle-number-line-counter (+ rectangle-number-line-counter 1)) + (insert (format format-string rectangle-number-line-counter))) + +(defun rectangle-number-lines (beg end start-at format &optional no-zero-padding) + "Insert numbers in front of lines in rectangle BEG END. + +START-AT specifices the first number to start at. +FORMAT is format string where %i denotes inserted number. + +If prefix arg NO-ZERO-PADDING is non-nil, do not padd numbers +with leading zeroes." + (interactive + (list + (region-beginning) + (region-end) + (if (functionp 'read-number) + (read-number "First number [1]: " 1) + (string-to-int (read-string "First number [1]: " nil nil "1"))) + (read-string "Format: " "%i " 'rectangle-number-line-format-history) + current-prefix-arg)) + (setq start-at (- start-at 1)) + (unless no-zero-padding + (let* ((max (+ (count-lines beg end) start-at)) + (longest (length (int-to-string (+ 1 max)))) + (fmt (concat "%0" (int-to-string longest) "i"))) + (setq format (replace-regexp-in-string "%i" fmt format)))) + (setq rectangle-number-line-counter start-at) + (apply-on-rectangle 'rectangle-number-line-callback beg end format)) + (provide 'rect) ;; arch-tag: 178847b3-1f50-4b03-83de-a6e911cc1d16 -- 1.7.2.3