skelrc: Add a debugging utility.
[skel] / skel.el.in
index b53922e..b56afe0 100644 (file)
@@ -1,7 +1,5 @@
 ;;; -*-emacs-lisp-*-
 ;;;
-;;; $Id: skel.el.in,v 1.3 1999/08/20 07:40:51 mdw Exp $
-;;;
 ;;; Filling in skeletons
 ;;;
 ;;; (c) 1998 Mark Wooding
 ;;; it under the terms of the GNU General Public License as published by
 ;;; the Free Software Foundation; either version 2 of the License, or
 ;;; (at your option) any later version.
-;;; 
+;;;
 ;;; This program is distributed in the hope that it will be useful,
 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;;; GNU General Public License for more details.
-;;; 
+;;;
 ;;; You should have received a copy of the GNU General Public License
 ;;; 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.3  1999/08/20 07:40:51  mdw
-;;; Slight twiddles to the Lisp code.
-;;;
-;;; 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 ---------------------------------------------
 
@@ -71,8 +57,8 @@ just as easily be a function call or something similarly complicated.")
 
 (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)
@@ -85,7 +71,7 @@ together.  BASE is the initial item."
 
 (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)))
 
@@ -94,18 +80,21 @@ root."
       (let ((n (car l)))
        (if (and (file-readable-p n) (file-regular-p n))
            (if all
-               (skel-do-find (cdr l) all (cons (abbreviate-file-name n) acc))
+               (skel-do-find (cdr l)
+                             all
+                             (cons (abbreviate-file-name n) acc))
              (abbreviate-file-name n))
          (skel-do-find (cdr l) all acc)))
     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 ---
 
@@ -134,7 +123,7 @@ first.  ACC is a base list to which the matching filenames are prepended."
 (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 ---
 
@@ -149,20 +138,22 @@ value, the user is prompted for one."
   (let ((pair (assq name skel-alist))
        value)
     (if pair
-       (save-match-data (setq value (eval (cdr pair))))
+       (setq value (eval (cdr pair)))
       (setq value (read-string (format "Value for %s: " name)))
       (setq skel-alist (cons (cons name value) skel-alist)))
     value))
 
 (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)
+       (replace-match (save-match-data
+                        (skel-lookup (match-string 1)))
+                      t t nil)
        (goto-char (match-beginning 0))
        (skel-do-fill-in))))
 
@@ -171,7 +162,7 @@ point."
 (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 ---
   ;;
@@ -207,7 +198,7 @@ argument is called to display the buffer."
 
     (funcall switch (find-file-noselect name))
     (kill-region (point-min) (point-max))
-    (insert-file skel)
+    (insert-file-contents skel)
 
     ;; --- Mangle the skeleton data in the file ---
 
@@ -237,9 +228,9 @@ argument is called to display the buffer."
 
 (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))
 
@@ -247,7 +238,7 @@ to `skel'."
   "Like skel-create-file, but in another window."
   (interactive "FSkeleton create file in other window: \nP")
   (skel-do-create-file name 'switch-to-buffer-other-window skel))
-  
+
 (defun skel-create-file-other-frame (name &optional skel)
   "Like skel-create-file, but in another frame."
   (interactive "FSkeleton create file in other frame: \nP")