Convert consecutive FSF copyright years to ranges.
[bpt/emacs.git] / etc / srecode / el.srt
CommitLineData
c05676c5
CY
1;;; el.srt --- SRecode templates for Emacs Lisp mode
2
73b0cd50 3;; Copyright (C) 2007-2011 Free Software Foundation, Inc.
c05676c5
CY
4
5;; Author: Eric Ludlam <zappo@gnu.org>
6
7;; This file is part of GNU Emacs.
8
9;; GNU Emacs is free software: you can redistribute it and/or modify
10;; it under the terms of the GNU General Public License as published by
11;; the Free Software Foundation, either version 3 of the License, or
12;; (at your option) any later version.
13
14;; GNU Emacs is distributed in the hope that it will be useful,
15;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17;; GNU General Public License for more details.
18
19;; You should have received a copy of the GNU General Public License
20;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
21
22set escape_start "$"
23set escape_end "$"
24
25set mode "emacs-lisp-mode"
26
27set comment_start ";;;"
28set comment_prefix ";;"
29set comment_end ""
30
31set DOLLAR "$"
32
33context file
34
35template section-comment :blank
36"Insert a comment that separates sections of an Emacs Lisp file."
37----
38\f
39;;; $^$
40;;
41
42----
43bind "s"
44
45
46template empty :user :time :file
47"Insert a skeleton for an Emacs Lisp file."
48----
49$>:filecomment$
50
51;;; Commentary:
52;;
53;; $^$
54
55;;; Code:
56
57
58(provide '$FILE$)
59
60;;; $FILENAME$ ends here
61
62----
63
64prompt MODESYM "Major Mode Symbol (sans -mode): "
65prompt MODENAME "Nice Name of mode: " defaultmacro "MODESYM"
66prompt MODEEXTENSION "File name extension for mode: "
67
68template major-mode :file :blank :indent
69"Insert the framework needed for a major mode."
70sectiondictionary "FONTLOCK"
71set NAME macro "MODESYM" "-mode-font-lock-keywords"
72set DOC "Keywords for use with srecode macros and font-lock."
73sectiondictionary "MODEHOOK"
74set NAME macro "MODESYM" "-mode-hook"
75set DOC "Hook run when " macro "MODESYM" " starts."
76set GROUP macro "MODESYM" "-mode"
77set CUSTOMTYPE "'hook"
78sectiondictionary "MODEFCN"
79set NAME macro "MODESYM" "-mode"
80set DOC "Major-mode for " macro "MODESYM" "-mode buffers."
81set INTERACTIVE ""
82----
83$>:declaration:defgroup$
84
85$>:syntax-table$
86
87$<FONTLOCK:declaration:variable$
88 '(
89 )
90$/FONTLOCK$
91
92$>:declaration:keymap$
93
94$<MODEHOOK:declaration:variable-option$nil$/MODEHOOK$
95
96;;;###autoload
97$<MODEFCN:declaration:function$
98 (interactive)
99 (kill-all-local-variables)
100 (setq major-mode '$MODESYM$-mode
101 mode-name "$?MODENAME$"
102 comment-start ";;"
103 comment-end "")
104 (set (make-local-variable 'comment-start-skip)
105 "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+ *")
106 (set-syntax-table $MODESYM$-mode-syntax-table)
107 (use-local-map $MODESYM$-mode-map)
108 (set (make-local-variable 'font-lock-defaults)
109 '($MODESYM$-mode-font-lock-keywords
110 nil ;; perform string/comment fontification
111 nil ;; keywords are case sensitive.
112 ;; This puts _ & - as a word constituant,
113 ;; simplifying our keywords significantly
114 ((?_ . "w") (?- . "w"))))
115 (run-hooks '$MODESYM$-mode-hook)
116$/MODEFCN$
117
118;;;###autoload
119(add-to-list 'auto-mode-alist '("\\.$?MODEEXTENSION$$DOLLAR$" . $MODESYM$-mode))
120
121$<A:section-comment$Commands for $MODESYM$$/A$
122
123$<B:section-comment$Utils for $MODESYM$$/B$
124----
125
126template syntax-table
127"Create a syntax table."
128sectiondictionary "A"
129set NAME macro "?MODESYM" "-mode-syntax-table"
130set DOC "Syntax table used in " macro "?MODESYM" " buffers."
131----
132$<A:declaration:variable$
133 (let ((table (make-syntax-table (standard-syntax-table))))
134 (modify-syntax-entry ?\; ". 12" table) ;; SEMI, Comment start ;;
135 (modify-syntax-entry ?\n ">" table) ;; Comment end
136 (modify-syntax-entry ?\" "\"" table) ;; String
137 (modify-syntax-entry ?\- "_" table) ;; Symbol
138 (modify-syntax-entry ?\\ "\\" table) ;; Quote
139 (modify-syntax-entry ?\` "'" table) ;; Prefix ` (backquote)
140 (modify-syntax-entry ?\' "'" table) ;; Prefix ' (quote)
141 (modify-syntax-entry ?\, "'" table) ;; Prefix , (comma)
142
143 table)
144$/A$
145----
146
147
148context declaration
149
150template include :blank
151"Insert a require statement."
152----
153(require '$?NAME$)
154----
155bind "i"
156
157template include-protected :blank
158"Insert a require statement."
159----
160(condition-case nil
161 (require '$?NAME$)
162 (error nil))
163----
164
165prompt INTERACTIVE "Is this an interactive function? " default " (interactive)\n " read y-or-n-p
166prompt NAME "Name: " defaultmacro "PRENAME"
167
168template function :el :indent :blank
169"Insert a defun outline."
170----
171(defun $?NAME$ ($#ARGS$$NAME$$#NOTLAST$ $/NOTLAST$$/ARGS$)
172 "$DOC$"
173$?INTERACTIVE$$^$
174 )
175----
176bind "f"
177
178
179template variable :el :indent :blank
180"Inert a variable.
181DOC is optional."
182----
183(defvar $?NAME$ $^$
184 "$DOC$")
185----
186bind "v"
187
188template variable-const :el :indent :blank
189"Inert a variable."
190----
191(defconst $?NAME$ $^$
192 "$DOC$")
193----
194
195template variable-option :el :el-custom :indent :blank
196"Inert a variable created using defcustom."
197----
198(defcustom $?NAME$ $^$
199 "*$DOC$"
200 :group $GROUP$
201 :type $?CUSTOMTYPE$)
202----
203bind "o"
204
205template class :el :indent :blank
206"Insert a new class."
207----
208(defclass $?NAME$ ()
209 (($?ARG1$ :initarg :$ARG1$
210 :documentation
211 "$^$")
212 )
213 "Class $NAME$ ")
214----
215bind "c"
216
217template class-tag :el :indent :blank
218"Insert a new class."
219----
220(defclass $?NAME$ ($#PARENTS$$NAME$ $/PARENTS$)
221 ($^$
222 )
223 "Class $NAME$ ")
224----
225
226template method :el :ctxt :indent :blank
227"Insert a new method."
228----
229(defmethod $?NAME$ ((this $?PARENT$))
230 "$DOC$"
231 $^$
232 )
233----
234bind "m"
235
236template method-tag :el :ctxt :indent :blank
237"Insert a new method for tag inserter."
238----
239(defmethod $NAME$ ($#ARGS$$#FIRST$($NAME$ $PARENT$)$/FIRST$$#NOTFIRST$ $NAME$$/NOTFIRST$$/ARGS$)
240 "$DOC$"
241 $^$
242 )
243----
244
245prompt NAME "Method to Override: " defaultmacro "PRENAME" read mode-local-read-function
246prompt PARENT "Major Mode for binding: " defaultmacro "MODESYM"
247
248;; Note: PARENT is used for override methods and for classes. Handy!
249template modelocal :el :ctxt :indent :blank
250"Insert a new mode-local function."
251----
252(define-mode-local-override $?NAME$ $?PARENT$ ()
253 "$DOC$"
254 $^$)
255----
256bind "l"
257
258
259template defgroup :indent :blank
260"Create a custom group."
261----
262(defgroup $?MODESYM$-mode nil
263 "$MODESYM$ group."
264 :group 'langauges)
265----
266bind "g"
267
268
269template keymap :indent :blank
270"Insert a keymap of some sort"
271----
272(defvar $?MODESYM$-mode-map
273 (let ((km (make-sparse-keymap)))
274 (define-key km "\C-c\C-c" '$MODESYM$-mode$^$)
275 km)
276 "Keymap used in `$MODESYM$-mode'.")
277----
278bind "k"
279
280
281context classdecl
282
283prompt NAME "Slot Name: "
284
285template variable-tag :indent :indent :blank
286"A field in a class."
287----
288($?NAME$ :initarg :$NAME$
289 $#DEFAULTVALUE$:initform $VALUE$$/DEFAULTVALUE$
290 :documentation
291 "$DOC$")
292
293----
294
295template variable :indent :indent :blank
296"A field in a class."
297----
298($?NAME$ :initarg :$NAME$
299 :initform nil
300 :type list
301 :documentation
302 "$DOC$")
303
304----
305bind "s"
306
307
308
309;; end
310
311