From 18d00dd62f71be36e0c19bfde25e7a31649ed3bf Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Sun, 19 Sep 2021 15:46:44 +0200 Subject: [PATCH] New major mode with font-locking for etc/AUTHORS * lisp/textmodes/etc-authors-mode.el: New file. * lisp/files.el (auto-mode-alist): Use 'etc-authors-mode' for the etc/AUTHORS file. --- lisp/files.el | 3 +- lisp/textmodes/etc-authors-mode.el | 99 ++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 lisp/textmodes/etc-authors-mode.el diff --git a/lisp/files.el b/lisp/files.el index b113ff32f2..171b69e01e 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -3006,7 +3006,8 @@ auto-mode-alist ("\\.xcf\\'" . image-mode) ("\\.xmp\\'" . image-mode) ("\\.xwd\\'" . image-mode) - ("\\.yuv\\'" . image-mode))) + ("\\.yuv\\'" . image-mode) + ("emacs.*/etc/AUTHORS\\'" . etc-authors-mode))) "Alist of file name patterns vs corresponding major mode functions. Each element looks like (REGEXP . FUNCTION) or (REGEXP FUNCTION NON-NIL). \(NON-NIL stands for anything that is not nil; the value does not matter.) diff --git a/lisp/textmodes/etc-authors-mode.el b/lisp/textmodes/etc-authors-mode.el new file mode 100644 index 0000000000..0ef84d3d65 --- /dev/null +++ b/lisp/textmodes/etc-authors-mode.el @@ -0,0 +1,99 @@ +;;; etc-authors-mode.el --- font-locking for etc/AUTHORS -*- lexical-binding: t; -*- + +;; Copyright (C) 2021 Free Software Foundation, Inc. + +;; Author: Stefan Kangas +;; Keywords: internal + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; Major mode to display the etc/AUTHORS file in the Emacs +;; distribution. Provides some basic font locking and not much else. + +;;; Code: + +(defgroup etc-authors-mode nil + "Display the \"etc/AUTHORS\" file from the Emacs distribution." + :version "28.1") + +(defface etc-authors-default '((t :inherit variable-pitch)) + "Default face used to display the \"etc/AUTHORS\" file. +See also `etc-authors-mode'." + :version "28.1") + +(defface etc-authors-author '((((class color) (min-colors 88) (background light)) + :foreground "midnight blue" + :weight bold :height 1.05 + :inherit variable-pitch) + (((class color) (min-colors 88) (background dark)) + :foreground "cyan" + :weight bold :height 1.05 + :inherit variable-pitch) + (((supports :weight bold) (supports :height 1.05)) + :weight bold :height 1.05 + :inherit variable-pitch) + (((supports :weight bold)) + :weight bold :inherit variable-pitch) + (t :inherit variable-pitch)) + "Face used for the author in the \"etc/AUTHORS\" file. +See also `etc-authors-mode'." + :version "28.1") + +(defface etc-authors-descriptor '((((class color) (min-colors 88) (background light)) + :foreground "sienna" :inherit variable-pitch) + (((class color) (min-colors 88) (background dark)) + :foreground "peru" :inherit variable-pitch) + (t :inherit variable-pitch)) + "Face used for the description text in the \"etc/AUTHORS\" file. +See also `etc-authors-mode'." + :version "28.1") + +(defface etc-authors-other-files '((t :inherit etc-authors-descriptor)) + "Face used for the \"other files\" text in the \"etc/AUTHORS\" file. +See also `etc-authors-mode'." + :version "28.1") + +(defvar etc-authors-mode-font-lock-keywords + `((,(rx bol (group (not (any blank "\n")) (+? (not (any ":" "\n")))) ":") + 1 'etc-authors-author) + (,(rx (or "wrote" + (seq (? "and ") (or "co-wrote" "changed")))) + 0 'etc-authors-descriptor) + (,(rx "and " (+ digit) " other files") + 0 'etc-authors-other-files) + (,(rx bol (not space) (+ not-newline) eol) + 0 'etc-authors-default))) + +(defun etc-authors-mode--hide-local-variables () + "Hide local variables in \"etc/AUTHORS\". Used by `etc-authors-mode'." + (narrow-to-region (point-min) + (save-excursion + (goto-char (point-min)) + (if (re-search-forward "^Local Variables:$" nil t) + (progn (forward-line -1) (point)) + (point-max))))) + +;;;###autoload +(define-derived-mode etc-authors-mode special-mode "Authors View" + "Major mode for viewing \"etc/AUTHORS\" from the Emacs distribution. +Provides some basic font locking and not much else." + (setq-local font-lock-defaults + '(etc-authors-mode-font-lock-keywords nil nil ((?_ . "w")))) + (setq font-lock-multiline nil) + (etc-authors-mode--hide-local-variables)) + +(provide 'etc-authors-mode) +;;; etc-authors-mode.el ends here -- 2.30.2