18
|
1 ;;; generic-extras.el --- Extra Modes for generic-mode
|
|
2 ;;
|
|
3 ;; Author: Peter Breton <pbreton@i-kinetics.com>
|
|
4 ;; Created: Tue Oct 08 1996
|
|
5 ;; Version: $Id$
|
|
6 ;; Keywords:
|
|
7 ;; Time-stamp: <98/02/10 22:48:22 pbreton>
|
|
8 ;;
|
|
9 ;; Copyright (C) Peter Breton 01Nov96
|
|
10 ;;
|
|
11 ;; This is free software; you can redistribute it and/or modify
|
|
12 ;; it under the terms of the GNU General Public License as published by
|
|
13 ;; the Free Software Foundation; either version 2, or (at your option)
|
|
14 ;; any later version.
|
|
15 ;;
|
|
16 ;; generic-extras.el is distributed in the hope that it will be useful,
|
|
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
19 ;; General Public License for more details.
|
|
20 ;;
|
|
21 ;; You should have received a copy of the GNU General Public License
|
|
22 ;; along with GNU Emacs; see the file COPYING. If not, write to
|
|
23 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
24 ;;
|
|
25 ;; LCD Archive Entry:
|
|
26 ;; generic-extras|Peter Breton|pbreton@i-kinetics.com|
|
|
27 ;; Sample modes for 'generic-mode'|
|
|
28 ;; 01-Nov-1996|1.0|~/misc/generic-extras.el.gz|
|
|
29 ;;
|
|
30 ;;; Commentary:
|
|
31 ;;
|
|
32 ;; This file contains some pre-defined generic-modes.
|
|
33 ;;
|
|
34 ;; INSTALLATION:
|
|
35 ;;
|
|
36 ;; Add this line to your .emacs file:
|
|
37 ;;
|
|
38 ;; (require 'generic-extras)
|
|
39 ;;
|
|
40 ;; You can decide which modes to load by setting the variable
|
|
41 ;; 'generic-extras-enable-list'. Some platform-specific modes are
|
|
42 ;; affected by the variables 'generic-define-mswindows-modes' and
|
|
43 ;; 'generic-define-unix-modes' (which see).
|
|
44 ;;
|
|
45 ;; ALTERING THESE MODES:
|
|
46 ;;
|
|
47 ;; To alter the definition of these modes, use the 'alter-generic-mode-'
|
|
48 ;; convenience functions defined in generic-mode.el. Each of these functions
|
|
49 ;; takes an optional how-to-alter argument, which can be one of the following
|
|
50 ;; symbols: 'overwrite, 'append, 'prepend.
|
|
51 ;;
|
|
52 ;; You can also send me new modes (I'll accept ones for file types which are
|
|
53 ;; reasonably common) or patches to these ones.
|
|
54 ;;
|
|
55 ;; PROBLEMS WHEN USED WITH FOLDING MODE:
|
|
56 ;;
|
|
57 ;; From Anders Lindgren <andersl@csd.uu.se>
|
|
58 ;;
|
|
59 ;; Problem summary: Wayne Adams has found a problem when using folding
|
|
60 ;; mode in conjuction with font-lock for a mode defined in
|
|
61 ;; `generic-extras.el'.
|
|
62 ;;
|
|
63 ;; The problem, as Wayne described it, was that error messages of the
|
|
64 ;; following form appeared when both font-lock and folding are used:
|
|
65 ;;
|
|
66 ;; > - various msgs including "Fontifying region...(error Stack
|
|
67 ;; > overflow in regexp matcher)" appear
|
|
68 ;;
|
|
69 ;; I have just tracked down the cause of the problem. The regexp:s in
|
|
70 ;; `generic-extras.el' does not take into account the way that folding
|
|
71 ;; hides sections of the buffer. The technique is known as
|
|
72 ;; `selective-display' and has been available for a very long time (I
|
|
73 ;; started using it back in the good old' Emacs 18 days). Basically, a
|
|
74 ;; section is hidden by creating one very long line were the newline
|
|
75 ;; character (C-j) is replaced by a linefeed (C-m) character.
|
|
76 ;;
|
|
77 ;; Many other hiding packages, besides folding, use the same technique,
|
|
78 ;; the problem should occur when using them as well.
|
|
79 ;;
|
|
80 ;; The erroronous lines in `generic-extras' look like the following (this
|
|
81 ;; example is from the `ini' section):
|
|
82 ;;
|
|
83 ;; '(("^\\(\\[.*\\]\\)" 1 'font-lock-reference-face)
|
|
84 ;; ("^\\(.*\\)=" 1 'font-lock-variable-name-face)
|
|
85 ;;
|
|
86 ;; The intention of these lines is to highlight lines of the following
|
|
87 ;; form:
|
|
88 ;;
|
|
89 ;; [foo]
|
|
90 ;; bar = xxx
|
|
91 ;;
|
|
92 ;; However, since the `.' regexp symbol match the linefeed character the
|
|
93 ;; entire folded section is searched, resulting in a regexp stack
|
|
94 ;; overflow.
|
|
95 ;;
|
|
96 ;; Solution suggestion 2: Instead of using ".", use the sequence
|
|
97 ;; "[^\n\r]". This will make the rules behave just as before, but they
|
|
98 ;; will work together with selective-display.
|
|
99 ;;
|
|
100 ;;
|
|
101 ;;; Change log:
|
|
102 ;; $Log$
|
|
103 ;; Revision 1.1 2008/04/19 18:10:28 ht
|
|
104 ;; *** empty log message ***
|
|
105 ;;
|
|
106 ;; Revision 1.5 1998/02/11 03:44:32 pbreton
|
|
107 ;; About to pull out generic-indent code
|
|
108 ;;
|
|
109 ;; Revision 1.4 1996/11/01 16:51:20 peter
|
|
110 ;; Added GPL and LCD information.
|
|
111 ;;
|
|
112 ;; Revision 1.3 1996/10/19 12:22:07 peter
|
|
113 ;; Added new versions of rc and rul modes
|
|
114 ;; Regexp patches for generic-bat-mode
|
|
115 ;;
|
|
116 ;; Revision 1.2 1996/10/17 01:02:41 peter
|
|
117 ;; Improved samba and apache modes
|
|
118 ;; Added fvwm and x-resource modes
|
|
119 ;;
|
|
120
|
|
121 ;;; Code:
|
|
122
|
|
123 (require 'generic-mode)
|
|
124 (require 'font-lock)
|
|
125
|
|
126 (defvar generic-extras-enable-list nil
|
|
127 "*List of generic modes to enable by default.
|
|
128 Each entry in the list should be a symbol.
|
|
129 The variables `generic-define-mswindows-modes' and `generic-define-unix-modes'
|
|
130 also affect which generic modes are defined")
|
|
131
|
|
132 (defvar generic-define-mswindows-modes
|
|
133 (memq system-type (list 'windows-nt 'ms-dos))
|
|
134 "*If non-nil, some MS-Windows specific generic modes will be defined.")
|
|
135
|
|
136 (defvar generic-define-unix-modes
|
|
137 (not generic-define-mswindows-modes)
|
|
138 "*If non-nil, some Unix specific generic modes will be defined.")
|
|
139
|
|
140 (if generic-define-mswindows-modes
|
|
141 (setq generic-extras-enable-list
|
|
142 (append (list 'bat-generic-mode 'ini-generic-mode
|
|
143 'inf-generic-mode 'rc-generic-mode
|
|
144 'reg-generic-mode 'rul-generic-mode)
|
|
145 generic-extras-enable-list)))
|
|
146
|
|
147 (if generic-define-unix-modes
|
|
148 (setq generic-extras-enable-list
|
|
149 (append (list 'apache-generic-mode 'samba-generic-mode
|
|
150 'hosts-generic-mode 'fvwm-generic-mode
|
|
151 'x-resource-generic-mode
|
|
152 'crontab-generic-mode)
|
|
153 generic-extras-enable-list)))
|
|
154
|
|
155 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
156 ;; Generic-modes
|
|
157 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
158
|
|
159 ;;; Apache
|
|
160 (and
|
|
161 (memq 'apache-generic-mode generic-extras-enable-list)
|
|
162
|
|
163 (define-generic-mode 'apache-generic-mode
|
|
164 (list ?#)
|
|
165 nil
|
|
166 '(("^\\(<.*>\\)" 1 'font-lock-reference-face)
|
|
167 ("^\\(\\sw+\\)\\s-" 1 'font-lock-variable-name-face))
|
|
168 (list "srm\\.conf$" "httpd\\.conf$" "access\\.conf$")
|
|
169 nil
|
|
170 "Generic mode for Apache or HTTPD configuration files."))
|
|
171
|
|
172 ;;; Samba
|
|
173 (and
|
|
174 (memq 'samba-generic-mode generic-extras-enable-list)
|
|
175
|
|
176 (define-generic-mode 'samba-generic-mode
|
|
177 (list ?\;)
|
|
178 nil
|
|
179 '(("^\\(\\[.*\\]\\)" 1 'font-lock-reference-face))
|
|
180 (list "smb\\.conf$")
|
|
181 (list 'generic-bracket-support)
|
|
182 "Generic mode for Samba configuration files."))
|
|
183
|
|
184 ;;; Fvwm
|
|
185 ;; This is pretty basic. Also, modes for other window managers could
|
|
186 ;; be defined as well.
|
|
187 (and
|
|
188 (memq 'fvwm-generic-mode generic-extras-enable-list)
|
|
189
|
|
190 (define-generic-mode 'fvwm-generic-mode
|
|
191 (list ?#)
|
|
192 (list "Style" "Function" "EndFunction" "Popup" "EndPopup")
|
|
193 nil
|
|
194 (list "\\.fvwmrc")
|
|
195 nil
|
|
196 "Generic mode for FVWM configuration files."))
|
|
197
|
|
198 ;;; X Resource
|
|
199 ;; I'm pretty sure I've seen an actual mode to do this, but I don't
|
|
200 ;; think it's standard with Emacs
|
|
201 (and
|
|
202 (memq 'x-resource-generic-mode generic-extras-enable-list)
|
|
203
|
|
204 (define-generic-mode 'x-resource-generic-mode
|
|
205 (list ?!)
|
|
206 nil
|
|
207 '(("^\\([^:\n]+:\\)" 1 'font-lock-variable-name-face))
|
|
208 (list "\\.Xdefaults" "\\.Xresources")
|
|
209 nil
|
|
210 "Generic mode for X Resource configuration files."))
|
|
211
|
|
212 ;;; Hosts
|
|
213 (and
|
|
214 (memq 'hosts-generic-mode generic-extras-enable-list)
|
|
215
|
|
216 (define-generic-mode 'hosts-generic-mode
|
|
217 (list ?#)
|
|
218 (list "localhost")
|
|
219 '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 'font-lock-reference-face))
|
|
220 (list "[hH][oO][sS][tT][sS]$")
|
|
221 nil
|
|
222 "Generic mode for HOSTS files."))
|
|
223
|
|
224 ;;; Windows INF files
|
|
225 (and
|
|
226 (memq 'inf-generic-mode generic-extras-enable-list)
|
|
227
|
|
228 (define-generic-mode 'inf-generic-mode
|
|
229 (list ?\;)
|
|
230 nil
|
|
231 '(("^\\(\\[.*\\]\\)" 1 'font-lock-reference-face))
|
|
232 (list "\\.[iI][nN][fF]")
|
|
233 (list 'generic-bracket-support)
|
|
234 "Generic mode for MS-Windows INF files."))
|
|
235
|
|
236 ;;; Windows INI files
|
|
237 ;; Should define escape character as well!
|
|
238 (and
|
|
239 (memq 'ini-generic-mode generic-extras-enable-list)
|
|
240
|
|
241 (define-generic-mode 'ini-generic-mode
|
|
242 (list ?\;)
|
|
243 nil
|
|
244 '(("^\\(\\[.*\\]\\)" 1 'font-lock-reference-face)
|
|
245 ("^\\([^\n\r]*\\)=\\([^\n\r]*\\)$"
|
|
246 (1 font-lock-function-name-face)
|
|
247 (2 font-lock-variable-name-face)))
|
|
248 (list "\\.[iI][nN][iI]$")
|
|
249 (list
|
|
250 (function
|
|
251 (lambda ()
|
|
252 (setq imenu-generic-expression
|
|
253 '((nil "^\\[\\(.*\\)\\]" 1)
|
|
254 ("*Variables*" "^\\s-*\\(.*\\)\\s-*=" 1)))
|
|
255 )))
|
|
256 "Generic mode for MS-Windows INI files."))
|
|
257
|
|
258 ;;; Windows REG files
|
|
259 ;;; Unfortunately, Windows 95 and Windows NT have different REG file syntax!
|
|
260 (and
|
|
261 (memq 'reg-generic-mode generic-extras-enable-list)
|
|
262
|
|
263 (define-generic-mode 'reg-generic-mode
|
|
264 '(?\;)
|
|
265 '("key" "classes_root" "REGEDIT" "REGEDIT4")
|
|
266 '(("\\(\\[.*]\\)" 1 'font-lock-reference-face)
|
|
267 ("^\\([^\n\r]*\\)\\s-*=" 1 'font-lock-variable-name-face))
|
|
268 '("\\.[rR][eE][gG]$")
|
|
269 (list
|
|
270 (function
|
|
271 (lambda ()
|
|
272 (setq imenu-generic-expression
|
|
273 '((nil "^\\s-*\\(.*\\)\\s-*=" 1))))))
|
|
274 "Generic mode for MS-Windows Registry files."))
|
|
275
|
|
276 ;;; Windows BAT files
|
|
277 (if (not (memq 'bat-generic-mode generic-extras-enable-list))
|
|
278 nil
|
|
279 (define-generic-mode 'bat-generic-mode
|
|
280 nil
|
|
281 nil
|
|
282 (list
|
|
283 ;; Make this one first in the list, otherwise comments will
|
|
284 ;; be over-written by other variables
|
|
285 (list "^[@ \t]*\\([rR][eE][mM][^\n\r]*\\)" 1 'font-lock-comment-face t)
|
|
286 (list "^[ \t]*\\(::-.*\\)" 1 'font-lock-comment-face t)
|
|
287 ;; These keywords appear as the first word on a line
|
|
288 (generic-make-keywords-list
|
|
289 (list
|
|
290 "[cC][aA][lL][lL]"
|
|
291 "[eE][cC][hH][oO]"
|
|
292 "[fF][oO][rR]"
|
|
293 "[iI][fF]"
|
|
294 "[pP][aA][tT][hH]"
|
|
295 "[pP][aA][uU][sS][eE]"
|
|
296 "[pP][rR][oO][mM][pP][tT]"
|
|
297 "[sS][eE][tT]"
|
|
298 "[sS][tT][aA][rR][tT]"
|
|
299 )
|
|
300 'font-lock-keyword-face "^[@ \t]*")
|
|
301 ;; These keywords can be anywhere on a line
|
|
302 (generic-make-keywords-list
|
|
303 (list
|
|
304 "[eE][xX][iI][sS][tT]"
|
|
305 "[eE][rR][rR][oO][rR][lL][eE][vV][eE][lL]"
|
|
306 "[gG][oO][tT][oO]"
|
|
307 "[nN][oO][tT]"
|
|
308 ) 'font-lock-keyword-face)
|
|
309 (list "^[ \t]*\\(:\\sw+\\)" 1 'font-lock-function-name-face t)
|
|
310 (list "\\(%\\sw+%\\)" 1 'font-lock-reference-face)
|
|
311 (list "\\(%[0-9]\\)" 1 'font-lock-reference-face)
|
|
312 (list "\\(/[^/ \"\t\n]+\\)" 1 'font-lock-type-face)
|
|
313 (list "[\t ]+\\([+-][^\t\n\" ]+\\)" 1 'font-lock-type-face)
|
|
314 (list "\\<\\([gG][oO][tT][oO]\\)\\>[ \t]*\\(\\sw+\\)?"
|
|
315 '(1 font-lock-keyword-face)
|
|
316 '(2 font-lock-function-name-face nil t))
|
|
317
|
|
318 )
|
|
319 (list "\\.[bB][aA][tT]$" "CONFIG\\." "AUTOEXEC\\." )
|
|
320 (list 'generic-bat-mode-setup-function)
|
|
321 "Generic mode for MS-Windows BAT files.")
|
|
322
|
|
323 (defvar bat-generic-mode-syntax-table nil
|
|
324 "Syntax table in use in bat-generic-mode buffers.")
|
|
325
|
|
326 ;; Make underscores count as words
|
|
327 (if bat-generic-mode-syntax-table
|
|
328 nil
|
|
329 (setq bat-generic-mode-syntax-table (make-syntax-table))
|
|
330 (modify-syntax-entry ?_ "w" bat-generic-mode-syntax-table))
|
|
331
|
|
332 ;; bat-generic-mode doesn't use the comment functionality of generic-mode
|
|
333 ;; because it has a three-letter comment-string, so we do it
|
|
334 ;; here manually instead
|
|
335 (defun generic-bat-mode-setup-function ()
|
|
336 (make-local-variable 'parse-sexp-ignore-comments)
|
|
337 (make-local-variable 'comment-start)
|
|
338 (make-local-variable 'comment-start-skip)
|
|
339 (make-local-variable 'comment-end)
|
|
340 (setq imenu-generic-expression '((nil "^:\\(\\sw+\\)" 1))
|
|
341 parse-sexp-ignore-comments t
|
|
342 comment-end ""
|
|
343 comment-start "[Rr][Ee][Mm] "
|
|
344 comment-start-skip "[Rr][Ee][Mm] *"
|
|
345 )
|
|
346 (set-syntax-table bat-generic-mode-syntax-table)
|
|
347 )
|
|
348 )
|
|
349
|
|
350 ;;; Windows RC files
|
|
351 ;; Contributed by ACorreir@pervasive-sw.com (Alfred Correira)
|
|
352 (and
|
|
353 (memq 'rc-generic-mode generic-extras-enable-list)
|
|
354
|
|
355 (define-generic-mode 'rc-generic-mode
|
|
356 ;; (list ?\/)
|
|
357 (list "//")
|
|
358 '("ACCELERATORS"
|
|
359 "AUTO3STATE"
|
|
360 "AUTOCHECKBOX"
|
|
361 "AUTORADIOBUTTON"
|
|
362 "BITMAP"
|
|
363 "CAPTION"
|
|
364 "CHARACTERISTICS"
|
|
365 "CHECKBOX"
|
|
366 "CLASS"
|
|
367 "COMBOBOX"
|
|
368 "CONTROL"
|
|
369 "CTEXT"
|
|
370 "CURSOR"
|
|
371 "DEFPUSHBUTTON"
|
|
372 "DIALOG"
|
|
373 "EDITTEXT"
|
|
374 "EXSTYLE"
|
|
375 "FONT"
|
|
376 "GROUPBOX"
|
|
377 "ICON"
|
|
378 "LANGUAGE"
|
|
379 "LISTBOX"
|
|
380 "LTEXT"
|
|
381 "MENUITEM SEPARATOR"
|
|
382 "MENUITEM"
|
|
383 "MENU"
|
|
384 "POPUP"
|
|
385 "PUSHBOX"
|
|
386 "PUSHBUTTON"
|
|
387 "RADIOBUTTON"
|
|
388 "RCDATA"
|
|
389 "RTEXT"
|
|
390 "SCROLLBAR"
|
|
391 "SEPARATOR"
|
|
392 "STATE3"
|
|
393 "STRINGTABLE"
|
|
394 "STYLE"
|
|
395 "VERSIONINFO"
|
|
396 "VERSION"
|
|
397 )
|
|
398 ;; the choice of what tokens go where is somewhat arbitrary,
|
|
399 ;; as is the choice of which value tokens are included, as
|
|
400 ;; the choice of face for each token group
|
|
401 (list
|
|
402 (generic-make-keywords-list
|
|
403 (list
|
|
404 "FILEFLAGSMASK"
|
|
405 "FILEFLAGS"
|
|
406 "FILEOS"
|
|
407 "FILESUBTYPE"
|
|
408 "FILETYPE"
|
|
409 "FILEVERSION"
|
|
410 "PRODUCTVERSION"
|
|
411 ) 'font-lock-type-face)
|
|
412 (generic-make-keywords-list
|
|
413 (list
|
|
414 "BEGIN"
|
|
415 "BLOCK"
|
|
416 "END"
|
|
417 "VALUE"
|
|
418 ) 'font-lock-function-name-face)
|
|
419 '("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face)
|
|
420 '("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 font-lock-function-name-face)
|
|
421 '("^#[ \t]*\\(elif\\|if\\)\\>"
|
|
422 ("\\<\\(defined\\)\\>[ \t]*(?\\(\\sw+\\)?" nil nil
|
|
423 (1 font-lock-reference-face) (2 font-lock-variable-name-face nil t)))
|
|
424 '("^#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
|
|
425 (1 font-lock-reference-face) (2 font-lock-variable-name-face nil t)))
|
|
426 (list "\\.[rR][cC]$")
|
|
427 nil
|
|
428 "Generic mode for MS-Windows Resource files."))
|
|
429
|
|
430 ;;; InstallShield RUL files
|
|
431 ;; Contributed by ACorreir@pervasive-sw.com (Alfred Correira)
|
|
432 ;; Additional contributions by alex@brainstorm.fr (Alex Lemaresquier)
|
|
433 (and
|
|
434 (memq 'rul-generic-mode generic-extras-enable-list)
|
|
435
|
|
436 (define-generic-mode 'rul-generic-mode
|
|
437 ;; Using "/*" and "*/" doesn't seem to be working right
|
|
438 (list "//")
|
|
439 '("begin"
|
|
440 "call"
|
|
441 "case"
|
|
442 "declare"
|
|
443 "default"
|
|
444 "downto"
|
|
445 "elseif"
|
|
446 "else"
|
|
447 "endfor"
|
|
448 "endif"
|
|
449 "endswitch"
|
|
450 "endwhile"
|
|
451 "end"
|
|
452 "exit"
|
|
453 "external"
|
|
454 "for"
|
|
455 "function"
|
|
456 ;; "goto" -- handled elsewhere
|
|
457 "if"
|
|
458 "program"
|
|
459 "prototype"
|
|
460 "repeat"
|
|
461 "return"
|
|
462 "step"
|
|
463 "switch"
|
|
464 "then"
|
|
465 "to"
|
|
466 "typedef"
|
|
467 "until"
|
|
468 "void"
|
|
469 "while")
|
|
470 (list
|
|
471 ;; preprocessor constructs
|
|
472 '("#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)"
|
|
473 1 font-lock-string-face)
|
|
474 '("#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
|
|
475 (1 font-lock-reference-face)
|
|
476 (2 font-lock-variable-name-face nil t))
|
|
477 ;; gotos
|
|
478 '("[ \t]*\\(\\sw+:\\)" 1 font-lock-reference-face)
|
|
479 '("\\<\\(goto\\)\\>[ \t]*\\(\\sw+\\)?"
|
|
480 (1 font-lock-keyword-face)
|
|
481 (2 font-lock-reference-face nil t))
|
|
482 ;; system variables
|
|
483 (generic-make-keywords-list
|
|
484 (list
|
|
485 "CMDLINE"
|
|
486 "ERRORFILENAME"
|
|
487 "INFOFILENAME"
|
|
488 "ISRES"
|
|
489 "ISUSER"
|
|
490 "ISVERSION"
|
|
491 "SRCDIR"
|
|
492 "SRCDISK"
|
|
493 "SUPPORTDIR"
|
|
494 "TARGETDIR"
|
|
495 "TARGETDISK"
|
|
496 "WINDIR"
|
|
497 "WINDISK"
|
|
498 "WINMAJOR"
|
|
499 "WINSYSDIR"
|
|
500 "WINSYSDISK"
|
|
501 )
|
|
502 'font-lock-variable-name-face)
|
|
503 ;; system functions
|
|
504 (generic-make-keywords-list
|
|
505 (list
|
|
506 "AddFolderIcon"
|
|
507 "AppCommand"
|
|
508 "AskDestPath"
|
|
509 "AskOptions"
|
|
510 "AskPath"
|
|
511 "AskText"
|
|
512 "AskYesNo"
|
|
513 "CloseFile"
|
|
514 "CmdGetHwndDlg"
|
|
515 "CompressEnum"
|
|
516 "CompressGet"
|
|
517 "CopyFile"
|
|
518 "CreateDir"
|
|
519 "CreateProgramFolder"
|
|
520 "DeinstallStart"
|
|
521 "Delay"
|
|
522 "DeleteDir"
|
|
523 "DeleteFile"
|
|
524 "Disable"
|
|
525 "DoInstall"
|
|
526 "Do"
|
|
527 "Enable"
|
|
528 "EnterDisk"
|
|
529 "ExistsDir"
|
|
530 "EzDefineDialog"
|
|
531 "FindFile"
|
|
532 "FindWindow"
|
|
533 "FileCompare"
|
|
534 "FileSetBeginDefine"
|
|
535 "FileSetEndDefine"
|
|
536 "FileSetPerformEz"
|
|
537 "FileSetPerform"
|
|
538 "GetDiskSpace"
|
|
539 "GetDisk"
|
|
540 "GetExtents"
|
|
541 "GetProfString"
|
|
542 "GetSystemInfo"
|
|
543 "GetVersion"
|
|
544 "GetWindowHandle"
|
|
545 "InstallationInfo"
|
|
546 "Is"
|
|
547 "LaunchApp"
|
|
548 "ListCreate"
|
|
549 "ListDestroy"
|
|
550 "ListGetFirstString"
|
|
551 "ListGetNextString"
|
|
552 "ListSetIndex"
|
|
553 "LongPathToQuote"
|
|
554 "LongPathToShortPath"
|
|
555 "MessageBox"
|
|
556 "NumToStr"
|
|
557 "OpenFile"
|
|
558 "ParsePath"
|
|
559 "PlaceBitmap"
|
|
560 "PlaceWindow"
|
|
561 "ProgDefGroupType"
|
|
562 "RegDBCreateKeyEx"
|
|
563 "RegDBGetItem"
|
|
564 "RegDBSetItem"
|
|
565 "RegDBGetKeyValueEx"
|
|
566 "RegDBSetKeyValueEx"
|
|
567 "RegDBSetDefaultRoot"
|
|
568 "RenameFile"
|
|
569 "SdSelectFolder"
|
|
570 "SdShowMsg"
|
|
571 "SdWelcome"
|
|
572 "SetColor"
|
|
573 "SetDialogTitle"
|
|
574 "SetFileInfo"
|
|
575 "SetForegroundWindow"
|
|
576 "SetStatusWindow"
|
|
577 "SetTitle"
|
|
578 "ShowProgramFolder"
|
|
579 "Sprintf"
|
|
580 "StatusUpdate"
|
|
581 "StrCompare"
|
|
582 "StrFind"
|
|
583 "StrGetTokens"
|
|
584 "StrLength"
|
|
585 "StrRemoveLastSlash"
|
|
586 "StrToLower"
|
|
587 "StrToUpper"
|
|
588 "StrSub"
|
|
589 "VarRestore"
|
|
590 "VarSave"
|
|
591 "WaitOnDialog"
|
|
592 "Welcome"
|
|
593 "XCopyFile"
|
|
594 )
|
|
595 'font-lock-function-name-face)
|
|
596 ;; type keywords
|
|
597 (generic-make-keywords-list
|
|
598 (list
|
|
599 "BOOL"
|
|
600 "BYREF"
|
|
601 "CHAR"
|
|
602 "HIWORD"
|
|
603 "HWND"
|
|
604 "INT"
|
|
605 "LIST"
|
|
606 "LONG"
|
|
607 "LOWORD"
|
|
608 "NUMBER"
|
|
609 "POINTER"
|
|
610 "QUAD"
|
|
611 "RGB"
|
|
612 "SHORT"
|
|
613 "STRINGLIST"
|
|
614 "STRING"
|
|
615 )
|
|
616 'font-lock-type-face)
|
|
617 ;;; system variables
|
|
618 (generic-make-keywords-list
|
|
619 (list
|
|
620 "CMDLINE"
|
|
621 "ERRORFILENAME"
|
|
622 "INFOFILENAME"
|
|
623 "ISRES"
|
|
624 "ISUSER"
|
|
625 "ISVERSION"
|
|
626 "SRCDIR"
|
|
627 "SRCDISK"
|
|
628 "SUPPORTDIR"
|
|
629 "TARGETDIR"
|
|
630 "TARGETDISK"
|
|
631 "WINDIR"
|
|
632 "WINDISK"
|
|
633 "WINSYSDIR"
|
|
634 "WINSYSDISK"
|
|
635 )
|
|
636 'font-lock-variable-name-face)
|
|
637 ;; pre-defined constants (not exhaustive -- just my favorites)
|
|
638 (generic-make-keywords-list
|
|
639 (list
|
|
640 "AFTER"
|
|
641 "APPEND"
|
|
642 "BACKGROUNDCAPTION"
|
|
643 "BACKGROUND"
|
|
644 "BACK"
|
|
645 "BEFORE"
|
|
646 "BK_BLUE"
|
|
647 "BK_GREEN"
|
|
648 "BK_RED"
|
|
649 "CANCEL"
|
|
650 "COMMANDEX"
|
|
651 "COMMAND"
|
|
652 "CONTINUE"
|
|
653 "DEFWINDOWMODE"
|
|
654 "DISABLE"
|
|
655 "DLG_ERR"
|
|
656 "ENABLE"
|
|
657 "END_OF_LIST"
|
|
658 "EXCLUSIVE"
|
|
659 "EXISTS"
|
|
660 "EXIT"
|
|
661 "FAILIFEXISTS"
|
|
662 "FALSE"
|
|
663 "FULL"
|
|
664 "INDVFILESTATUS"
|
|
665 "INFORMATION"
|
|
666 "LIST_NULL"
|
|
667 "LISTFIRST"
|
|
668 "LISTNEXT"
|
|
669 "LOGGING"
|
|
670 "NEXT"
|
|
671 "NONEXCLUSIVE"
|
|
672 "NOSET"
|
|
673 "NO"
|
|
674 "OFF"
|
|
675 "ON"
|
|
676 "PARTIAL"
|
|
677 "REPLACE_ITEM"
|
|
678 "REPLACE"
|
|
679 "RESET"
|
|
680 "RESTART"
|
|
681 "SET"
|
|
682 "SEVERE"
|
|
683 "SRCTARGETDIR"
|
|
684 "STATUS"
|
|
685 "TRUE"
|
|
686 "YES"
|
|
687 "WARNING"
|
|
688 )
|
|
689 'font-lock-variable-name-face) ; is this face the best choice?
|
|
690 )
|
|
691 (list "\\.[rR][uU][lL]$")
|
|
692 (list
|
|
693 (function
|
|
694 (lambda ()
|
|
695 (setq imenu-generic-expression
|
|
696 '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1)))
|
|
697 )))
|
|
698 "Generic mode for InstallShield RUL files")
|
|
699
|
|
700 (define-skeleton rul-if
|
|
701 "Insert an if statement."
|
|
702 "condition: "
|
|
703 "if(" str ") then" \n
|
|
704 > _ \n
|
|
705 ( "other condition, %s: "
|
|
706 > "elseif(" str ") then" \n
|
|
707 > \n)
|
|
708 > "else" \n
|
|
709 > \n
|
|
710 resume:
|
|
711 > "endif;"
|
|
712 )
|
|
713
|
|
714 (define-skeleton rul-function
|
|
715 "Insert a function statement."
|
|
716 "function: "
|
|
717 "function " str " ()" \n
|
|
718 ( "local variables, %s: "
|
|
719 > " " str ";" \n)
|
|
720 > "begin" \n
|
|
721 > _ \n
|
|
722 resume:
|
|
723 > "end;")
|
|
724
|
|
725 )
|
|
726
|
|
727 ;;; Info-Mac abstracts
|
|
728 ;; Contributed by Jacques Duthen Prestataire (duthen@cegelec-red.fr)
|
|
729 ;;
|
|
730 ;; For an example of such a file, you can download (the small):
|
|
731 ;; http://hyperarchive.lcs.mit.edu/HyperArchive/Archive/_Font/00font-abstracts.txt
|
|
732 (and
|
|
733 (memq 'info-mac-abstract-generic-mode generic-extras-enable-list)
|
|
734
|
|
735 (define-generic-mode 'info-mac-abstract-generic-mode
|
|
736 ()
|
|
737 (list "Date" "From" "Subject")
|
|
738 '(("^#### [^\n\r]*" . font-lock-function-name-face))
|
|
739 (list "00.*-abstracts\\.txt")
|
|
740 nil
|
|
741 "Generic mode for info-mac abstract files."))
|
|
742
|
|
743 ;;; Mailagent
|
|
744 ;; Mailagent is a Unix mail filtering program. Anyone wanna do a generic mode
|
|
745 ;; for procmail?
|
|
746 (and
|
|
747 (memq 'mailagent-rules-generic-mode generic-extras-enable-list)
|
|
748
|
|
749 (define-generic-mode 'mailagent-rules-generic-mode
|
|
750 (list ?#)
|
|
751 (list "SAVE" "DELETE" "PIPE" "ANNOTATE" "REJECT")
|
|
752 '(("^\\(\\sw+\\)\\s-*=" 1 'font-lock-variable-name-face)
|
|
753 ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 'font-lock-reference-face))
|
|
754 (list "\\.rules$")
|
|
755 (list 'mailagent-rules-setup-function)
|
|
756 "Mode for Mailagent rules files.")
|
|
757
|
|
758 (defun mailagent-rules-setup-function ()
|
|
759 (make-local-variable 'imenu-generic-expression)
|
|
760 (setq imenu-generic-expression
|
|
761 '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1))))
|
|
762 )
|
|
763
|
|
764 ;;; Crontab
|
|
765 ;; I didn't write this, I only adapted it for generic-mode
|
|
766 ;; If anyone knows who wrote it originally, I'd be glad to credit them
|
|
767 (and
|
|
768 (memq 'crontab-generic-mode generic-extras-enable-list)
|
|
769
|
|
770 (define-generic-mode 'crontab-generic-mode
|
|
771 (list ?#)
|
|
772 nil
|
|
773 (list
|
|
774 (list
|
|
775 (concat "^\\("
|
|
776 ;; Repeated 5 times for minute, hour, day of month,
|
|
777 ;; month and day of week fields
|
|
778 (mapconcat 'identity (make-list 5 "[*0-9,]+[ \t]+") "")
|
|
779 "\\)\\([^\n\r]*\\)")
|
|
780 (list 1 'font-lock-reference-face)
|
|
781 (list 2 'font-lock-function-name-face)))
|
|
782 nil
|
|
783 (list 'crontab-setup-function)
|
|
784 "Mode for Crontab files.")
|
|
785
|
|
786 (defun crontab-setup-function ()
|
|
787 (local-set-key "\C-c\C-c" 'crontab-update)
|
|
788 (local-set-key "\C-x\C-s" 'crontab-update)
|
|
789 )
|
|
790
|
|
791 (defun crontab ()
|
|
792 "Edit a crontab file.
|
|
793 Type \\[save-buffer] to feed the buffer to the crontab command."
|
|
794 (interactive)
|
|
795 (switch-to-buffer "*Crontab*")
|
|
796 (erase-buffer)
|
|
797 (message "Reading crontab file ... ")(sit-for 0) ; redisplay
|
|
798 (if (eq (call-process-region (point) (point) "crontab" nil t t "-l") 0)
|
|
799 (message "Reading crontab file ... done")
|
|
800 (message "No crontab file")
|
|
801 (erase-buffer)
|
|
802 (insert "#min hour dom mon dow (0=Sun) cmd\n"))
|
|
803 (set-buffer-modified-p nil)
|
|
804 (crontab-generic-mode))
|
|
805
|
|
806 (defun crontab-update ()
|
|
807 "Use the current buffer to update the crontab file."
|
|
808 (interactive)
|
|
809 (message "Updating crontab file ... ")(sit-for 0) ; redisplay
|
|
810 (shell-command-on-region (point-min) (point-max) "crontab" nil)
|
|
811 (message "Updating crontab file ... done")
|
|
812 (set-buffer-modified-p nil))
|
|
813 )
|
|
814
|
|
815 ;; Contributed by Jacques Duthen Prestataire (duthen@cegelec-red.fr)
|
|
816 (and
|
|
817 (memq 'ps-generic-mode generic-extras-enable-list)
|
|
818
|
|
819 (define-generic-mode 'ps-generic-mode
|
|
820 () ;; (list ?%) would not permit to differentiate DSC comments.
|
|
821 (list "def" "if" "ifelse" "forall") ; some keywords
|
|
822 '(("^%%[^ \n]*" . font-lock-reference-face) ; DSC comments
|
|
823 ("^/[^ \n]*" . font-lock-function-name-face) ; func or glob var def
|
|
824 ("%.*" . font-lock-comment-face) ; normal comments
|
|
825 ("(.*)" . font-lock-string-face) ; ps strings
|
|
826 ("/[^ \n]*" . font-lock-variable-name-face) ; symbols
|
|
827 )
|
|
828 (list "\\.ps") ;; extension of Postscript files
|
|
829 nil ;; no hook
|
|
830 "Generic mode for PostScript files")
|
|
831 )
|
|
832
|
|
833 ;; Solaris/Sys V prototype files
|
|
834 (and
|
|
835 (memq 'prototype-generic-mode generic-extras-enable-list)
|
|
836
|
|
837 (define-generic-mode 'prototype-generic-mode
|
|
838 (list ?#)
|
|
839 nil
|
|
840 '(
|
|
841 ("^\\([0-9]\\)?\\s-*\\([a-z]\\)\\s-+\\([A-Za-z_]+\\)\\s-+\\([^\n\r]*\\)$"
|
|
842 (2 font-lock-reference-face)
|
|
843 (3 font-lock-keyword-face))
|
|
844 ("^\\([a-z]\\) \\([A-Za-z_]+\\)=\\([^\n\r]*\\)$"
|
|
845 (1 font-lock-reference-face)
|
|
846 (2 font-lock-keyword-face)
|
|
847 (3 font-lock-variable-name-face))
|
|
848 ("^\\(!\\s-*\\(search\\|include\\|default\\)\\)\\s-*\\([^\n\r]*\\)$"
|
|
849 (1 font-lock-keyword-face)
|
|
850 (3 font-lock-variable-name-face))
|
|
851 ("^\\(!\\s-*\\sw+\\)=\\([^\n\r]*\\)$"
|
|
852 (1 font-lock-keyword-face)
|
|
853 (2 font-lock-variable-name-face))
|
|
854 )
|
|
855 (list "prototype$")
|
|
856 nil
|
|
857 "Mode for Sys V prototype files"))
|
|
858
|
|
859 ;; Solaris/Sys V pkginfo files
|
|
860 (and
|
|
861 (memq 'pkginfo-generic-mode generic-extras-enable-list)
|
|
862
|
|
863 (define-generic-mode 'pkginfo-generic-mode
|
|
864 (list ?#)
|
|
865 nil
|
|
866 '(
|
|
867 ("^\\([A-Za-z_]+\\)=\\([^\n\r]*\\)$"
|
|
868 (1 font-lock-keyword-face)
|
|
869 (2 font-lock-variable-name-face))
|
|
870 )
|
|
871 (list "pkginfo$")
|
|
872 nil
|
|
873 "Mode for Sys V pkginfo files"))
|
|
874
|
|
875 (define-generic-mode 'javascript-generic-mode
|
|
876 (list "//")
|
|
877 (list
|
|
878 "document"
|
|
879 "else"
|
|
880 "function"
|
|
881 "function"
|
|
882 "if"
|
|
883 "then"
|
|
884 "var"
|
|
885 )
|
|
886 (list
|
|
887 (list "^\\s-*function\\s-+\\([A-Za-z0-9]+\\)"
|
|
888 '(1 font-lock-function-name-face))
|
|
889 (list "^\\s-*var\\s-+\\([A-Za-z0-9]+\\)"
|
|
890 '(1 font-lock-variable-name-face))
|
|
891 )
|
|
892 (list "\\.js$")
|
|
893 (list
|
|
894 (function
|
|
895 (lambda ()
|
|
896 (setq imenu-generic-expression
|
|
897 '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1)))
|
|
898 )))
|
|
899 "Mode for JavaScript files.")
|
|
900
|
|
901 (define-generic-mode 'vrml-generic-mode
|
|
902 (list ?#)
|
|
903 (list
|
|
904 "DEF"
|
|
905 "NULL"
|
|
906 "USE"
|
|
907 "Viewpoint"
|
|
908 "ambientIntensity"
|
|
909 "appearance"
|
|
910 "children"
|
|
911 "color"
|
|
912 "coord"
|
|
913 "coordIndex"
|
|
914 "creaseAngle"
|
|
915 "diffuseColor"
|
|
916 "emissiveColor"
|
|
917 "fieldOfView"
|
|
918 "geometry"
|
|
919 "info"
|
|
920 "material"
|
|
921 "normal"
|
|
922 "orientation"
|
|
923 "position"
|
|
924 "shininess"
|
|
925 "specularColor"
|
|
926 "texCoord"
|
|
927 "texture"
|
|
928 "textureTransform"
|
|
929 "title"
|
|
930 "transparency"
|
|
931 "type"
|
|
932 )
|
|
933 (list
|
|
934 (list "USE\\s-+\\([-A-Za-z0-9_]+\\)"
|
|
935 '(1 font-lock-reference-face))
|
|
936 (list "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{"
|
|
937 '(1 font-lock-type-face)
|
|
938 '(2 font-lock-reference-face))
|
|
939 (list "^\\s-*\\([-A-Za-z0-9_]+\\)\\s-*{"
|
|
940 '(1 font-lock-function-name-face))
|
|
941 (list
|
|
942 "^\\s-*\\(geometry\\|appearance\\|material\\)\\s-+\\([-A-Za-z0-9_]+\\)"
|
|
943 '(2 font-lock-variable-name-face))
|
|
944 )
|
|
945 (list "\\.wrl$")
|
|
946 (list
|
|
947 (function
|
|
948 (lambda ()
|
|
949 (setq imenu-generic-expression
|
|
950 '((nil "^\\([A-Za-z0-9_]+\\)\\s-*{" 1)
|
|
951 ("*Definitions*"
|
|
952 "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{"
|
|
953 1)))
|
|
954 )))
|
|
955 "Generic Mode for VRML files.")
|
|
956
|
|
957 (define-generic-mode 'mailrc-generic-mode
|
|
958 (list ?#)
|
|
959 (list "alias" "group" "set")
|
|
960 '(("^\\s-*\\(alias\\|group\\)\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([^\n\r]*\\)$"
|
|
961 (2 font-lock-reference-face) (3 font-lock-variable-name-face))
|
|
962 ("^\\s-*set\\s-+\\([-A-Za-z0-9_]+\\)=\\([^\n\r]*\\)$"
|
|
963 (1 font-lock-reference-face) (2 font-lock-variable-name-face)))
|
|
964 (list "\\.mailrc$")
|
|
965 nil
|
|
966 "Mode for mailrc files")
|
|
967
|
|
968 (define-generic-mode 'java-manifest-generic-mode
|
|
969 (list ?#)
|
|
970 (list "Name"
|
|
971 "Digest-Algorithms"
|
|
972 "Manifest-Version"
|
|
973 "Required-Version"
|
|
974 "Signature-Version"
|
|
975 "Magic")
|
|
976 '(("^Name:\\s-+\\([^\n\r]*\\)$"
|
|
977 (1 font-lock-variable-name-face))
|
|
978 ("^\\(Manifest\\|Required\\|Signature\\)-Version:\\s-+\\([^\n\r]*\\)$"
|
|
979 (2 font-lock-reference-face))
|
|
980 )
|
|
981 (list "manifest\\.mf$")
|
|
982 nil
|
|
983 "Mode for Java Manifest files")
|
|
984
|
|
985 (provide 'generic-extras)
|
|
986
|
|
987 ;;; generic-extras.el ends here
|
|
988
|
|
989 ;; Local Variables:
|
|
990 ;; autocompile: t
|
|
991 ;; End:
|