wsr@lmi-angel.UUCP (Wolfgang Rupprecht) (11/14/86)
Here are two functions that you might find usefull: header and
box-region-for-currant-mode.
M-x header makes a header for the currant file. It uses the
appropriate comment characters for currant mode, and fils in most of
the header for you. It leaves the point and mark around a comment
field that needs filing in.
M-x box-region-for-currant-mode makes a comment box, according
to the currant buffers' mode.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; File: head.el ;;
;; Author: Wolfgang Rupprecht ;;
;; Created: Thu Oct 9 14:55:37 EDT 1986 ;;
;; Contents: gnuemacs code to make boxes and headers just like this ;;
;; ;;
;; $Log$ ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Copyright 1986 Wolfgang Rupprecht
(defvar box-column 80 "last column used when drawing boxes via box command")
(defun c-box-region (start end)
"draw a box around the current region from POINT to MARK"
(interactive "r")
(save-excursion
(goto-char start)
(set-mark end)
(insert "/")
(let ((count (1- box-column)))
(while
(< 0 (setq count (1- count)))
(insert ?*)))
(insert ?\n)
(while (< (point) (mark)) ;note: mark != end anymore
(insert ?* ?\t)
(end-of-line 1)
(indent-to (- box-column 2))
(insert ?*)
(forward-line 1))
(let ((count (1- box-column)))
(while
(< 0 (setq count (1- count)))
(insert ?*)))
(insert ?/ ?\n)))
(defun header (start)
"put a file-header at the current point"
(interactive "d") ;value of point as number
(let ((end start) leave-point leave-mark)
(goto-char start)
(insert "\n"
"File: " (file-name-nondirectory (buffer-file-name)) "\n"
"Author: " (user-full-name) "\n"
"Created: " (current-time-string) "\n"
"Contents: ")
(setq leave-point (point-marker))
(insert ">>>Replace this with YOUR description of file contents<<<")
(setq leave-mark (point-marker))
(insert "\n\n$Log$\n") ;for RCS log messages
(box-region-for-current-mode end (point))
(goto-char (marker-position leave-point))
(set-mark (marker-position leave-mark))
))
(defun box-region-for-current-mode (start end)
"draw a lisp or C box around region, depending on mode"
(interactive "r")
(cond
((eq major-mode 'c-mode) (c-box-region start end))
((eq major-mode 'text-mode) (lisp-box-region start end ?#)) ;shell or makefile
((eq major-mode 'fundamental-mode) (lisp-box-region start end ?#)) ;shell or makefile
((eq major-mode 'lisp-mode) (lisp-box-region start end ?\;))
((eq major-mode 'emacs-lisp-mode) (lisp-box-region start end ?\;))
(t (lisp-box-region start end nil)))) ;use what-ever is defaulted
(defun lisp-box-region (start end char)
"draw a lisp box around the current region from POINT to MARK using CHAR
if char is nil default char is \;"
(interactive "r\nP")
(save-excursion
(let ((box-char (or char ?\;)))
(goto-char start)
(set-mark end)
(let ((count box-column))
(while
(< 0 (setq count (1- count)))
(insert box-char)))
(insert ?\n)
(while (< (point) (mark)) ;must be the real mark, since mark != end anymore
(insert box-char box-char ?\t)
(end-of-line 1)
(indent-to (- box-column 3))
(insert box-char box-char)
(forward-line 1))
(let ((count box-column))
(while
(< 0 (setq count (1- count)))
(insert box-char)))
(insert ?\n))))
--
Wolfgang Rupprecht {harvard|decvax!cca|mit-eddie}!lmi-angel!wsr