From: Eric Abrahamsen <eric@ericabrahamsen.net>
To: 33263@debbugs.gnu.org
Subject: bug#33263: 27.0.50; Tidying up Gnus modes
Date: Sun, 04 Nov 2018 18:53:41 -0800 [thread overview]
Message-ID: <877ehs1bgq.fsf@ericabrahamsen.net> (raw)
[-- Attachment #1: Type: text/plain, Size: 940 bytes --]
The attached patch does a couple of things to clean up Gnus's various
major modes:
- Creates a do-nothing `gnus-mode', derived from `special-mode', to
serve as parent mode for all the other major modes. This isn't so
important, but sometimes it would be nice to do (derived-mode-p
'gnus-mode).
- Derives everything from `gnus-mode', and turns a couple of modes from
functions that manually set up modes into proper calls to
`define-derived-mode'.
- Removes code like "(setq buffer-read-only t)", as that's automatically
done by `special-mode'.
- Where appropriate, deletes custom definitions for gnus-*-mode-hook, as
these hooks are already automatically created by the define-mode
calls. (Maybe this removal isn't worth doing?)
This patch probably needs more testing, but I'm floating it first for
any comments.
Eric
In GNU Emacs 27.0.50 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.1)
of 2018-10-31 built on slip
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Provide-new-gnus-mode-derive-all-gnus-major-modes-fr.patch --]
[-- Type: text/x-patch, Size: 14401 bytes --]
From 395babb983e466d21928433c18faddedf3d88e8f Mon Sep 17 00:00:00 2001
From: Eric Abrahamsen <eric@ericabrahamsen.net>
Date: Mon, 25 Jun 2018 17:40:19 -0700
Subject: [PATCH] Provide new gnus-mode, derive all gnus major modes from this
* lisp/gnus/gnus.el (gnus-mode): New do-nothing major mode, derived
from special mode.
* lisp/gnus/gnus-sum.el (gnus-summary-mode): Change from a function to
a major mode, derive from gnus-mode.
(gnus-summary-setup-buffer): Change call a bit -- can no longer pass
an argument to the mode function.
* lisp/gnus/gnus-srvr.el (gnus-browse-mode): Derive from gnus-mode.
(gnus-server-setup-buffer): Remove unnecessary function.
(gnus-enter-server-buffer): Call gnus-server-mode here, and call it
whether the server buffer already existed or not.
(gnus-server-mode): Change from a function to a major mode.
(gnus-server-mode-hook): Delete custom option, this is automatically
created.
* lisp/gnus/gnus-salt.el (gnus-tree-mode): Derive from gnus-mode.
(gnus-tree-mode-hook): Delete custom option, this is automatically
created.
* lisp/gnus/gnus-kill.el (gnus-kill-file-mode-hook): Delete custom
option.
* lisp/gnus/gnus-group.el (gnus-group-mode):
* lisp/gnus/gnus-art.el (gnus-article-mode):
* lisp/gnus/gnus-agent.el (gnus-category-mode): Derive from gnus-mode.
(gnus-category-mode-hook): Delete custom option.
---
lisp/gnus/gnus-agent.el | 10 ++-------
lisp/gnus/gnus-art.el | 8 ++-----
lisp/gnus/gnus-group.el | 8 ++-----
lisp/gnus/gnus-kill.el | 5 -----
lisp/gnus/gnus-salt.el | 9 +-------
lisp/gnus/gnus-srvr.el | 46 +++++++++--------------------------------
lisp/gnus/gnus-sum.el | 20 ++++--------------
lisp/gnus/gnus.el | 6 ++++++
8 files changed, 27 insertions(+), 85 deletions(-)
diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el
index 18e6174fa0..93a675584f 100644
--- a/lisp/gnus/gnus-agent.el
+++ b/lisp/gnus/gnus-agent.el
@@ -2575,9 +2575,6 @@ gnus-agent-fetch-group-1
;;; Agent Category Mode
;;;
-(defvar gnus-category-mode-hook nil
- "Hook run in `gnus-category-mode' buffers.")
-
(defvar gnus-category-line-format " %(%20c%): %g\n"
"Format of category lines.
@@ -2613,7 +2610,6 @@ gnus-category-line-format-spec
(defvar gnus-category-mode-line-format-spec nil)
(defvar gnus-category-mode-map nil)
-(put 'gnus-category-mode 'mode-class 'special)
(unless gnus-category-mode-map
(setq gnus-category-mode-map (make-sparse-keymap))
@@ -2655,9 +2651,8 @@ gnus-category-make-menu-bar
(gnus-run-hooks 'gnus-category-menu-hook)))
-(define-derived-mode gnus-category-mode fundamental-mode "Category"
+(define-derived-mode gnus-category-mode gnus-mode "Category"
"Major mode for listing and editing agent categories.
-
All normal editing commands are switched off.
\\<gnus-category-mode-map>
For more in-depth information on this mode, read the manual
@@ -2672,8 +2667,7 @@ gnus-category-mode
(gnus-set-default-directory)
(setq mode-line-process nil)
(buffer-disable-undo)
- (setq truncate-lines t)
- (setq buffer-read-only t))
+ (setq truncate-lines t))
(defalias 'gnus-category-position-point 'gnus-goto-colon)
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index f28e6db3c7..c78bb3325f 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -4388,8 +4388,6 @@ article-verify-cancel-lock
;;; Gnus article mode
;;;
-(put 'gnus-article-mode 'mode-class 'special)
-
(set-keymap-parent gnus-article-mode-map widget-keymap)
(gnus-define-keys gnus-article-mode-map
@@ -4467,9 +4465,8 @@ gnus-article-make-menu-bar
(defvar bookmark-make-record-function)
(defvar shr-put-image-function)
-(define-derived-mode gnus-article-mode fundamental-mode "Article"
+(define-derived-mode gnus-article-mode gnus-mode "Article"
"Major mode for displaying an article.
-
All normal editing commands are switched off.
The following commands are available in addition to all summary mode
@@ -4510,8 +4507,7 @@ gnus-article-mode
(setq cursor-in-non-selected-windows nil))
(gnus-set-default-directory)
(buffer-disable-undo)
- (setq buffer-read-only t
- show-trailing-whitespace nil)
+ (setq show-trailing-whitespace nil)
(mm-enable-multibyte))
(defun gnus-article-setup-buffer ()
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index 6af27afbfa..d526894b3a 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -567,8 +567,6 @@ gnus-group-list-option
;;; Gnus group mode
;;;
-(put 'gnus-group-mode 'mode-class 'special)
-
(gnus-define-keys gnus-group-mode-map
" " gnus-group-read-group
"=" gnus-group-select-group
@@ -1106,9 +1104,8 @@ gnus-group-make-tool-bar
(set (make-local-variable 'tool-bar-map) map))))
gnus-group-tool-bar-map)
-(define-derived-mode gnus-group-mode fundamental-mode "Group"
+(define-derived-mode gnus-group-mode gnus-mode "Group"
"Major mode for reading news.
-
All normal editing commands are switched off.
\\<gnus-group-mode-map>
The group buffer lists (some of) the groups available. For instance,
@@ -1131,8 +1128,7 @@ gnus-group-mode
(setq mode-line-process nil)
(buffer-disable-undo)
(setq truncate-lines t)
- (setq buffer-read-only t
- show-trailing-whitespace nil)
+ (setq show-trailing-whitespace nil)
(gnus-set-default-directory)
(gnus-update-format-specifications nil 'group 'group-mode)
(gnus-update-group-mark-positions)
diff --git a/lisp/gnus/gnus-kill.el b/lisp/gnus/gnus-kill.el
index 60732c11d5..e65ff51ce7 100644
--- a/lisp/gnus/gnus-kill.el
+++ b/lisp/gnus/gnus-kill.el
@@ -29,11 +29,6 @@
(require 'gnus-art)
(require 'gnus-range)
-(defcustom gnus-kill-file-mode-hook nil
- "Hook for Gnus kill file mode."
- :group 'gnus-score-kill
- :type 'hook)
-
(defcustom gnus-kill-expiry-days 7
"Number of days before expiring unused kill file entries."
:group 'gnus-score-kill
diff --git a/lisp/gnus/gnus-salt.el b/lisp/gnus/gnus-salt.el
index aff841760a..0504465de3 100644
--- a/lisp/gnus/gnus-salt.el
+++ b/lisp/gnus/gnus-salt.el
@@ -396,11 +396,6 @@ gnus-generate-tree-function
(function :tag "Other" nil))
:group 'gnus-summary-tree)
-(defcustom gnus-tree-mode-hook nil
- "Hook run in tree mode buffers."
- :type 'hook
- :group 'gnus-summary-tree)
-
;;; Internal variables.
(defvar gnus-tmp-name)
@@ -445,8 +440,6 @@ gnus-tree-mode-map
'undefined 'gnus-tree-read-summary-keys map)
map))
-(put 'gnus-tree-mode 'mode-class 'special)
-
(defun gnus-tree-make-menu-bar ()
(unless (boundp 'gnus-tree-menu)
(easy-menu-define
@@ -454,7 +447,7 @@ gnus-tree-make-menu-bar
'("Tree"
["Select article" gnus-tree-select-article t]))))
-(define-derived-mode gnus-tree-mode fundamental-mode "Tree"
+(define-derived-mode gnus-tree-mode gnus-mode "Tree"
"Major mode for displaying thread trees."
(gnus-set-format 'tree-mode)
(gnus-set-format 'tree t)
diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el
index dfca5e9d2c..03718fd104 100644
--- a/lisp/gnus/gnus-srvr.el
+++ b/lisp/gnus/gnus-srvr.el
@@ -36,11 +36,6 @@
(autoload 'gnus-group-make-nnir-group "nnir")
-(defcustom gnus-server-mode-hook nil
- "Hook run in `gnus-server-mode' buffers."
- :group 'gnus-server
- :type 'hook)
-
(defcustom gnus-server-exit-hook nil
"Hook run when exiting the server buffer."
:group 'gnus-server
@@ -108,7 +103,7 @@ gnus-server-line-format-spec
(defvar gnus-server-mode-line-format-spec nil)
(defvar gnus-server-killed-servers nil)
-(defvar gnus-server-mode-map)
+(defvar gnus-server-mode-map nil)
(defcustom gnus-server-menu-hook nil
"Hook run after the creation of the server mode menu."
@@ -150,11 +145,8 @@ gnus-server-make-menu-bar
(gnus-run-hooks 'gnus-server-menu-hook)))
-(defvar gnus-server-mode-map nil)
-(put 'gnus-server-mode 'mode-class 'special)
-
(unless gnus-server-mode-map
- (setq gnus-server-mode-map (make-sparse-keymap))
+ (setq gnus-server-mode-map (make-keymap))
(suppress-keymap gnus-server-mode-map)
(gnus-define-keys gnus-server-mode-map
@@ -253,9 +245,8 @@ gnus-server-font-lock-keywords
("(\\(offline\\))" 1 'gnus-server-offline)
("(\\(denied\\))" 1 'gnus-server-denied)))
-(defun gnus-server-mode ()
+(define-derived-mode gnus-server-mode gnus-mode "Server"
"Major mode for listing and editing servers.
-
All normal editing commands are switched off.
\\<gnus-server-mode-map>
For more in-depth information on this mode, read the manual
@@ -264,23 +255,16 @@ gnus-server-mode
The following commands are available:
\\{gnus-server-mode-map}"
- ;; FIXME: Use define-derived-mode.
- (interactive)
(when (gnus-visual-p 'server-menu 'menu)
(gnus-server-make-menu-bar))
- (kill-all-local-variables)
(gnus-simplify-mode-line)
- (setq major-mode 'gnus-server-mode)
- (setq mode-name "Server")
(gnus-set-default-directory)
(setq mode-line-process nil)
- (use-local-map gnus-server-mode-map)
(buffer-disable-undo)
(setq truncate-lines t)
- (setq buffer-read-only t)
(set (make-local-variable 'font-lock-defaults)
- '(gnus-server-font-lock-keywords t))
- (gnus-run-mode-hooks 'gnus-server-mode-hook))
+ '(gnus-server-font-lock-keywords t)))
+
(defun gnus-server-insert-server-line (name method)
(let* ((gnus-tmp-name name)
@@ -320,21 +304,15 @@ gnus-server-insert-server-line
(defun gnus-enter-server-buffer ()
"Set up the server buffer."
- (gnus-server-setup-buffer)
(gnus-configure-windows 'server)
;; Usually `gnus-configure-windows' will finish with the
;; `gnus-server-buffer' selected as the current buffer, but not always (I
;; bumped into it when starting from a dedicated *Group* frame, and
;; gnus-configure-windows opened *Server* into its own dedicated frame).
(with-current-buffer (get-buffer gnus-server-buffer)
+ (gnus-server-mode)
(gnus-server-prepare)))
-(defun gnus-server-setup-buffer ()
- "Initialize the server buffer."
- (unless (get-buffer gnus-server-buffer)
- (with-current-buffer (gnus-get-buffer-create gnus-server-buffer)
- (gnus-server-mode))))
-
(defun gnus-server-prepare ()
(gnus-set-format 'server-mode)
(gnus-set-format 'server t)
@@ -717,12 +695,10 @@ gnus-browse-subscribe-newsgroup-method
function
(repeat function)))
-(defvar gnus-browse-mode-hook nil)
-(defvar gnus-browse-mode-map nil)
-(put 'gnus-browse-mode 'mode-class 'special)
+(defvar gnus-browse-mode-map (make-keymap))
(unless gnus-browse-mode-map
- (setq gnus-browse-mode-map (make-keymap))
+ (defvar gnus-browse-mode-map (make-keymap))
(suppress-keymap gnus-browse-mode-map)
(gnus-define-keys
@@ -897,9 +873,8 @@ gnus-browse-foreign-server
(gnus-message 5 "Connecting to %s...done" (nth 1 method))
t))))
-(define-derived-mode gnus-browse-mode fundamental-mode "Browse Server"
+(define-derived-mode gnus-browse-mode gnus-mode "Browse Server"
"Major mode for browsing a foreign server.
-
All normal editing commands are switched off.
\\<gnus-browse-mode-map>
@@ -918,8 +893,7 @@ gnus-browse-mode
(setq mode-line-process nil)
(buffer-disable-undo)
(setq truncate-lines t)
- (gnus-set-default-directory)
- (setq buffer-read-only t))
+ (gnus-set-default-directory))
(defun gnus-browse-read-group (&optional no-article number)
"Enter the group at the current line.
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index f9fae3792b..67abf6d640 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -1842,8 +1842,6 @@ gnus-summary-bubble-group
;;; Gnus summary mode
;;;
-(put 'gnus-summary-mode 'mode-class 'special)
-
(defvar gnus-article-commands-menu)
;; Non-orthogonal keys
@@ -3052,10 +3050,8 @@ bookmark-make-record-function
\f
(defvar bidi-paragraph-direction)
-(defun gnus-summary-mode (&optional group)
+(define-derived-mode gnus-summary-mode gnus-mode "Summary"
"Major mode for reading articles.
-
-All normal editing commands are switched off.
\\<gnus-summary-mode-map>
Each line in this buffer represents one article. To read an
article, you can, for instance, type `\\[gnus-summary-next-page]'. To move forwards
@@ -3072,24 +3068,16 @@ gnus-summary-mode
The following commands are available:
\\{gnus-summary-mode-map}"
- ;; FIXME: Use define-derived-mode.
- (interactive)
- (kill-all-local-variables)
(let ((gnus-summary-local-variables gnus-newsgroup-variables))
(gnus-summary-make-local-variables))
(gnus-summary-make-local-variables)
- (setq gnus-newsgroup-name group)
(when (gnus-visual-p 'summary-menu 'menu)
(gnus-summary-make-menu-bar)
(gnus-summary-make-tool-bar))
(gnus-make-thread-indent-array)
(gnus-simplify-mode-line)
- (setq major-mode 'gnus-summary-mode)
- (setq mode-name "Summary")
- (use-local-map gnus-summary-mode-map)
(buffer-disable-undo)
- (setq buffer-read-only t
- show-trailing-whitespace nil
+ (setq show-trailing-whitespace nil
truncate-lines t
bidi-paragraph-direction 'left-to-right)
(add-to-invisibility-spec '(gnus-sum . t))
@@ -3101,7 +3089,6 @@ gnus-summary-mode
(make-local-variable 'gnus-summary-dummy-line-format-spec)
(make-local-variable 'gnus-summary-mark-positions)
(add-hook 'pre-command-hook 'gnus-set-global-variables nil t)
- (gnus-run-mode-hooks 'gnus-summary-mode-hook)
(turn-on-gnus-mailing-list-mode)
(mm-enable-multibyte)
(set (make-local-variable 'bookmark-make-record-function)
@@ -3493,7 +3480,8 @@ gnus-summary-setup-buffer
(not gnus-newsgroup-prepared))
(set-buffer (gnus-get-buffer-create buffer))
(setq gnus-summary-buffer (current-buffer))
- (gnus-summary-mode group)
+ (setq gnus-newsgroup-name group)
+ (gnus-summary-mode)
(when (gnus-group-quit-config group)
(set (make-local-variable 'gnus-single-article-buffer) nil))
(make-local-variable 'gnus-article-buffer)
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index 2786323f67..6c59b13574 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -637,6 +637,12 @@ gnus-summary-low-read
"Face used for low interest read articles."
:group 'gnus-summary)
+;;; Base gnus-mode
+
+(define-derived-mode gnus-mode special-mode nil
+ "Base mode from which all other gnus modes derive.
+This does nothing but derive from `special-mode', and should not
+be used directly.")
;;;
;;; Gnus buffers
--
2.19.1
next reply other threads:[~2018-11-05 2:53 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-05 2:53 Eric Abrahamsen [this message]
2018-11-05 14:14 ` bug#33263: 27.0.50; Tidying up Gnus modes Noam Postavsky
2018-11-05 17:51 ` Eric Abrahamsen
2018-11-06 13:27 ` Noam Postavsky
2018-11-06 16:21 ` Eric Abrahamsen
2018-11-06 16:28 ` Noam Postavsky
2018-11-06 17:37 ` Eric Abrahamsen
2018-11-10 4:01 ` bug#33263: 27.0.50; Tidying up Gnus modes, [PATCH] Provide new gnus-mode, derive all gnus major modes from this Noam Postavsky
2018-11-10 4:55 ` Eric Abrahamsen
2018-11-10 20:18 ` Eric Abrahamsen
2018-11-23 17:45 ` bug#33263: 27.0.50; Tidying up Gnus modes Eric Abrahamsen
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=877ehs1bgq.fsf@ericabrahamsen.net \
--to=eric@ericabrahamsen.net \
--cc=33263@debbugs.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).