(defvar nmodl-mode-hook nil) (defvar wpdl-mode-map (let ((map (make-keymap))) ; (define-key map "\C-j" 'newline-and-indent) map) "Keymap for NMODL major mode") ;;;###autoload (add-to-list 'auto-mode-alist '("\\.mod\\'" . nmodl-mode)) (setq nmodl-keywords '( "NEURON" "UNITS" "PARAMETER" "ASSIGNED" "STATE" "INITIAL" "BREAKPOINT" "DERIVATIVE" "PROCEDURE" )) (setq nmodl-neuron-keywords '( "TITLE" "SUFFIX" "POINT_PROCESS" "RANGE" "GLOBAL" "POINTER" "BBCOREPOINTER" "USEION" "NONSPECIFIC_CURRENT" "SOLVE" "METHOD" )) (defvar nmodl-font-lock-keywords `( ,(regexp-opt nmodl-keywords t) . 'font-lock-keyword-face ) "Minimal highlighting expressions for NMODL mode") (setq nmodl-font-lock-keywords `( (,(regexp-opt nmodl-keywords t) . 'font-lock-keyword-face) (,(regexp-opt nmodl-neuron-keywords t) . 'font-lock-constant-face) ("^[[:space:]]*\\([[:alpha:]][[:alnum:]_]*\\)" . 'font-lock-variable-name-face) )) (setq nmodl-syntax-rules (syntax-propertize-rules ("TITLE\\([^\n]\\)[^\n]*\\(\n\\)" (1 "|") (2 "|")) ("\\<\\(COMMENT\\)\\>" (1 "<")) ("\\" (1 ">")) ("^[^:\n]*\\(:\\)[^\n]*\\(\n\\)" (1 "!") (2 "!")) ("\\({\\)" (1 "(")) ("\\(}\\)" (1 ")")) )) (defun nmodl-indent () (indent-relative-first-indent-point) ) (defun nmodl-mode () "Major mode for editing Workflow Process Description Language files" (interactive) (kill-all-local-variables) (setq-local font-lock-defaults '(nmodl-font-lock-keywords)) (setq-local syntax-propertize-function nmodl-syntax-rules) (setq-local c-syntactic-indentation t) (setq-local indent-line-function 'nmodl-indent) ;; (use-local-map wpdl-mode-map) (setq major-mode 'nmodl-mode) (setq mode-name "NMODL") (run-hooks 'nmodl-mode-hook))