From fb1c2bd328b14d837e01ba07782125d656d78490 Mon Sep 17 00:00:00 2001 From: Konstantin Kharlamov Date: Thu, 20 Mar 2025 19:17:32 +0300 Subject: [PATCH] Add major mode for highlighting npmrc files (Bug#77138) * etc/NEWS: mention the new mode. * lisp/textmodes/conf-mode.el (conf-npmrc-mode-syntax-table): New variable. * lisp/textmodes/conf-mode.el (conf-npmrc-mode): New major mode derived from conf-mode for highlighting .npmrc files. * lisp/files.el (auto-mode-alist): Associate the new mode with .npmrc files. (cherry picked from commit 891f51fe118597ffe58d5d817fff693db3188639) --- lisp/files.el | 2 ++ lisp/textmodes/conf-mode.el | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/lisp/files.el b/lisp/files.el index 97d6280b5c6..d65937ee03f 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -3252,6 +3252,8 @@ ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|CBR\\|7Z\\|SQUASHFS\\)\\'" . ("\\.properties\\(?:\\.[a-zA-Z0-9._-]+\\)?\\'" . conf-javaprop-mode) ("\\.toml\\'" . conf-toml-mode) ("\\.desktop\\'" . conf-desktop-mode) + ;; Dot is excluded from npmrc, because global configs may lack it. + ("npmrc\\'" . conf-npmrc-mode) ("/\\.redshift\\.conf\\'" . conf-windows-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) diff --git a/lisp/textmodes/conf-mode.el b/lisp/textmodes/conf-mode.el index 6540cb0813c..246761c332e 100644 --- a/lisp/textmodes/conf-mode.el +++ b/lisp/textmodes/conf-mode.el @@ -136,6 +136,13 @@ not align (only setting space according to `conf-assignment-space')." table) "Syntax table in use in Unix style `conf-mode' buffers.") +(defvar conf-npmrc-mode-syntax-table + (let ((table (make-syntax-table conf-mode-syntax-table))) + (modify-syntax-entry ?\; "<" table) + (modify-syntax-entry ?# "<" table) + table) + "Syntax table in use in npmrc `conf-mode' buffers.") + (defvar conf-javaprop-mode-syntax-table (make-syntax-table conf-unix-mode-syntax-table) "Syntax table in use in Java properties buffers.") @@ -664,6 +671,13 @@ For details see `conf-mode'. (conf-mode-initialize "#" 'conf-desktop-font-lock-keywords) (conf-quote-normal nil)) +;;;###autoload +(define-derived-mode conf-npmrc-mode conf-mode "Conf[npmrc]" + :syntax-table conf-npmrc-mode-syntax-table + "Conf Mode starter for .npmrc files. +Comments start with `#' and `;'. For details see `conf-mode'." + (conf-mode-initialize "#")) + (provide 'conf-mode) ;;; conf-mode.el ends here -- 2.39.5