Mercurial > hg > xemacs
comparison generic-extras.el @ 78:0abfe9bf83a0
merge
| author | Henry S. Thompson <ht@inf.ed.ac.uk> |
|---|---|
| date | Thu, 25 Sep 2025 17:57:05 +0100 |
| parents | 2a3055313d1e |
| children |
comparison
equal
deleted
inserted
replaced
| 77:62fb1a21629a | 78:0abfe9bf83a0 |
|---|---|
| 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: |
