X-Git-Url: http://gitweb.michael.orlitzky.com/?p=nagios-mode.git;a=blobdiff_plain;f=nagios-mode.el;h=722450edfd87130ce9d06762df9d8fdd568c7cc4;hp=6b1bd3beac87315bcb43ce67fdcdb3271af18e5e;hb=b6e4bb9b453781905f9b81595a95fd87c045a079;hpb=2506187c2e73f110af2f09e4f6e410652cc4cc44 diff --git a/nagios-mode.el b/nagios-mode.el index 6b1bd3b..722450e 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" @@ -223,16 +213,447 @@ (defconst nagios-macros (eval-when-compile (regexp-alt-raw - '("\\$CONTACT\\(NAME\\|ALIAS\\|EMAIL\\|PAGER\\)\\$" - "\\$HOST\\(NAME\\|ALIAS\\|ADDRESS\\|STATE\\)\\$" - "\\$\\(ARG\\|USER\\)\\([1-9]\\|[1-2][0-9]\\|3[0-2]\\)\\$" - "\\$SERVICE\\(DESC\\|STATE\\)\\$" - "\\$\\(OUTPUT\\|PERFDATA\\|EXECUTIONTIME\\|LATENCY\\)\\$" - "\\$NOTIFICATION\\(TYPE\\|NUMBER\\)\\$" - "\\$\\(\\(SHORT\\)?DATETIME\\|DATE\\|TIME\\|TIMET\\)\\$" - "\\$\\(LASTSTATECHANGE\\|STATETYPE\\)\\$" - "\\$ADMIN\\(EMAIL\\|PAGER\\)\\$" - "\\$\\(SERVICE\\|HOST\\)ATTEMPT\\$"))) + '("\\$ADMINEMAIL\\$" + "\\$ADMINPAGER\\$" + "\\$ARG1\\$" + "\\$ARG10\\$" + "\\$ARG11\\$" + "\\$ARG12\\$" + "\\$ARG13\\$" + "\\$ARG14\\$" + "\\$ARG15\\$" + "\\$ARG16\\$" + "\\$ARG17\\$" + "\\$ARG18\\$" + "\\$ARG19\\$" + "\\$ARG2\\$" + "\\$ARG20\\$" + "\\$ARG21\\$" + "\\$ARG22\\$" + "\\$ARG23\\$" + "\\$ARG24\\$" + "\\$ARG25\\$" + "\\$ARG26\\$" + "\\$ARG27\\$" + "\\$ARG28\\$" + "\\$ARG29\\$" + "\\$ARG3\\$" + "\\$ARG30\\$" + "\\$ARG31\\$" + "\\$ARG32\\$" + "\\$ARG4\\$" + "\\$ARG5\\$" + "\\$ARG6\\$" + "\\$ARG7\\$" + "\\$ARG8\\$" + "\\$ARG9\\$" + "\\$COMMANDFILE\\$" + "\\$CONTACTALIAS\\$" + "\\$CONTACTEMAIL\\$" + "\\$CONTACTGROUPALIAS\\$" + "\\$CONTACTGROUPMEMBERS\\$" + "\\$CONTACTGROUPNAME\\$" + "\\$CONTACTGROUPNAMES\\$" + "\\$CONTACTNAME\\$" + "\\$CONTACTPAGER\\$" + "\\$DATE\\$" + "\\$EVENTSTARTTIME\\$" + "\\$HOSTACKAUTHOR\\$" + "\\$HOSTACKAUTHORALIAS\\$" + "\\$HOSTACKAUTHORNAME\\$" + "\\$HOSTACKCOMMENT\\$" + "\\$HOSTACTIONURL\\$" + "\\$HOSTADDRESS\\$" + "\\$HOSTALIAS\\$" + "\\$HOSTATTEMPT\\$" + "\\$HOSTCHECKCOMMAND\\$" + "\\$HOSTCHECKTYPE\\$" + "\\$HOSTDISPLAYNAME\\$" + "\\$HOSTDOWNTIME\\$" + "\\$HOSTDURATION\\$" + "\\$HOSTDURATIONSEC\\$" + "\\$HOSTEVENTID\\$" + "\\$HOSTEXECUTIONTIME\\$" + "\\$HOSTGROUPACTIONURL\\$" + "\\$HOSTGROUPALIAS\\$" + "\\$HOSTGROUPMEMBERS\\$" + "\\$HOSTGROUPNAME\\$" + "\\$HOSTGROUPNAMES\\$" + "\\$HOSTGROUPNOTES\\$" + "\\$HOSTGROUPNOTESURL\\$" + "\\$HOSTLATENCY\\$" + "\\$HOSTNAME\\$" + "\\$HOSTNOTES\\$" + "\\$HOSTNOTESURL\\$" + "\\$HOSTNOTIFICATIONID\\$" + "\\$HOSTNOTIFICATIONNUMBER\\$" + "\\$HOSTOUTPUT\\$" + "\\$HOSTPERCENTCHANGE\\$" + "\\$HOSTPERFDATA\\$" + "\\$HOSTPERFDATAFILE\\$" + "\\$HOSTPROBLEMID\\$" + "\\$HOSTSTATE\\$" + "\\$HOSTSTATEID\\$" + "\\$HOSTSTATETYPE\\$" + "\\$ISVALIDTIME\\$" + "\\$LASTHOSTCHECK\\$" + "\\$LASTHOSTDOWN\\$" + "\\$LASTHOSTEVENTID\\$" + "\\$LASTHOSTPROBLEMID\\$" + "\\$LASTHOSTSTATE\\$" + "\\$LASTHOSTSTATECHANGE\\$" + "\\$LASTHOSTSTATEID\\$" + "\\$LASTHOSTUNREACHABLE\\$" + "\\$LASTHOSTUP\\$" + "\\$LASTSERVICECHECK\\$" + "\\$LASTSERVICECRITICAL\\$" + "\\$LASTSERVICEEVENTID\\$" + "\\$LASTSERVICEOK\\$" + "\\$LASTSERVICEPROBLEMID\\$" + "\\$LASTSERVICESTATE\\$" + "\\$LASTSERVICESTATECHANGE\\$" + "\\$LASTSERVICESTATEID\\$" + "\\$LASTSERVICEUNKNOWN\\$" + "\\$LASTSERVICEWARNING\\$" + "\\$LOGFILE\\$" + "\\$LONGDATETIME\\$" + "\\$LONGHOSTOUTPUT\\$" + "\\$LONGSERVICEOUTPUT\\$" + "\\$MAINCONFIGFILE\\$" + "\\$MAXHOSTATTEMPTS\\$" + "\\$MAXSERVICEATTEMPTS\\$" + "\\$NEXTVALIDTIME\\$" + "\\$NOTIFICATIONAUTHOR\\$" + "\\$NOTIFICATIONAUTHORALIAS\\$" + "\\$NOTIFICATIONAUTHORNAME\\$" + "\\$NOTIFICATIONCOMMENT\\$" + "\\$NOTIFICATIONISESCALATED\\$" + "\\$NOTIFICATIONNUMBER\\$" + "\\$NOTIFICATIONRECIPIENTS\\$" + "\\$NOTIFICATIONTYPE\\$" + "\\$OBJECTCACHEFILE\\$" + "\\$PROCESSSTARTTIME\\$" + "\\$RESOURCEFILE\\$" + "\\$RETENTIONDATAFILE\\$" + "\\$SERVICEACKAUTHOR\\$" + "\\$SERVICEACKAUTHORALIAS\\$" + "\\$SERVICEACKAUTHORNAME\\$" + "\\$SERVICEACKCOMMENT\\$" + "\\$SERVICEACTIONURL\\$" + "\\$SERVICEATTEMPT\\$" + "\\$SERVICECHECKCOMMAND\\$" + "\\$SERVICECHECKTYPE\\$" + "\\$SERVICEDESC\\$" + "\\$SERVICEDISPLAYNAME\\$" + "\\$SERVICEDOWNTIME\\$" + "\\$SERVICEDURATION\\$" + "\\$SERVICEDURATIONSEC\\$" + "\\$SERVICEEVENTID\\$" + "\\$SERVICEEXECUTIONTIME\\$" + "\\$SERVICEGROUPACTIONURL\\$" + "\\$SERVICEGROUPALIAS\\$" + "\\$SERVICEGROUPMEMBERS\\$" + "\\$SERVICEGROUPNAME\\$" + "\\$SERVICEGROUPNAMES\\$" + "\\$SERVICEGROUPNOTES\\$" + "\\$SERVICEGROUPNOTESURL\\$" + "\\$SERVICEISVOLATILE\\$" + "\\$SERVICELATENCY\\$" + "\\$SERVICENOTES\\$" + "\\$SERVICENOTESURL\\$" + "\\$SERVICENOTIFICATIONID\\$" + "\\$SERVICENOTIFICATIONNUMBER\\$" + "\\$SERVICEOUTPUT\\$" + "\\$SERVICEPERCENTCHANGE\\$" + "\\$SERVICEPERFDATA\\$" + "\\$SERVICEPERFDATAFILE\\$" + "\\$SERVICEPROBLEMID\\$" + "\\$SERVICESTATE\\$" + "\\$SERVICESTATEID\\$" + "\\$SERVICESTATETYPE\\$" + "\\$SHORTDATETIME\\$" + "\\$STATUSDATAFILE\\$" + "\\$TEMPFILE\\$" + "\\$TEMPPATH\\$" + "\\$TIME\\$" + "\\$TIMET\\$" + "\\$TOTALHOSTPROBLEMS\\$" + "\\$TOTALHOSTPROBLEMSUNHANDLED\\$" + "\\$TOTALHOSTSDOWN\\$" + "\\$TOTALHOSTSDOWNUNHANDLED\\$" + "\\$TOTALHOSTSERVICES\\$" + "\\$TOTALHOSTSERVICESCRITICAL\\$" + "\\$TOTALHOSTSERVICESOK\\$" + "\\$TOTALHOSTSERVICESUNKNOWN\\$" + "\\$TOTALHOSTSERVICESWARNING\\$" + "\\$TOTALHOSTSUNREACHABLE\\$" + "\\$TOTALHOSTSUNREACHABLEUNHANDLED\\$" + "\\$TOTALHOSTSUP\\$" + "\\$TOTALSERVICEPROBLEMS\\$" + "\\$TOTALSERVICEPROBLEMSUNHANDLED\\$" + "\\$TOTALSERVICESCRITICAL\\$" + "\\$TOTALSERVICESCRITICALUNHANDLED\\$" + "\\$TOTALSERVICESOK\\$" + "\\$TOTALSERVICESUNKNOWN\\$" + "\\$TOTALSERVICESUNKNOWNUNHANDLED\\$" + "\\$TOTALSERVICESWARNING\\$" + "\\$TOTALSERVICESWARNINGUNHANDLED\\$" + "\\$USER1\\$" + "\\$USER10\\$" + "\\$USER100\\$" + "\\$USER101\\$" + "\\$USER102\\$" + "\\$USER103\\$" + "\\$USER104\\$" + "\\$USER105\\$" + "\\$USER106\\$" + "\\$USER107\\$" + "\\$USER108\\$" + "\\$USER109\\$" + "\\$USER11\\$" + "\\$USER110\\$" + "\\$USER111\\$" + "\\$USER112\\$" + "\\$USER113\\$" + "\\$USER114\\$" + "\\$USER115\\$" + "\\$USER116\\$" + "\\$USER117\\$" + "\\$USER118\\$" + "\\$USER119\\$" + "\\$USER12\\$" + "\\$USER120\\$" + "\\$USER121\\$" + "\\$USER122\\$" + "\\$USER123\\$" + "\\$USER124\\$" + "\\$USER125\\$" + "\\$USER126\\$" + "\\$USER127\\$" + "\\$USER128\\$" + "\\$USER129\\$" + "\\$USER13\\$" + "\\$USER130\\$" + "\\$USER131\\$" + "\\$USER132\\$" + "\\$USER133\\$" + "\\$USER134\\$" + "\\$USER135\\$" + "\\$USER136\\$" + "\\$USER137\\$" + "\\$USER138\\$" + "\\$USER139\\$" + "\\$USER14\\$" + "\\$USER140\\$" + "\\$USER141\\$" + "\\$USER142\\$" + "\\$USER143\\$" + "\\$USER144\\$" + "\\$USER145\\$" + "\\$USER146\\$" + "\\$USER147\\$" + "\\$USER148\\$" + "\\$USER149\\$" + "\\$USER15\\$" + "\\$USER150\\$" + "\\$USER151\\$" + "\\$USER152\\$" + "\\$USER153\\$" + "\\$USER154\\$" + "\\$USER155\\$" + "\\$USER156\\$" + "\\$USER157\\$" + "\\$USER158\\$" + "\\$USER159\\$" + "\\$USER16\\$" + "\\$USER160\\$" + "\\$USER161\\$" + "\\$USER162\\$" + "\\$USER163\\$" + "\\$USER164\\$" + "\\$USER165\\$" + "\\$USER166\\$" + "\\$USER167\\$" + "\\$USER168\\$" + "\\$USER169\\$" + "\\$USER17\\$" + "\\$USER170\\$" + "\\$USER171\\$" + "\\$USER172\\$" + "\\$USER173\\$" + "\\$USER174\\$" + "\\$USER175\\$" + "\\$USER176\\$" + "\\$USER177\\$" + "\\$USER178\\$" + "\\$USER179\\$" + "\\$USER18\\$" + "\\$USER180\\$" + "\\$USER181\\$" + "\\$USER182\\$" + "\\$USER183\\$" + "\\$USER184\\$" + "\\$USER185\\$" + "\\$USER186\\$" + "\\$USER187\\$" + "\\$USER188\\$" + "\\$USER189\\$" + "\\$USER19\\$" + "\\$USER190\\$" + "\\$USER191\\$" + "\\$USER192\\$" + "\\$USER193\\$" + "\\$USER194\\$" + "\\$USER195\\$" + "\\$USER196\\$" + "\\$USER197\\$" + "\\$USER198\\$" + "\\$USER199\\$" + "\\$USER2\\$" + "\\$USER20\\$" + "\\$USER200\\$" + "\\$USER201\\$" + "\\$USER202\\$" + "\\$USER203\\$" + "\\$USER204\\$" + "\\$USER205\\$" + "\\$USER206\\$" + "\\$USER207\\$" + "\\$USER208\\$" + "\\$USER209\\$" + "\\$USER21\\$" + "\\$USER210\\$" + "\\$USER211\\$" + "\\$USER212\\$" + "\\$USER213\\$" + "\\$USER214\\$" + "\\$USER215\\$" + "\\$USER216\\$" + "\\$USER217\\$" + "\\$USER218\\$" + "\\$USER219\\$" + "\\$USER22\\$" + "\\$USER220\\$" + "\\$USER221\\$" + "\\$USER222\\$" + "\\$USER223\\$" + "\\$USER224\\$" + "\\$USER225\\$" + "\\$USER226\\$" + "\\$USER227\\$" + "\\$USER228\\$" + "\\$USER229\\$" + "\\$USER23\\$" + "\\$USER230\\$" + "\\$USER231\\$" + "\\$USER232\\$" + "\\$USER233\\$" + "\\$USER234\\$" + "\\$USER235\\$" + "\\$USER236\\$" + "\\$USER237\\$" + "\\$USER238\\$" + "\\$USER239\\$" + "\\$USER24\\$" + "\\$USER240\\$" + "\\$USER241\\$" + "\\$USER242\\$" + "\\$USER243\\$" + "\\$USER244\\$" + "\\$USER245\\$" + "\\$USER246\\$" + "\\$USER247\\$" + "\\$USER248\\$" + "\\$USER249\\$" + "\\$USER25\\$" + "\\$USER250\\$" + "\\$USER251\\$" + "\\$USER252\\$" + "\\$USER253\\$" + "\\$USER254\\$" + "\\$USER255\\$" + "\\$USER256\\$" + "\\$USER26\\$" + "\\$USER27\\$" + "\\$USER28\\$" + "\\$USER29\\$" + "\\$USER3\\$" + "\\$USER30\\$" + "\\$USER31\\$" + "\\$USER32\\$" + "\\$USER33\\$" + "\\$USER34\\$" + "\\$USER35\\$" + "\\$USER36\\$" + "\\$USER37\\$" + "\\$USER38\\$" + "\\$USER39\\$" + "\\$USER4\\$" + "\\$USER40\\$" + "\\$USER41\\$" + "\\$USER42\\$" + "\\$USER43\\$" + "\\$USER44\\$" + "\\$USER45\\$" + "\\$USER46\\$" + "\\$USER47\\$" + "\\$USER48\\$" + "\\$USER49\\$" + "\\$USER5\\$" + "\\$USER50\\$" + "\\$USER51\\$" + "\\$USER52\\$" + "\\$USER53\\$" + "\\$USER54\\$" + "\\$USER55\\$" + "\\$USER56\\$" + "\\$USER57\\$" + "\\$USER58\\$" + "\\$USER59\\$" + "\\$USER6\\$" + "\\$USER60\\$" + "\\$USER61\\$" + "\\$USER62\\$" + "\\$USER63\\$" + "\\$USER64\\$" + "\\$USER65\\$" + "\\$USER66\\$" + "\\$USER67\\$" + "\\$USER68\\$" + "\\$USER69\\$" + "\\$USER7\\$" + "\\$USER70\\$" + "\\$USER71\\$" + "\\$USER72\\$" + "\\$USER73\\$" + "\\$USER74\\$" + "\\$USER75\\$" + "\\$USER76\\$" + "\\$USER77\\$" + "\\$USER78\\$" + "\\$USER79\\$" + "\\$USER8\\$" + "\\$USER80\\$" + "\\$USER81\\$" + "\\$USER82\\$" + "\\$USER83\\$" + "\\$USER84\\$" + "\\$USER85\\$" + "\\$USER86\\$" + "\\$USER87\\$" + "\\$USER88\\$" + "\\$USER89\\$" + "\\$USER9\\$" + "\\$USER90\\$" + "\\$USER91\\$" + "\\$USER92\\$" + "\\$USER93\\$" + "\\$USER94\\$" + "\\$USER95\\$" + "\\$USER96\\$" + "\\$USER97\\$" + "\\$USER98\\$" + "\\$USER99\\$"))) ) @@ -272,48 +693,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.