X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=nagios-mode.el;h=6b2d1d12a3ded7159559539603d19aa6021f5cb6;hb=f5456f838c2441f40a58d34515fa4bd389bc2259;hp=6b1bd3beac87315bcb43ce67fdcdb3271af18e5e;hpb=2506187c2e73f110af2f09e4f6e410652cc4cc44;p=nagios-mode.git diff --git a/nagios-mode.el b/nagios-mode.el index 6b1bd3b..6b2d1d1 100644 --- a/nagios-mode.el +++ b/nagios-mode.el @@ -173,16 +173,6 @@ -;; Syntax Highlighting Patterns - -(defconst nagios-comments - (eval-when-compile - (regexp-alt-raw - '("#+.*" - ";+.*"))) - ) - - (defconst nagios-directives (eval-when-compile (concat "^[ \t\r\n]*" @@ -190,13 +180,13 @@ (regexp-opt '("active_checks_enabled" "address" "alias" "check_command" "check_freshness" "check_interval" "check_period" "checks_enabled" - "command_line" "command_name" "contact_groups" "contact_name" - "contactgroup_name" "contacts" "dependent_host_name" - "dependent_service_description" "email" "event_handler" - "event_handler_enabled" "execution_failure_criteria" + "command_line" "command_name" "contactgroups" "contact_groups" + "contactgroup_members" "contact_name" "contactgroup_name" "contacts" + "dependent_host_name" "dependent_service_description" "email" + "event_handler" "event_handler_enabled" "execution_failure_criteria" "failure_prediction_enabled" "first_notification" - "flap_detection_enabled" "freshness_threshold" "friday" - "high_flap_threshold" "host_name" "host_notification_commands" + "first_notification_delay" "flap_detection_enabled" "freshness_threshold" + "friday" "high_flap_threshold" "host_name" "host_notification_commands" "host_notification_options" "host_notification_period" "host_notifications_enabled" "hostgroup_name" "hostgroups" "is_volatile" "last_notification" "low_flap_threshold" @@ -272,48 +262,59 @@ (defvar nagios-font-lock-keywords (list - (cons nagios-special font-lock-keyword-face) (cons nagios-directives font-lock-variable-name-face) (cons nagios-macros font-lock-constant-face) - (cons nagios-definitions '(1 font-lock-function-name-face)) - - ;; And comments take precedence over everything else. - (cons nagios-comments '(0 font-lock-comment-delimiter-face t))) + (cons nagios-definitions '(1 font-lock-function-name-face))) "Rules for highlighting Nagios configuration files." ) +(defvar nagios-mode-syntax-table nil + "Syntax table used in nagios-mode buffers.") +(if nagios-mode-syntax-table + nil + (setq nagios-mode-syntax-table (make-syntax-table)) + (modify-syntax-entry ?# "< b" nagios-mode-syntax-table) ;; Comment style 1 + (modify-syntax-entry ?\; "< b" nagios-mode-syntax-table) ;; Comment style 2 + (modify-syntax-entry ?\n "> b" nagios-mode-syntax-table) ;; End comment + ) + + ;; Main Mode Function (defun nagios-mode() "Major mode for editing Nagios configuration files." (interactive) - - ;; Initializing. This is actually important to cover - ;; up some Emacs stupidity. Font locking won't occur - ;; without it. (kill-all-local-variables) - - ;; Set up indentation handling using the functions - ;; defined earlier. + (make-local-variable 'font-lock-defaults) + (make-local-variable 'comment-start) + (make-local-variable 'comment-start-skip) + (make-local-variable 'comment-end) (make-local-variable 'indent-line-function) - (setq indent-line-function 'nagios-indent-line) + (make-local-variable 'syntax-begin-function) + + (set-syntax-table nagios-mode-syntax-table) - ;; Configure font locking. Set the defaults to something - ;; sensible, defined earlier. - (make-local-variable 'font-lock-defaults) - (setq font-lock-defaults '(nagios-font-lock-keywords t t)) + (setq mode-name "nagios" + major-mode 'nagios-mode + indent-line-function 'nagios-indent-line + font-lock-defaults '(nagios-font-lock-keywords) + comment-start "#" + comment-start-skip "#\|; +" + comment-end "" + + ;; Since comments and strings do not span multiple lines, + ;; the syntax parser can safely start parsing at the beginning + ;; of any line. + syntax-begin-function 'beginning-of-line + ) ;; Keyboard Mapping (use-local-map nagios-mode-map) - - ;; Rock and roll. - (setq mode-name "nagios" - major-mode 'nagios-mode) ;; I don't /think/ I need to define this before attempting ;; to run it. Users can define it if they want.