aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Oteiza2017-08-27 22:22:29 -0400
committerMark Oteiza2017-08-27 22:40:52 -0400
commit043a84702f3002d711784e5fe97c9ea8690b4cfa (patch)
tree56fb30aa4fe9d1eed4c9e8af5f159a8e81718cac
parent9e79a31c09d673019be2a2c78bf8b7db89351819 (diff)
downloademacs-043a84702f3002d711784e5fe97c9ea8690b4cfa.tar.gz
emacs-043a84702f3002d711784e5fe97c9ea8690b4cfa.zip
Font-lock FDO desktop files correctly
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.
-rw-r--r--etc/NEWS3
-rw-r--r--lisp/files.el3
-rw-r--r--lisp/textmodes/conf-mode.el32
3 files changed, 27 insertions, 11 deletions
diff --git a/etc/NEWS b/etc/NEWS
index 6cd4bcac795..e8d6ea9c6dd 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1128,6 +1128,9 @@ fontification, and commenting for embedded JavaScript and CSS.
1128** New mode 'conf-toml-mode' is a sub-mode of conf-mode, specialized 1128** New mode 'conf-toml-mode' is a sub-mode of conf-mode, specialized
1129 for editing TOML files. 1129 for editing TOML files.
1130 1130
1131** New mode 'conf-desktop-mode' is a sub-mode of conf-unix-mode,
1132specialized for editing freedesktop.org desktop entries.
1133
1131** New minor mode 'pixel-scroll-mode' provides smooth pixel-level scrolling. 1134** New minor mode 'pixel-scroll-mode' provides smooth pixel-level scrolling.
1132 1135
1133** New major mode 'less-css-mode' (a minor variant of 'css-mode') for 1136** New major mode 'less-css-mode' (a minor variant of 'css-mode') for
diff --git a/lisp/files.el b/lisp/files.el
index 872fc46e87a..b3eab29c53a 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -2611,11 +2611,12 @@ ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|CBR\\|7Z\\)\\'" . archive-mo
2611 ("/config\\.\\(?:bat\\|log\\)\\'" . fundamental-mode) 2611 ("/config\\.\\(?:bat\\|log\\)\\'" . fundamental-mode)
2612 ;; Windows candidates may be opened case sensitively on Unix 2612 ;; Windows candidates may be opened case sensitively on Unix
2613 ("\\.\\(?:[iI][nN][iI]\\|[lL][sS][tT]\\|[rR][eE][gG]\\|[sS][yY][sS]\\)\\'" . conf-mode) 2613 ("\\.\\(?:[iI][nN][iI]\\|[lL][sS][tT]\\|[rR][eE][gG]\\|[sS][yY][sS]\\)\\'" . conf-mode)
2614 ("\\.\\(?:desktop\\|la\\)\\'" . conf-unix-mode) 2614 ("\\.la\\'" . conf-unix-mode)
2615 ("\\.ppd\\'" . conf-ppd-mode) 2615 ("\\.ppd\\'" . conf-ppd-mode)
2616 ("java.+\\.conf\\'" . conf-javaprop-mode) 2616 ("java.+\\.conf\\'" . conf-javaprop-mode)
2617 ("\\.properties\\(?:\\.[a-zA-Z0-9._-]+\\)?\\'" . conf-javaprop-mode) 2617 ("\\.properties\\(?:\\.[a-zA-Z0-9._-]+\\)?\\'" . conf-javaprop-mode)
2618 ("\\.toml\\'" . conf-toml-mode) 2618 ("\\.toml\\'" . conf-toml-mode)
2619 ("\\.desktop\\'" . conf-desktop-mode)
2619 ("\\`/etc/\\(?:DIR_COLORS\\|ethers\\|.?fstab\\|.*hosts\\|lesskey\\|login\\.?de\\(?:fs\\|vperm\\)\\|magic\\|mtab\\|pam\\.d/.*\\|permissions\\(?:\\.d/.+\\)?\\|protocols\\|rpc\\|services\\)\\'" . conf-space-mode) 2620 ("\\`/etc/\\(?:DIR_COLORS\\|ethers\\|.?fstab\\|.*hosts\\|lesskey\\|login\\.?de\\(?:fs\\|vperm\\)\\|magic\\|mtab\\|pam\\.d/.*\\|permissions\\(?:\\.d/.+\\)?\\|protocols\\|rpc\\|services\\)\\'" . conf-space-mode)
2620 ("\\`/etc/\\(?:acpid?/.+\\|aliases\\(?:\\.d/.+\\)?\\|default/.+\\|group-?\\|hosts\\..+\\|inittab\\|ksysguarddrc\\|opera6rc\\|passwd-?\\|shadow-?\\|sysconfig/.+\\)\\'" . conf-mode) 2621 ("\\`/etc/\\(?:acpid?/.+\\|aliases\\(?:\\.d/.+\\)?\\|default/.+\\|group-?\\|hosts\\..+\\|inittab\\|ksysguarddrc\\|opera6rc\\|passwd-?\\|shadow-?\\|sysconfig/.+\\)\\'" . conf-mode)
2621 ;; ChangeLog.old etc. Other change-log-mode entries are above; 2622 ;; ChangeLog.old etc. Other change-log-mode entries are above;
diff --git a/lisp/textmodes/conf-mode.el b/lisp/textmodes/conf-mode.el
index b420aaa2467..d03ee5eb314 100644
--- a/lisp/textmodes/conf-mode.el
+++ b/lisp/textmodes/conf-mode.el
@@ -262,6 +262,12 @@ This variable is best set in the file local variables, or through
262 ("\\_<false\\|true\\_>" 0 'font-lock-keyword-face)) 262 ("\\_<false\\|true\\_>" 0 'font-lock-keyword-face))
263 "Keywords to highlight in Conf TOML mode.") 263 "Keywords to highlight in Conf TOML mode.")
264 264
265(defvar conf-desktop-font-lock-keywords
266 `(,@conf-font-lock-keywords
267 ("\\_<false\\|true\\_>" 0 'font-lock-constant-face)
268 ("\\_<%[uUfFick%]\\_>" 0 'font-lock-constant-face))
269 "Keywords to highlight in Conf Desktop mode.")
270
265(defvar conf-assignment-sign ?= 271(defvar conf-assignment-sign ?=
266 "Sign used for assignments (char or string).") 272 "Sign used for assignments (char or string).")
267 273
@@ -449,16 +455,7 @@ The optional arg FONT-LOCK is the value for FONT-LOCK-KEYWORDS."
449;;;###autoload 455;;;###autoload
450(define-derived-mode conf-unix-mode conf-mode "Conf[Unix]" 456(define-derived-mode conf-unix-mode conf-mode "Conf[Unix]"
451 "Conf Mode starter for Unix style Conf files. 457 "Conf Mode starter for Unix style Conf files.
452Comments start with `#'. 458Comments start with `#'. For details see `conf-mode'."
453For details see `conf-mode'. Example:
454
455# Conf mode font-locks this right on Unix and with \\[conf-unix-mode]
456
457[Desktop Entry]
458 Encoding=UTF-8
459 Name=The GIMP
460 Name[ca]=El GIMP
461 Name[cs]=GIMP"
462 (conf-mode-initialize "#")) 459 (conf-mode-initialize "#"))
463 460
464;;;###autoload 461;;;###autoload
@@ -677,6 +674,21 @@ value = \"some string\""
677 (setq-local conf-assignment-column 0) 674 (setq-local conf-assignment-column 0)
678 (setq-local conf-assignment-sign ?=)) 675 (setq-local conf-assignment-sign ?=))
679 676
677;;;###autoload
678(define-derived-mode conf-desktop-mode conf-unix-mode "Conf[Desktop]"
679 "Conf Mode started for freedesktop.org Desktop files.
680Comments start with `#' and \"assignments\" are with `='.
681For details see `conf-mode'.
682
683# Conf mode font-locks this correctly with \\[conf-desktop-mode]
684 [Desktop Entry]
685 Name=GNU Image Manipulation Program
686 Name[oc]=Editor d'imatge GIMP
687 Exec=gimp-2.8 %U
688 Terminal=false"
689 (conf-mode-initialize "#" 'conf-desktop-font-lock-keywords)
690 (conf-quote-normal nil))
691
680(provide 'conf-mode) 692(provide 'conf-mode)
681 693
682;;; conf-mode.el ends here 694;;; conf-mode.el ends here