1;;; autoinsert.el --- automatic mode-dependent insertion of text into new files 2 3;; Copyright (C) 1985, 1986, 1987 Free Software Foundation, Inc. 4 5;; Author: Charlie Martin <crm@cs.duke.edu> 6;; Created: 01 Jul 1988 7 8;; This file is part of GNU Emacs. 9 10;; GNU Emacs is free software; you can redistribute it and/or modify 11;; it under the terms of the GNU General Public License as published by 12;; the Free Software Foundation; either version 2, or (at your option) 13;; any later version. 14 15;; GNU Emacs is distributed in the hope that it will be useful, 16;; but WITHOUT ANY WARRANTY; without even the implied warranty of 17;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18;; GNU General Public License for more details. 19 20;; You should have received a copy of the GNU General Public License 21;; along with GNU Emacs; see the file COPYING. If not, write to 22;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 23 24;;; Commentary: 25 26;;; Abstract: 27;;; 28;;; The following defines an association list for files to be 29;;; automatically inserted when a new file is created, and a function 30;;; which automatically inserts these files; the idea is to insert 31;;; default files much as the mode is automatically set using 32;;; auto-mode-alist. 33;;; 34;;; The auto-insert-alist consists of dotted pairs of 35;;; ( REGEXP . FILENAME ) where REGEXP is a regular expression, and 36;;; FILENAME is the file name of a file which is to be inserted into 37;;; all new files matching the regular expression with which it is 38;;; paired. 39;;; 40;;; To use: 41;;; load autoinsert.el 42;;; setq auto-insert-directory to an appropriate value, which 43;;; must end in "/" 44;;; 45;;; Author: Charlie Martin 46;;; Department of Computer Science and 47;;; National Biomedical Simulation Resource 48;;; Box 3709 49;;; Duke University Medical Center 50;;; Durham, NC 27710 51;;; (crm@cs.duke.edu,mcnc!duke!crm) 52 53;;; Code: 54 55(defvar auto-insert-alist '(("\\.tex$" . "tex-insert.tex") 56 ("\\.c$" . "c-insert.c") 57 ("\\.h$" . "h-insert.c") 58 ("[Mm]akefile" . "makefile.inc") 59 ("\\.bib$" . "tex-insert.tex")) 60 "A list specifying text to insert by default into a new file. 61Elements look like (REGEXP . FILENAME); if the new file's name 62matches REGEXP, then the file FILENAME is inserted into the buffer. 63Only the first matching element is effective.") 64 65;;; Establish a default value for auto-insert-directory 66(defvar auto-insert-directory "~/insert/" 67 "*Directory from which auto-inserted files are taken.") 68 69(defun insert-auto-insert-files () 70 "Insert default contents into a new file. 71Matches the visited file name against the elements of `auto-insert-alist'." 72 (let ((alist auto-insert-alist) 73 ;; remove backup suffixes from file name 74 (name (file-name-sans-versions buffer-file-name)) 75 (insert-file nil)) 76 77 ;; find first matching alist entry 78 (while (and (not insert-file) alist) 79 (if (string-match (car (car alist)) name) 80 (setq insert-file (cdr (car alist))) 81 (setq alist (cdr alist)))) 82 83 ;; Now, if we found an appropriate insert file, insert it 84 (if insert-file 85 (let ((file (concat auto-insert-directory insert-file))) 86 (if (file-readable-p file) 87 (progn 88 (insert-file-contents file) 89 (set-buffer-modified-p nil)) 90 (message "Auto-insert: file %s not found" file) 91 (sleep-for 1)))))) 92 93;; Make this feature take effect when a nonexistent file is visited. 94(setq find-file-not-found-hooks 95 (cons 'insert-auto-insert-files 96 find-file-not-found-hooks)) 97 98;;; autoinsert.el ends here 99