1 2;; Help from http://two-wugs.net/emacs/wpdl-mode.el 3 4(defvar conf-mode-hook nil) 5(defvar conf-mode-map 6 (let ((conf-mode-map (make-keymap))) 7; (define-key conf-mode-map "\C-j" 'newline-and-indent) 8 conf-mode-map) 9 "Keymap for Conf major mode") 10 11;; Set us up to load by default for .conf files 12(add-to-list 'auto-mode-alist '("\\.conf$" . conf-mode)) 13 14 15 16 17; Note comments are done via. syntax table... 18(defconst conf-font-lock-keywords-1 19 (list 20 '("\\<\\(AND\\|and\\|OR\\|or\\|||\\|&&\\|NOT\\|not\\|!\\)\\>" . 21 font-lock-function-name-face) 22; '("\\<\\(\\w\\w*\\)\\>" . 23; font-lock-variable-name-face) 24 '("^#!\\( \\|/\\).*" . 25 font-lock-warning-face)) 26 "Minimal highlighting expressions for Conf mode") 27 28(defconst conf-font-lock-keywords-2 29 (append conf-font-lock-keywords-1 30 (list 31 '("[][()]" . font-lock-keyword-face) 32 '("\\<\\(TRUE\\|true\\|FALSE\\|false\\|ELSE\\|else\\)\\>" . 33 font-lock-constant-face))) 34 "Level 2 Keywords to highlight in Conf mode") 35 36; httpd specific keywords... 37(defconst conf-font-lock-keywords-3 38 (append conf-font-lock-keywords-2 39 (list 40 '("\\<\\(org.and.daemon-conf-1.0\\|org.and.httpd-conf-main-1.0\\|org.and.httpd-conf-req-1.0\\)\\>" . font-lock-function-name-face))) 41 "Level 3 Keywords to highlight in Conf mode") 42 43(defconst conf-font-lock-keywords-4 44 (append conf-font-lock-keywords-3 45 (list 46 '("\\<return\\>" . font-lock-keyword-face) 47 '("\\<policy\\|connection-policy\\>" . font-lock-builtin-face))) 48 "Level 4 Keywords to highlight in Conf mode") 49 50 51; By default highlight for httpd... 52(defvar conf-font-lock-keywords conf-font-lock-keywords-4 53 "Default highlighting expressions for Conf mode") 54 55 56(defun conf-indent-line () 57 "Indent current line as Conf code." 58 (interactive) 59 (beginning-of-line) 60 (indent-line-to 0) ; First line is always non-indented 61) 62 63(defvar conf-mode-syntax-table 64 (let ((conf-mode-syntax-table (make-syntax-table))) 65 66 ; This is added so symbols can be more easily parsed 67 (modify-syntax-entry ?- "w" conf-mode-syntax-table) 68 (modify-syntax-entry ?_ "w" conf-mode-syntax-table) 69 (modify-syntax-entry ?. "w" conf-mode-syntax-table) 70 (modify-syntax-entry ?, "w" conf-mode-syntax-table) 71 (modify-syntax-entry ?` "w" conf-mode-syntax-table) 72 (modify-syntax-entry ?{ "w" conf-mode-syntax-table) 73 (modify-syntax-entry ?} "w" conf-mode-syntax-table) 74 (modify-syntax-entry ?& "w" conf-mode-syntax-table) 75 (modify-syntax-entry ?| "w" conf-mode-syntax-table) 76 (modify-syntax-entry ?! "w" conf-mode-syntax-table) 77 (modify-syntax-entry ?: "w" conf-mode-syntax-table) 78 79;; (modify-syntax-entry ?\( "$" conf-mode-syntax-table) 80;; (modify-syntax-entry ?\) "$" conf-mode-syntax-table) 81;; (modify-syntax-entry ?\[ "$" conf-mode-syntax-table) 82;; (modify-syntax-entry ?\] "$" conf-mode-syntax-table) 83 (modify-syntax-entry ?\' "\"" conf-mode-syntax-table) 84 (modify-syntax-entry ?\; "<" conf-mode-syntax-table) 85 (modify-syntax-entry ?\# "<" conf-mode-syntax-table) 86 (modify-syntax-entry ?\n ">" conf-mode-syntax-table) 87 conf-mode-syntax-table) 88 "Syntax table for conf-mode") 89 90(defun conf-mode () 91 (interactive) 92 (kill-all-local-variables) 93 (use-local-map conf-mode-map) 94 (set-syntax-table conf-mode-syntax-table) 95 ;; Set up font-lock 96 (set (make-local-variable 'font-lock-defaults) '(conf-font-lock-keywords)) 97 ;; Register our indentation function 98 (set (make-local-variable 'indent-line-function) 'conf-indent-line) 99 (setq major-mode 'conf-mode) 100 (setq mode-name "CONF") 101 (run-hooks 'conf-mode-hook)) 102 103(provide 'conf-mode) 104 105;;; conf-mode.el ends here 106