]> git.eshelyaron.com Git - emacs.git/commitdiff
Font-lock FDO desktop files correctly
authorMark Oteiza <mvoteiza@udel.edu>
Mon, 28 Aug 2017 02:22:29 +0000 (22:22 -0400)
committerMark Oteiza <mvoteiza@udel.edu>
Mon, 28 Aug 2017 02:40:52 +0000 (22:40 -0400)
Single and double quotes do not have a special meaning in
desktop files.
https://standards.freedesktop.org/desktop-entry-spec/latest/
* etc/NEWS: Mention new mode.
* lisp/files.el (auto-mode-alist): Split out an entry for handling
the .desktop extension with conf-desktop-mode.
* lisp/textmodes/conf-mode.el (conf-desktop-font-lock-keywords): New
variable with rules for booleans and format specifiers.
(conf-unix-mode): Remove desktop file entry example from docstring.
(conf-desktop-mode): New derived major mode.

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

index 6cd4bcac795df9b70a78ab54368a62fb576b852a..e8d6ea9c6dd282eee0dbe63a71a4d4f95f443e60 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1128,6 +1128,9 @@ 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 mode 'conf-desktop-mode' is a sub-mode of conf-unix-mode,
+specialized for editing freedesktop.org desktop entries.
+
 ** 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 872fc46e87ad2a322ab0fd05d3e6e2f1a2051362..b3eab29c53ad3296925eb08567a9a1c49f6599ce 100644 (file)
@@ -2611,11 +2611,12 @@ ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|CBR\\|7Z\\)\\'" . archive-mo
      ("/config\\.\\(?:bat\\|log\\)\\'" . fundamental-mode)
      ;; Windows candidates may be opened case sensitively on Unix
      ("\\.\\(?:[iI][nN][iI]\\|[lL][sS][tT]\\|[rR][eE][gG]\\|[sS][yY][sS]\\)\\'" . conf-mode)
-     ("\\.\\(?:desktop\\|la\\)\\'" . conf-unix-mode)
+     ("\\.la\\'" . conf-unix-mode)
      ("\\.ppd\\'" . conf-ppd-mode)
      ("java.+\\.conf\\'" . conf-javaprop-mode)
      ("\\.properties\\(?:\\.[a-zA-Z0-9._-]+\\)?\\'" . conf-javaprop-mode)
      ("\\.toml\\'" . conf-toml-mode)
+     ("\\.desktop\\'" . conf-desktop-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 b420aaa2467ad8a6c58ea91975b04ea0342351e5..d03ee5eb3141434521957b8b35f4b52c19d266b2 100644 (file)
@@ -262,6 +262,12 @@ This variable is best set in the file local variables, or through
     ("\\_<false\\|true\\_>" 0 'font-lock-keyword-face))
   "Keywords to highlight in Conf TOML mode.")
 
+(defvar conf-desktop-font-lock-keywords
+  `(,@conf-font-lock-keywords
+    ("\\_<false\\|true\\_>" 0 'font-lock-constant-face)
+    ("\\_<%[uUfFick%]\\_>" 0 'font-lock-constant-face))
+  "Keywords to highlight in Conf Desktop mode.")
+
 (defvar conf-assignment-sign ?=
   "Sign used for assignments (char or string).")
 
@@ -449,16 +455,7 @@ The optional arg FONT-LOCK is the value for FONT-LOCK-KEYWORDS."
 ;;;###autoload
 (define-derived-mode conf-unix-mode conf-mode "Conf[Unix]"
   "Conf Mode starter for Unix style Conf files.
-Comments start with `#'.
-For details see `conf-mode'.  Example:
-
-# Conf mode font-locks this right on Unix and with \\[conf-unix-mode]
-
-[Desktop Entry]
-        Encoding=UTF-8
-        Name=The GIMP
-        Name[ca]=El GIMP
-        Name[cs]=GIMP"
+Comments start with `#'.  For details see `conf-mode'."
   (conf-mode-initialize "#"))
 
 ;;;###autoload
@@ -677,6 +674,21 @@ value = \"some string\""
   (setq-local conf-assignment-column 0)
   (setq-local conf-assignment-sign ?=))
 
+;;;###autoload
+(define-derived-mode conf-desktop-mode conf-unix-mode "Conf[Desktop]"
+  "Conf Mode started for freedesktop.org Desktop files.
+Comments start with `#' and \"assignments\" are with `='.
+For details see `conf-mode'.
+
+# Conf mode font-locks this correctly with \\[conf-desktop-mode]
+       [Desktop Entry]
+       Name=GNU Image Manipulation Program
+       Name[oc]=Editor d'imatge GIMP
+       Exec=gimp-2.8 %U
+       Terminal=false"
+  (conf-mode-initialize "#" 'conf-desktop-font-lock-keywords)
+  (conf-quote-normal nil))
+
 (provide 'conf-mode)
 
 ;;; conf-mode.el ends here