annotate lisp/autoinsert.el @ 18092:8428d56cd207

(smtpmail-via-smtp): Recognize XVRB as a synonym for VERB and XONE as a synonym for ONEX. (smtpmail-read-response): Add "%s" to `message' calls to avoid problems with percent signs in strings. (smtpmail-read-response): Return all lines of the response text as a list of strings. Formerly only the first line was returned. This is insufficient when one wants to parse e.g. an EHLO response. Ignore responses starting with "0". This is necessary to support the VERB SMTP extension. (smtpmail-via-smtp): Try EHLO and find out which SMTP service extensions the receiving mailer supports. Issue the ONEX and XUSR commands if the corresponding extensions are supported. Issue VERB if supported and `smtpmail-debug-info' is non-nil. Add SIZE attribute to MAIL FROM: command if SIZE extension is supported. Add code that could set the BODY= attribute to MAIL FROM: if the receiving mailer supports 8BITMIME. This is currently disabled, since doing it right might involve adding MIME headers to, and in some cases reencoding, the message.
author Richard M. Stallman <rms@gnu.org>
date Sun, 01 Jun 1997 22:24:22 +0000
parents 852464ce5d6a
children 11218164bc54
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 180
diff changeset
1 ;;; autoinsert.el --- automatic mode-dependent insertion of text into new files
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14153
diff changeset
2
12502
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
3 ;; Copyright (C) 1985, 1986, 1987, 1994, 1995 Free Software Foundation, Inc.
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
4
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
5 ;; Author: Charlie Martin <crm@cs.duke.edu>
12502
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
6 ;; Adapted-By: Daniel.Pfeiffer@Informatik.START.dbp.de, fax (+49 69) 7588-2389
17976
852464ce5d6a Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14181
diff changeset
7 ;; Maintainer: FSF
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 ;; any later version.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19 ;; GNU General Public License for more details.
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14153
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14153
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14153
diff changeset
24 ;; Boston, MA 02111-1307, USA.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
26 ;;; Commentary:
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27
12502
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
28 ;; The following defines an association list for text to be
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
29 ;; automatically inserted when a new file is created, and a function
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
30 ;; which automatically inserts these files; the idea is to insert
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
31 ;; default text much as the mode is automatically set using
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
32 ;; auto-mode-alist.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
33 ;;
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
34 ;; To use:
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
35 ;; (add-hook 'find-file-hooks 'auto-insert)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
36 ;; setq auto-insert-directory to an appropriate slash-terminated value
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
37 ;;
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
38 ;; Author: Charlie Martin
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
39 ;; Department of Computer Science and
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
40 ;; National Biomedical Simulation Resource
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
41 ;; Box 3709
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
42 ;; Duke University Medical Center
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
43 ;; Durham, NC 27710
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
44 ;; (crm@cs.duke.edu,mcnc!duke!crm)
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
46 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
47
12502
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
48 (defvar auto-insert 'not-modified
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
49 "*Controls automatic insertion into newly found empty files:
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
50 nil do nothing
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
51 t insert if possible
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
52 other insert if possible, but mark as unmodified.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
53 Insertion is possible when something appropriate is found in
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
54 `auto-insert-alist'. When the insertion is marked as unmodified, you can
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
55 save it with \\[write-file] RET.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
56 This variable is used when `auto-insert' is called as a function, e.g.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
57 when you do (add-hook 'find-file-hooks 'auto-insert).
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
58 With \\[auto-insert], this is always treated as if it were `t'.")
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
59
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
60
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
61 (defvar auto-insert-query 'function
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
62 "*If non-`nil', ask user before auto-inserting.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
63 When this is `function', only ask when called non-interactively.")
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
64
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
65
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
66 (defvar auto-insert-prompt "Perform %s auto-insertion? "
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
67 "*Prompt to use when querying whether to auto-insert.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
68 If this contains a %s, that will be replaced by the matching rule.")
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
69
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
70
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
71 (defvar auto-insert-alist
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
72 '((("\\.\\([Hh]\\|hh\\|hpp\\)\\'" . "C / C++ header")
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
73 (upcase (concat (file-name-nondirectory
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
74 (substring buffer-file-name 0 (match-beginning 0)))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
75 "_"
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
76 (substring buffer-file-name (1+ (match-beginning 0)))))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
77 "#ifndef " str \n
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
78 "#define " str "\n\n"
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
79 _ "\n\n#endif")
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
80
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
81 (("\\.\\([Cc]\\|cc\\|cpp\\)\\'" . "C / C++ program")
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
82 nil
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
83 "#include \""
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
84 ;; nop without latest cc-mode
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
85 (and (fboundp 'c-companion-file)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
86 ;(file-readable-p (c-companion-file 'name))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
87 (file-name-nondirectory (c-companion-file 'name))) & ?\"
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
88 | -10)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
89
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
90 ("[Mm]akefile\\'" . "makefile.inc")
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
91
14153
3e949d37e46f (auto-insert-alist): For html-mode, use `sgml-tag'.
Richard M. Stallman <rms@gnu.org>
parents: 12502
diff changeset
92 (html-mode . (lambda () (sgml-tag "html")))
12502
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
93
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
94 (plain-tex-mode . "tex-insert.tex")
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
95 (bibtex-mode . "tex-insert.tex")
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
96 (latex-mode
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
97 ;; should try to offer completing read for these
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
98 "options, RET: "
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
99 "\\documentstyle[" str & ?\] | -1
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
100 ?{ (read-string "class: ") "}\n"
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
101 ("package, %s: "
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
102 "\\usepackage[" (read-string "options, RET: ") & ?\] | -1 ?{ str "}\n")
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
103 _ "\n\\begin{document}\n" _
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
104 "\n\\end{document}")
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
105
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
106 (("/bin/.*[^/]\\'" . "Shell-Script mode magic number")
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
107 lambda ()
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
108 (if (eq major-mode default-major-mode)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
109 (sh-mode)))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
110
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
111 (ada-mode . ada-header)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
112
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
113 (("\\.el\\'" . "Emacs Lisp header")
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
114 "Short description: "
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
115 ";;; " (file-name-nondirectory (buffer-file-name)) " --- " str "
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
116
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
117 ;; Copyright (C) " (substring (current-time-string) -4) " by "
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
118 (getenv "ORGANIZATION") | "Free Software Foundation, Inc." "
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
119
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
120 ;; Author: " (user-full-name)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
121 '(if (search-backward "&" (save-excursion (beginning-of-line 1) (point)) t)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
122 (replace-match (capitalize (user-login-name)) t t))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
123 '(end-of-line 1) " <" (user-login-name) ?@ (system-name) ">
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
124 ;; Keywords: "
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
125 '(require 'finder)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
126 ;;'(setq v1 (apply 'vector (mapcar 'car finder-known-keywords)))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
127 '(setq v1 (mapcar (lambda (x) (list (symbol-name (car x))))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
128 finder-known-keywords)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
129 v2 (mapconcat (lambda (x) (format "%10.0s: %s" (car x) (cdr x)))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
130 finder-known-keywords
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
131 "\n"))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
132 ((let ((minibuffer-help-form v2))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
133 (completing-read "Keyword, C-h: " v1 nil t))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
134 str ", ") & -2 "
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
135
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
136 ;; This file is part of GNU Emacs.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
137
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
138 ;; GNU Emacs is free software; you can redistribute it and/or modify
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
139 ;; it under the terms of the GNU General Public License as published by
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
140 ;; the Free Software Foundation; either version 2, or (at your option)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
141 ;; any later version.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
142
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
143 ;; GNU Emacs is distributed in the hope that it will be useful,
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
144 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
145 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
146 ;; GNU General Public License for more details.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
147
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
148 ;; You should have received a copy of the GNU General Public License
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
149 ;; along with GNU Emacs; see the file COPYING. If not, write to
14181
aacf08497202 (auto-insert-alist): Use FSF's new address.
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
150 ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
aacf08497202 (auto-insert-alist): Use FSF's new address.
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
151 ;; Boston, MA 02111-1307, USA.
12502
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
152
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
153 ;;; Commentary:
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
154
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
155 ;; " _ "
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
156
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
157 ;;; Code:
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
158
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
159
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
160
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
161 ;;; " (file-name-nondirectory (buffer-file-name)) " ends here"))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 "A list specifying text to insert by default into a new file.
12502
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
163 Elements look like (CONDITION . ACTION) or ((CONDITION . DESCRIPTION) . ACTION).
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
164 CONDITION maybe a regexp that must match the new file's name, or it may be
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
165 a symbol that must match the major mode for this element to apply.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
166 Only the first matching element is effective.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
167 Optional DESCRIPTION is a string for filling `auto-insert-prompt'.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
168 ACTION may be a skeleton to insert (see `skeleton-insert'), an absolute
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
169 file-name or one relative to `auto-insert-directory' or a function to call.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
170 ACTION may also be a vector containing several successive single actions as
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
171 described above, e.g. [\"header.insert\" date-and-author-update].")
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172
12502
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
173
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
174 ;; Establish a default value for auto-insert-directory
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 (defvar auto-insert-directory "~/insert/"
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 "*Directory from which auto-inserted files are taken.")
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177
12502
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
178
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
179 ;;;###autoload
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
180 (defun auto-insert ()
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
181 "Insert default contents into a new file if `auto-insert' is non-nil.
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 Matches the visited file name against the elements of `auto-insert-alist'."
12502
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
183 (interactive)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
184 (and (not buffer-read-only)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
185 (or (eq this-command 'auto-insert)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
186 (and auto-insert
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
187 (bobp) (eobp)))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
188 (let ((alist auto-insert-alist)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
189 case-fold-search cond desc action)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
190 (goto-char 1)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
191 ;; find first matching alist entry
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
192 (while alist
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
193 (if (atom (setq cond (car (car alist))))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
194 (setq desc cond)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
195 (setq desc (cdr cond)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
196 cond (car cond)))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
197 (if (if (symbolp cond)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
198 (eq cond major-mode)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
199 (string-match cond buffer-file-name))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
200 (setq action (cdr (car alist))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
201 alist nil)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
202 (setq alist (cdr alist))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203
12502
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
204 ;; Now, if we found something, do it
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
205 (and action
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
206 (if (stringp action)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
207 (file-readable-p (concat auto-insert-directory action))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
208 t)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
209 (if auto-insert-query
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
210 (or (if (eq auto-insert-query 'function)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
211 (eq this-command 'auto-insert))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
212 (y-or-n-p (format auto-insert-prompt desc)))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
213 t)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
214 (mapcar
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
215 (lambda (action)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
216 (if (stringp action)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
217 (if (file-readable-p
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
218 (setq action (concat auto-insert-directory action)))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
219 (insert-file-contents action))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
220 (save-window-excursion
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
221 ;; make buffer visible before skeleton or function
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
222 ;; which might ask the user for something
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
223 (switch-to-buffer (current-buffer))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
224 (if (and (consp action)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
225 (not (eq (car action) 'lambda)))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
226 (skeleton-insert action)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
227 (funcall action)))))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
228 (if (vectorp action)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
229 action
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
230 (vector action))))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
231 (and (buffer-modified-p)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
232 (not (eq this-command 'auto-insert))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
233 (set-buffer-modified-p (eq auto-insert t))))))
180
289ee39b1637 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234
12502
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
235
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
236 ;;;###autoload
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
237 (defun define-auto-insert (key action &optional after)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
238 "Associate CONDITION with (additional) ACTION in `auto-insert-alist'.
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
239 Optional AFTER means to insert action after all existing actions for CONDITION,
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
240 or if CONDITION had no actions, after all other CONDITIONs."
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
241 (let ((elt (assoc key auto-insert-alist)))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
242 (if elt
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
243 (setcdr elt
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
244 (if (vectorp (cdr elt))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
245 (vconcat (if after (cdr elt))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
246 (if (vectorp action) action (vector action))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
247 (if after () (cdr elt)))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
248 (if after
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
249 (vector (cdr elt) action)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
250 (vector action (cdr elt)))))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
251 (if after
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
252 (nconc auto-insert-alist (list (cons key action)))
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
253 (setq auto-insert-alist (cons (cons key action)
8bb3424bf745 extended to use skeletons or call functions
Karl Heuer <kwzh@gnu.org>
parents: 8764
diff changeset
254 auto-insert-alist))))))
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 180
diff changeset
255
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 180
diff changeset
256 ;;; autoinsert.el ends here