;;; -*-emacs-lisp-*-
;;;
-;;; $Id: skel.el.in,v 1.5 2004/04/08 01:36:28 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.
(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)))
(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 ---
(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 ---
(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))))
(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 ---
;;
(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 ---
(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))
"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")