X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/c5f7d53647e21064fa47a60c099663763c39b3ca..dfc9a078920aaa69c75b712a9199f38db6c13de4:/lisp/autoinsert.el diff --git a/lisp/autoinsert.el b/lisp/autoinsert.el index 21e83da979..465817d5b8 100644 --- a/lisp/autoinsert.el +++ b/lisp/autoinsert.el @@ -1,9 +1,10 @@ ;;; autoinsert.el --- automatic mode-dependent insertion of text into new files -;; Copyright (C) 1985, 86, 87, 94, 95, 98 Free Software Foundation, Inc. +;; Copyright (C) 1985, 1986, 1987, 1994, 1995, 1998, 2000, 2002, 2003, +;; 2004, 2005 Free Software Foundation, Inc. ;; Author: Charlie Martin -;; Adapted-By: Daniel.Pfeiffer@Informatik.START.dbp.de, fax (+49 69) 7588-2389 +;; Adapted-By: Daniel Pfeiffer ;; Keywords: convenience ;; Maintainer: FSF @@ -21,8 +22,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: @@ -32,8 +33,8 @@ ;; default text much as the mode is automatically set using ;; auto-mode-alist. ;; -;; To use: -;; (add-hook 'find-file-hooks 'auto-insert) +;; To use: +;; (add-hook 'find-file-hook 'auto-insert) ;; setq auto-insert-directory to an appropriate slash-terminated value ;; ;; You can also customize the variable `auto-insert-mode' to load the @@ -46,7 +47,7 @@ ;; Box 3709 ;; Duke University Medical Center ;; Durham, NC 27710 -;; (crm@cs.duke.edu,mcnc!duke!crm) +;; (crm@cs.duke.edu,mcnc!duke!crm) ;;; Code: @@ -57,35 +58,26 @@ :group 'convenience) -(defcustom auto-insert-mode nil - "Toggle auto-insert-mode. -You must modify via \\[customize] for this variable to have an effect." - :set (lambda (symbol value) - (auto-insert-mode (or value 0))) - :initialize 'custom-initialize-default - :type 'boolean - :group 'auto-insert - :require 'autoinsert) - (defcustom auto-insert 'not-modified - "*Controls automatic insertion into newly found empty files: + "*Controls automatic insertion into newly found empty files. +Possible values: nil do nothing t insert if possible other insert if possible, but mark as unmodified. Insertion is possible when something appropriate is found in `auto-insert-alist'. When the insertion is marked as unmodified, you can save it with \\[write-file] RET. -This variable is used when `auto-insert' is called as a function, e.g. -when you do (add-hook 'find-file-hooks 'auto-insert). -With \\[auto-insert], this is always treated as if it were `t'." +This variable is used when the function `auto-insert' is called, e.g. +when you do (add-hook 'find-file-hook 'auto-insert). +With \\[auto-insert], this is always treated as if it were t." :type '(choice (const :tag "Insert if possible" t) (const :tag "Do nothing" nil) - (other :tag "insert if possible, mark as unmodified." + (other :tag "insert if possible, mark as unmodified." not-modified)) :group 'auto-insert) (defcustom auto-insert-query 'function - "*If non-`nil', ask user before auto-inserting. + "*Non-nil means ask user before auto-inserting. When this is `function', only ask when called non-interactively." :type '(choice (const :tag "Don't ask" nil) (const :tag "Ask if called non-interactively" function) @@ -112,22 +104,23 @@ If this contains a %s, that will be replaced by the matching rule." (("\\.\\([Cc]\\|cc\\|cpp\\)\\'" . "C / C++ program") nil "#include \"" - ;; nop without latest cc-mode - (and (fboundp 'c-companion-file) - ;(file-readable-p (c-companion-file 'name)) - (file-name-nondirectory (c-companion-file 'name))) & ?\" - | -10) + (let ((stem (file-name-sans-extension buffer-file-name))) + (cond ((file-exists-p (concat stem ".h")) + (file-name-nondirectory (concat stem ".h"))) + ((file-exists-p (concat stem ".hh")) + (file-name-nondirectory (concat stem ".hh"))))) + & ?\" | -10) - ("[Mm]akefile\\'" . "makefile.inc") + (("[Mm]akefile\\'" . "Makefile") . "makefile.inc") (html-mode . (lambda () (sgml-tag "html"))) - + (plain-tex-mode . "tex-insert.tex") (bibtex-mode . "tex-insert.tex") (latex-mode ;; should try to offer completing read for these "options, RET: " - "\\documentstyle[" str & ?\] | -1 + "\\documentclass[" str & ?\] | -1 ?{ (read-string "class: ") "}\n" ("package, %s: " "\\usepackage[" (read-string "options, RET: ") & ?\] | -1 ?{ str "}\n") @@ -138,18 +131,47 @@ If this contains a %s, that will be replaced by the matching rule." lambda () (if (eq major-mode default-major-mode) (sh-mode))) - + (ada-mode . ada-header) + (("\\.[1-9]\\'" . "Man page skeleton") + "Short description: " + ".\\\" Copyright (C), " (substring (current-time-string) -4) " " + (getenv "ORGANIZATION") | (progn user-full-name) + " +.\\\" You may distribute this file under the terms of the GNU Free +.\\\" Documentation License. +.TH " (file-name-sans-extension (file-name-nondirectory (buffer-file-name))) + " " (file-name-extension (buffer-file-name)) + " " (format-time-string "%Y-%m-%d ") + "\n.SH NAME\n" + (file-name-sans-extension (file-name-nondirectory (buffer-file-name))) + " \\- " str + "\n.SH SYNOPSIS +.B " (file-name-sans-extension (file-name-nondirectory (buffer-file-name))) + "\n" + _ + " +.SH DESCRIPTION +.SH OPTIONS +.SH FILES +.SH \"SEE ALSO\" +.SH BUGS +.SH AUTHOR +" (user-full-name) + '(if (search-backward "&" (line-beginning-position) t) + (replace-match (capitalize (user-login-name)) t t)) + '(end-of-line 1) " <" (progn user-mail-address) ">\n") + (("\\.el\\'" . "Emacs Lisp header") "Short description: " ";;; " (file-name-nondirectory (buffer-file-name)) " --- " str " -;; Copyright (C) " (substring (current-time-string) -4) " by " - (getenv "ORGANIZATION") | "Free Software Foundation, Inc." " +;; Copyright (C) " (substring (current-time-string) -4) " " + (getenv "ORGANIZATION") | (progn user-full-name) " ;; Author: " (user-full-name) -'(if (search-backward "&" (save-excursion (beginning-of-line 1) (point)) t) +'(if (search-backward "&" (line-beginning-position) t) (replace-match (capitalize (user-login-name)) t t)) '(end-of-line 1) " <" (progn user-mail-address) "> ;; Keywords: " @@ -176,8 +198,8 @@ If this contains a %s, that will be replaced by the matching rule." ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to -;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: @@ -187,7 +209,10 @@ If this contains a %s, that will be replaced by the matching rule." -;;; " (file-name-nondirectory (buffer-file-name)) " ends here")) +\(provide '" + (file-name-sans-extension (file-name-nondirectory (buffer-file-name))) + ") +;;; " (file-name-nondirectory (buffer-file-name)) " ends here\n")) "A list specifying text to insert by default into a new file. Elements look like (CONDITION . ACTION) or ((CONDITION . DESCRIPTION) . ACTION). CONDITION maybe a regexp that must match the new file's name, or it may be @@ -204,14 +229,16 @@ described above, e.g. [\"header.insert\" date-and-author-update]." ;; Establish a default value for auto-insert-directory (defcustom auto-insert-directory "~/insert/" - "*Directory from which auto-inserted files are taken." + "*Directory from which auto-inserted files are taken. +The value must be an absolute directory name; +thus, on a GNU or Unix system, it must end in a slash." :type 'directory :group 'auto-insert) ;;;###autoload (defun auto-insert () - "Insert default contents into a new file if `auto-insert' is non-nil. + "Insert default contents into new files if variable `auto-insert' is non-nil. Matches the visited file name against the elements of `auto-insert-alist'." (interactive) (and (not buffer-read-only) @@ -229,7 +256,8 @@ Matches the visited file name against the elements of `auto-insert-alist'." cond (car cond))) (if (if (symbolp cond) (eq cond major-mode) - (string-match cond buffer-file-name)) + (and buffer-file-name + (string-match cond buffer-file-name))) (setq action (cdr (car alist)) alist nil) (setq alist (cdr alist)))) @@ -263,7 +291,10 @@ Matches the visited file name against the elements of `auto-insert-alist'." (vector action)))) (and (buffer-modified-p) (not (eq this-command 'auto-insert)) - (set-buffer-modified-p (eq auto-insert t)))))) + (set-buffer-modified-p (eq auto-insert t))))) + ;; Return nil so that it could be used in + ;; `find-file-not-found-hooks', though that's probably inadvisable. + nil) ;;;###autoload @@ -287,28 +318,19 @@ or if CONDITION had no actions, after all other CONDITIONs." auto-insert-alist)))))) ;;;###autoload -(defun auto-insert-mode (&optional arg) - "Toggle auto-insert mode. -With prefix ARG, turn auto-insert mode on if and only if ARG is positive. -Returns the new status of auto-insert mode (non-nil means on). +(define-minor-mode auto-insert-mode + "Toggle Auto-insert mode. +With prefix ARG, turn Auto-insert mode on if and only if ARG is positive. +Returns the new status of Auto-insert mode (non-nil means on). -When auto-insert mode is enabled, when new files are created you can +When Auto-insert mode is enabled, when new files are created you can insert a template for the file depending on the mode of the buffer." - (interactive "P") - (let ((on-p (if arg - (> (prefix-numeric-value arg) 0) - (not auto-insert-mode)))) - (if on-p - (add-hook 'find-file-hooks 'auto-insert) - (remove-hook 'find-file-hooks 'auto-insert)) - (if (interactive-p) - (message "Auto-insert now %s." (if on-p "on" "off"))) - (setq auto-insert-mode on-p) - )) - -(if auto-insert-mode - (auto-insert-mode 1)) + :global t :group 'auto-insert + (if auto-insert-mode + (add-hook 'find-file-hook 'auto-insert) + (remove-hook 'find-file-hook 'auto-insert))) (provide 'autoinsert) +;; arch-tag: 5b6630ac-c735-43cf-b097-b78c622af909 ;;; autoinsert.el ends here