unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Kangas <stefan@marxist.se>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 50674@debbugs.gnu.org
Subject: bug#50674: Major mode for etc/AUTHORS with basic font-locking
Date: Sun, 19 Sep 2021 14:58:38 -0700	[thread overview]
Message-ID: <CADwFkmnqrpNbpLdnWXaj4aV+rSgF_1K9AxMw_KuYWZOm9i=cJQ@mail.gmail.com> (raw)
In-Reply-To: <83a6k84jo0.fsf@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 816 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

> Did you try these faces on TTY frames, in particular those with 8 or
> 16 colors?  I think those will need separate face definitions.

I've updated the face definitions to check for such capabilities, and
tested it in xterm (256 colors) and the Linux console (8 colors
according to `display-color-cells').  It looks good with my pair of
eyes, but I sometimes have a hard time differentiating between certain
colors.

If anyone feels that they are good with colors, feel free to suggest
something better.

I've attached a new patch.

> If we only intend this to be used for our etc/AUTHORS, then how about
> saying that explicitly in the other doc strings, instead of
> referencing etc-authors-mode?

Yes, that makes sense, changed in the attached.

Thanks for reviewing this.

[-- Attachment #2: 0001-New-major-mode-with-font-locking-for-etc-AUTHORS.patch --]
[-- Type: text/x-diff, Size: 5570 bytes --]

From 18d00dd62f71be36e0c19bfde25e7a31649ed3bf Mon Sep 17 00:00:00 2001
From: Stefan Kangas <stefan@marxist.se>
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 <stefan@marxist.se>
+;; 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 <https://www.gnu.org/licenses/>.
+
+;;; 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


  reply	other threads:[~2021-09-19 21:58 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-19 14:12 bug#50674: Major mode for etc/AUTHORS with basic font-locking Stefan Kangas
2021-09-19 15:19 ` Lars Ingebrigtsen
2021-09-19 16:25 ` Eli Zaretskii
2021-09-19 21:58   ` Stefan Kangas [this message]
2021-09-21 19:54     ` Stefan Kangas
2021-09-19 16:33 ` Juri Linkov
2021-09-19 17:38   ` Stefan Kangas
2021-09-20  6:41     ` Juri Linkov
2021-09-20  7:42       ` Stefan Kangas
2021-09-20  9:14         ` Stefan Kangas
2021-09-20 15:24           ` Juri Linkov
2021-09-21  6:12             ` Lars Ingebrigtsen
2021-09-21  6:25               ` Eli Zaretskii
2021-09-21  6:28                 ` Lars Ingebrigtsen
2021-09-21  7:57                   ` Stefan Kangas
2021-09-21  8:36                   ` Eli Zaretskii
2021-09-21  8:58                     ` Stefan Kangas
2021-09-21  9:24                       ` Eli Zaretskii
2021-09-21 11:18                         ` Stefan Kangas
2021-09-21 11:25                           ` Eli Zaretskii
2021-09-21  8:28               ` Stefan Kangas
2021-09-21 16:51                 ` Lars Ingebrigtsen
2021-09-21 17:56                 ` Lars Ingebrigtsen
2021-09-21 18:33                   ` Stefan Kangas
2021-09-21 18:41                     ` Juri Linkov
2021-09-21 18:56                       ` Eli Zaretskii
2021-09-21 19:22                       ` Stefan Kangas
2021-09-21 17:28 ` Juri Linkov
2021-09-21 18:33   ` Stefan Kangas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CADwFkmnqrpNbpLdnWXaj4aV+rSgF_1K9AxMw_KuYWZOm9i=cJQ@mail.gmail.com' \
    --to=stefan@marxist.se \
    --cc=50674@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).