summaryrefslogtreecommitdiff
path: root/tw/home/files/emacs-packages/environmentd-mode.el
blob: 4bb8812e95f80a284fdab6ed8b13ce57d7fccc61 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
;;; environmentd-mode.el --- Major mode for environment.d(5) files.

;;; Commentary:

;; This major mode font-locks files including /etc/environment and
;; ~/.config/environment.d/*.conf. Their format is specified by the
;; environment.d(5) man page.

;;; Code:

(defconst environmentd-mode/font-lock-defaults
  '((("^[[:blank:]]+[^[:blank:]]+" . font-lock-warning-face)   ; stray leading whitespace
     ("^#+[[:blank:]]*" . font-lock-comment-delimiter-face)
     ("^#+[[:blank:]]*\\(.*\\)$" 1 font-lock-comment-face)
     ("\\\\[$\\]" . font-lock-string-face)                       ; escaped $ \
     ("^\\([A-Za-z_][A-Za-z0-9_]*\\)\\(=\\)"
      (1 font-lock-variable-name-face)
      (2 font-lock-keyword-face))
     ("\\(\\${\\)\\([A-Za-z_][A-Za-z0-9_]*\\)\\(:[+-]\\)[^}]*\\(}\\)"
      (1 font-lock-keyword-face)
      (2 font-lock-variable-name-face)
      (3 font-lock-keyword-face)
      (4 font-lock-keyword-face))                  ; ${X:-default}-variable references
     ("\\(\\${\\)\\([A-Za-z_][A-Za-z0-9_]*\\)\\(}\\)"
      (1 font-lock-keyword-face)
      (2 font-lock-variable-name-face)
      (3 font-lock-keyword-face))                  ; ${X}-variable references
     ("\\(\\$\\)\\([A-Za-z_][A-Za-z0-9_]*\\)"
      (1 font-lock-keyword-face)
      (2 font-lock-variable-name-face)))           ; $X-variable references
    t nil ((?\' . "w") (?\" . "w")))
  "Font lock settings for Environment.d mode. See `font-lock-defaults' for documentation.")

(define-derived-mode environmentd-mode prog-mode "Environment.d"
  "Environment.d mode is used for environment.d(5) files."
  (setq-local comment-start "#"
              comment-start-skip "#"
              comment-end ""
              font-lock-defaults environmentd-mode/font-lock-defaults))

(add-to-list 'auto-mode-alist
             '("/environment\\.d/[^/]+\\.conf\\'\\|\\`/etc/environment\\'"
               . environmentd-mode))

(provide 'environmentd-mode)
;;; environmentd-mode.el ends here