X-Git-Url: https://git.distorted.org.uk/~mdw/skel/blobdiff_plain/0beaeb377e3ff99dc172ee59b7759824c0b56ec5..0aece27bb1a3cc43d22fbcbb702595f6f2fc89f3:/skel.el.in diff --git a/skel.el.in b/skel.el.in index bb039b8..b56afe0 100644 --- a/skel.el.in +++ b/skel.el.in @@ -1,7 +1,5 @@ ;;; -*-emacs-lisp-*- ;;; -;;; $Id: skel.el.in,v 1.5 2004/04/08 01:36:28 mdw Exp $ -;;; ;;; Filling in skeletons ;;; ;;; (c) 1998 Mark Wooding @@ -13,12 +11,12 @@ ;;; 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. @@ -33,16 +31,17 @@ (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 --------------------------------------------- @@ -58,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) @@ -72,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))) @@ -81,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 --- @@ -121,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 --- @@ -136,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)))) @@ -158,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 --- ;; @@ -194,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 --- @@ -224,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)) @@ -234,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")