]> git.eshelyaron.com Git - emacs.git/commitdiff
Add conf-toml-mode
authorTom Tromey <tom@tromey.com>
Wed, 23 Aug 2017 22:06:48 +0000 (16:06 -0600)
committerTom Tromey <tom@tromey.com>
Wed, 23 Aug 2017 22:06:48 +0000 (16:06 -0600)
* etc/NEWS: Mention conf-toml-mode.
* lisp/files.el (auto-mode-alist): Add entry for .toml.
* lisp/textmodes/conf-mode.el (conf-toml-mode-syntax-table)
(conf-toml-font-lock-keywords): New defvars.
(conf-toml-mode): New mode.

etc/NEWS
lisp/files.el
lisp/textmodes/conf-mode.el

index 09390333ae6f41697b52930f7747ed571fd067c8..a9e2f5ae3f1fde6b7857d537654e2289ee165eb8 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1115,6 +1115,9 @@ processes on exit.
 mode for *.html files.  This mode handles indentation,
 fontification, and commenting for embedded JavaScript and CSS.
 
+** New mode 'conf-toml-mode' is a sub-mode of conf-mode, specialized
+   for editing TOML files.
+
 ** New minor mode 'pixel-scroll-mode' provides smooth pixel-level scrolling.
 
 ** New major mode 'less-css-mode' (a minor variant of 'css-mode') for
index 0311cc6d210ff8529972f0beb770e53d51b22d14..bc347c1d7dfa787fcc7124a18a847d0ca5cdc259 100644 (file)
@@ -2653,6 +2653,7 @@ ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|CBR\\|7Z\\)\\'" . archive-mo
      ("\\.ppd\\'" . conf-ppd-mode)
      ("java.+\\.conf\\'" . conf-javaprop-mode)
      ("\\.properties\\(?:\\.[a-zA-Z0-9._-]+\\)?\\'" . conf-javaprop-mode)
+     ("\\.toml\\'" . conf-toml-mode)
      ("\\`/etc/\\(?:DIR_COLORS\\|ethers\\|.?fstab\\|.*hosts\\|lesskey\\|login\\.?de\\(?:fs\\|vperm\\)\\|magic\\|mtab\\|pam\\.d/.*\\|permissions\\(?:\\.d/.+\\)?\\|protocols\\|rpc\\|services\\)\\'" . conf-space-mode)
      ("\\`/etc/\\(?:acpid?/.+\\|aliases\\(?:\\.d/.+\\)?\\|default/.+\\|group-?\\|hosts\\..+\\|inittab\\|ksysguarddrc\\|opera6rc\\|passwd-?\\|shadow-?\\|sysconfig/.+\\)\\'" . conf-mode)
      ;; ChangeLog.old etc.  Other change-log-mode entries are above;
index 054d8dbb8b239ba9882b7f601b83467dbf4211fb..7bcc69572d2c7edfcffbc186e7f838a1b583d726 100644 (file)
@@ -175,6 +175,16 @@ not align (only setting space according to `conf-assignment-space')."
     table)
   "Syntax table in use in Xdefaults style `conf-mode' buffers.")
 
+(defvar conf-toml-mode-syntax-table
+  (let ((table (make-syntax-table conf-mode-syntax-table)))
+    (modify-syntax-entry ?\" "\"" table)
+    (modify-syntax-entry ?' "\"" table)
+    (modify-syntax-entry ?\\ "\\" table)
+    (modify-syntax-entry ?#  "<" table)
+    ;; override
+    (modify-syntax-entry ?\; "." table)
+    table)
+  "Syntax table in use in TOML style `conf-mode' buffers.")
 
 (defvar conf-font-lock-keywords
   '(;; [section] (do this first because it may look like a parameter)
@@ -242,6 +252,16 @@ This variable is best set in the file local variables, or through
     ("^[ \t]*\\([^:\n]+\\)[ \t\n]*{[^{}]*?$" 1 'font-lock-type-face prepend))
   "Keywords to highlight in Conf Colon mode.")
 
+(defvar conf-toml-font-lock-keywords
+  '(;; [section] (do this first because it may look like a parameter)
+    ("^[ \t]*\\[\\(.+\\)\\]" 1 'font-lock-type-face)
+    ;; var=val or var[index]=val
+    ("^[ \t]*\\(.+?\\)\\(?:\\[\\(.*?\\)\\]\\)?[ \t]*="
+     (1 'font-lock-variable-name-face)
+     (2 'font-lock-constant-face nil t))
+    ("\\_<false\\|true\\_>" 0 'font-lock-keyword-face))
+  "Keywords to highlight in Conf TOML mode.")
+
 (defvar conf-assignment-sign ?=
   "Sign used for assignments (char or string).")
 
@@ -617,6 +637,20 @@ For details see `conf-mode'.  Example:
 *foreground:                   black"
   (conf-mode-initialize "!"))
 
+;;;###autoload
+(define-derived-mode conf-toml-mode conf-mode "Conf[TOML]"
+  "Conf Mode starter for TOML files.
+Comments start with `#' and \"assignments\" are with `='.
+For details see `conf-mode'.  Example:
+
+# Conf mode font-locks this right with \\[conf-toml-mode]
+
+\[entry]
+value = \"some string\""
+  (conf-mode-initialize "#" 'conf-toml-font-lock-keywords)
+  (setq-local conf-assignment-column 0)
+  (setq-local conf-assignment-sign ?=))
+
 (provide 'conf-mode)
 
 ;;; conf-mode.el ends here