diff --git a/etc/emacs/hlds-mode.el b/etc/emacs/hlds-mode.el
new file mode 100644
index 0000000..436d40f
--- /dev/null
+++ b/etc/emacs/hlds-mode.el
@@ -0,0 +1,72 @@
+;;;;;:;;;;;;;;;;;;;;;;;;;
+;;; Haldis menu files ;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defun my-font-lock-restart ()
+ "Reload the syntax highlighting"
+ (interactive)
+ (setq font-lock-mode-major-mode nil)
+ (font-lock-fontify-buffer)
+ (message "hldsmode: Reloaded syntax highlighting!"))
+
+(defun my-restart-hlds-mode ()
+ (interactive)
+ (let ((lisp-mode-hook nil))
+ (normal-mode)
+ (message "hldsmode: Reloaded mode!")))
+
+(setq hlds-font-lock-keywords
+ (let* (
+ ;; define several category of keywords
+ (x-keywords '())
+ (x-types '("base"))
+ (x-constants '())
+ (x-events '())
+ (x-functions '("single_choice" "multi_choice"))
+
+ ;; generate regex string for each category of keywords
+ (x-keywords-regexp (regexp-opt x-keywords 'words))
+ (x-types-regexp (regexp-opt x-types 'words))
+ (x-constants-regexp (regexp-opt x-constants 'words))
+ (x-events-regexp (regexp-opt x-events 'words))
+ (x-functions-regexp (regexp-opt x-functions 'words))
+
+ ;(x-functions-regexp-final (concat "
\\|
" "\\|" x-functions-regexp))
+ (x-constants-regexp-final (concat "\\({[^{]+?}\\)" "\\|" x-constants-regexp))
+ (x-keywords-regexp-final (concat "\\(€.+\\)$" "\\|" x-keywords-regexp))
+ (x-events-regexp-final (concat "^\\([a-zA-Z0-9_]+?\\):" "\\|" x-events-regexp)))
+
+ `(
+ (,x-types-regexp . font-lock-type-face)
+ ;(,x-constants-regexp-final . font-lock-constant-face)
+ (,x-constants-regexp-final .(1 font-lock-constant-face))
+ (,x-events-regexp-final . (1 font-lock-builtin-face))
+ (,x-functions-regexp . font-lock-function-name-face)
+ (,x-keywords-regexp-final . (1 font-lock-keyword-face))
+ ;; note: order above matters, because once colored, that part won't change.
+ ;; in general, put longer words first
+ )))
+
+(defvar hlds-mode-syntax-table nil "Syntax table for `hlds-mode'.")
+
+(setq hlds-mode-syntax-table
+ (let ( (synTable (make-syntax-table)))
+ ;; hlds style comment: “== …”
+ (modify-syntax-entry ?# "<" synTable)
+ (modify-syntax-entry ?\n ">" synTable)
+ synTable))
+
+;;;###autoload
+(define-derived-mode hlds-mode fundamental-mode "hlds"
+ "Major mode for editing Haldis menu files."
+
+ ;; code for syntax highlighting
+ (setq font-lock-defaults '((hlds-font-lock-keywords)))
+
+ (set-syntax-table hlds-mode-syntax-table)
+ )
+
+
+
+;; add the mode to the `features' list
+(provide 'hlds-mode)