;;; -*-emacs-lisp-*-
;;;
-;;; $Id: skel.el.in,v 1.2 1999/05/05 19:30:38 mdw Exp $
+;;; $Id: skel.el.in,v 1.5 2004/04/08 01:36:28 mdw Exp $
;;;
;;; Filling in skeletons
;;;
;;; along with this program; if not, write to the Free Software Foundation,
;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-;;;----- Revision history ---------------------------------------------------
-;;;
-;;; $Log: skel.el.in,v $
-;;; Revision 1.2 1999/05/05 19:30:38 mdw
-;;; Misc tidying.
-;;;
-;;; Revision 1.1.1.1 1999/04/05 13:44:59 mdw
-;;; Initial import.
-;;;
-
;;;----- Variables (largely tweakable) --------------------------------------
(defvar skel-directory-list '(".skel" "")
"*List of directory names which contain skeleton files.")
-(defvar skel-skeleton-path '("@skeldir@" "~/skel" "~/src/skel")
+(defvar skel-skeleton-path '("/etc/skel" "@skeldir@" "~/skel" "~/src/skel")
"*List of directories to search for skeleton data anyway.")
(defvar skel-skelrc '(".skelrc" "skelrc")
"*File containing skeleton substitution data, looked up using the standard
-skeleton search mathod.")
+ skeleton search mathod.")
(defvar skel-alist '()
"Alist of values to substitute into a skeleton. It is filled in by skelrc
-files and user interaction.
+ files and user interaction.
-The alist's keys are symbols, interned from the placeholder strings in the
-skeleton file. The values are forms to be evaluated. In the simplest case,
-the form is a string added as a result of user interaction; however, it could
-just as easily be a function call or something similarly complicated.")
+ The alist's keys are symbols, interned from the placeholder strings in the
+ skeleton file. The values are forms to be evaluated. In the simplest
+ case, the form is a string added as a result of user interaction; however,
+ it could just as easily be a function call or something similarly
+ complicated.")
;;;----- Finding skeleton files ---------------------------------------------
(defun skel-join (jfun base &rest ll)
"Return a list built from joining elements from the given lists in order,
-left to right. JFUN is a function of two arguments which can join items
-together. BASE is the initial item."
+ left to right. JFUN is a function of two arguments which can join items
+ together. BASE is the initial item."
(nreverse (skel-do-join nil jfun ll base)))
(defun skel-do-parents (dir acc)
(defun skel-parents (dir)
"Returns a list of DIR, DIR's parent directory, etc., all the way up to the
-root."
+ root."
(setq dir (expand-file-name dir))
(nreverse (skel-do-parents dir nil)))
acc))
(defun skel-find-skeleton (name &optional all acc)
- "Searches for skeleton files. NAME is the name of the file to find, or
-a list of possible names.
+ "Searches for skeleton files. NAME is the name of the file to find, or a
+ list of possible names.
-If ALL is nil, or omitted, return only the first matching filename
-encountered. Otherwise, return a list of all matching names, most `global'
-first. ACC is a base list to which the matching filenames are prepended."
+ If ALL is nil, or omitted, return only the first matching filename
+ encountered. Otherwise, return a list of all matching names, most
+ `global' first. ACC is a base list to which the matching filenames are
+ prepended."
;; --- Build one big list of all the possible names ---
- (let ((l (skel-join (lambda (x y) (if (string= y "")
- x
- (expand-file-name y x)))
+ (let ((l (skel-join #'(lambda (x y) (if (string= y "")
+ x
+ (expand-file-name y x)))
nil
(append (skel-parents default-directory)
skel-skeleton-path)
(defun skel-lookup (name)
"Reads the value of symbol NAME in skel-alist. If there is no currrent
-value, the user is prompted for one."
+ value, the user is prompted for one."
;; --- Resolve NAME into a symbol ---
(defun skel-do-fill-in ()
"Does the actual donkey-work of filling in a file. For each fill-in area
-in the current buffer, the function looks to see if the item in question has
-been entered into ALIST: if so, it is replaced automatically; otherwise the
-user is promted to enter a string to substitute into the buffer at this
-point."
+ in the current buffer, the function looks to see if the item in question
+ has been entered into ALIST: if so, it is replaced automatically;
+ otherwise the user is promted to enter a string to substitute into the
+ buffer at this point."
(if (re-search-forward "\\[\\[\\([^]]*\\)\\]\\]" nil t)
(progn
(replace-match (skel-lookup (match-string 1)) t t nil)
(defun skel-do-create-file (name switch &optional skel)
"Does the main work of creating a file based on a skeleton. The SWITCH
-argument is called to display the buffer."
+ argument is called to display the buffer."
;; --- Some local variables ---
;;
(and ext
(skel-find-skeleton
(if (listp skel-skelrc)
- (mapcar (lambda (x) (concat x ext)) skel-skelrc)
+ (mapcar #'(lambda (x) (concat x ext)) skel-skelrc)
(concat skel-skelrc ext))
t)))))
(while rc
(defun skel-create-file (name &optional skel)
"Creates a new file called NAME and visits it. If SKEL is non-`nil', it is
-the name of a skeleton file to insert and substitute. Otherwise the skeleton
-file's name is derived from NAME by taking NAME's extension and appending it
-to `skel'."
+ the name of a skeleton file to insert and substitute. Otherwise the
+ skeleton file's name is derived from NAME by taking NAME's extension and
+ appending it to `skel'."
(interactive "FSkeleton create file: \nP")
(skel-do-create-file name 'switch-to-buffer skel))