mly@WHEATIES.AI.MIT.EDU (Richard Mlynarik) (01/01/89)
(I doubt that the original query was for this sort of thing, but somebody
else might find this code useful.)
;;>> Problem: Tabs at beginning of lines
(defun display-line-numbers ()
(interactive)
(or (eq (current-buffer) (window-buffer (selected-window)))
(error "%s is not the selected window's buffer."))
(let ((buffer-read-only nil)
(modified (buffer-modified-p))
(name buffer-file-name)
(point (point-marker))
format-string
line-number
(count 0)
nlines
first-line)
(save-restriction
(widen)
(save-excursion
(setq first-line (window-start (selected-window)))
(goto-char first-line)
(setq line-number (1+ (count-lines (point-min) (point))))
(move-to-window-line -1)
(beginning-of-line)
(setq nlines (count-lines first-line (point)))
(let ((max (+ line-number nlines)))
(setq format-string (cond ((< max 100) "%2d")
((< max 1000) "%3d")
((< max 10000) "%4d")
(t "%7d"))))))
(save-excursion
(unwind-protect
(progn
(goto-char first-line)
;; defeat file locking... don't try this at home, kids!
(setq buffer-file-name nil)
(while (<= count nlines)
(insert-before-markers (format format-string line-number))
(setq insert-end (point))
(setq line-number (1+ line-number)
count (1+ count))
(forward-line 1))
(set-window-start (selected-window) first-line)
(goto-char point)
(set-buffer-modified-p modified)
(message "<<< Press SPACE to continue >>>")
(let ((char (read-char)))
(or (eql char ?\ )
(setq unread-command-char char))))
(goto-char first-line)
(let ((n (- (aref format-string 1) ?0)))
(while (> count 0)
(setq count (1- count))
(delete-char n)
(forward-line 1)))
(setq buffer-file-name name)
(set-buffer-modified-p modified)))))