emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r102667: New command rectangle-number


From: Chong Yidong
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r102667: New command rectangle-number-lines (Bug#4382).
Date: Wed, 15 Dec 2010 10:56:22 +0800
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 102667
author: Jari Aalto  <address@hidden>
committer: Chong Yidong <address@hidden>
branch nick: trunk
timestamp: Wed 2010-12-15 10:56:22 +0800
message:
  New command rectangle-number-lines (Bug#4382).
  
  * rect.el (rectange--default-line-number-format)
  (rectangle-number-line-callback): New functions.
  (rectangle-number-lines): New command, bound to C-x r N.
modified:
  etc/NEWS
  lisp/ChangeLog
  lisp/rect.el
=== modified file 'etc/NEWS'
--- a/etc/NEWS  2010-12-14 20:42:57 +0000
+++ b/etc/NEWS  2010-12-15 02:56:22 +0000
@@ -303,6 +303,10 @@
 
 *** Support for X cut buffers has been removed.
 
+** New command `rectangle-number-lines', bound to `C-x r N', numbers
+the lines in the current rectangle.  With an prefix argument, this
+prompts for a number to count from and for a format string.
+
 
 * Changes in Specialized Modes and Packages in Emacs 24.1
 

=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2010-12-15 02:05:38 +0000
+++ b/lisp/ChangeLog    2010-12-15 02:56:22 +0000
@@ -1,3 +1,10 @@
+2010-12-15  Jari Aalto  <address@hidden>
+            Scott Evans <address@hidden>
+
+       * rect.el (rectange--default-line-number-format)
+       (rectangle-number-line-callback): New functions.
+       (rectangle-number-lines): New command, bound to C-x r N (Bug#4382).
+
 2010-12-15  Chong Yidong  <address@hidden>
 
        * rect.el (operate-on-rectangle-lines, string-rectangle-string):

=== modified file 'lisp/rect.el'
--- a/lisp/rect.el      2010-12-15 02:05:38 +0000
+++ b/lisp/rect.el      2010-12-15 02:56:22 +0000
@@ -38,6 +38,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:
 
@@ -370,6 +371,45 @@
        (delete-region pt (point))
        (indent-to endcol)))))
 
+;; Line numbers for `rectangle-number-line-callback'.
+(defvar rectangle-number-line-counter)
+
+(defun rectangle-number-line-callback (start end format-string)
+  (move-to-column start t)
+  (insert (format format-string rectangle-number-line-counter))
+  (setq rectangle-number-line-counter
+       (1+ rectangle-number-line-counter)))
+
+(defun rectange--default-line-number-format (start end start-at)
+  (concat "%"
+         (int-to-string (length (int-to-string (+ (count-lines start end)
+                                                  start-at))))
+         "d "))
+
+;;;###autoload
+(defun rectangle-number-lines (start end start-at &optional format)
+  "Insert numbers in front of the region-rectangle.
+
+START-AT, if non-nil, should be a number from which to begin
+counting.  FORMAT, if non-nil, should be a format string to pass
+to `format' along with the line count.  When called interactively
+with a prefix argument, prompt for START-AT and FORMAT."
+  (interactive
+   (if current-prefix-arg
+       (let* ((start (region-beginning))
+             (end   (region-end))
+             (start-at (read-number "Number to count from: " 1)))
+        (list start end start-at
+              (read-string "Format string: "
+                           (rectange--default-line-number-format
+                            start end start-at))))
+     (list (region-beginning) (region-end) 1 nil)))
+  (unless format
+    (setq format (rectange--default-line-number-format start end start-at)))
+  (let ((rectangle-number-line-counter start-at))
+    (apply-on-rectangle 'rectangle-number-line-callback
+                       start end format)))
+
 (provide 'rect)
 
 ;; arch-tag: 178847b3-1f50-4b03-83de-a6e911cc1d16


reply via email to

[Prev in Thread] Current Thread [Next in Thread]