From unknown Wed Sep 10 06:17:24 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#33263 <33263@debbugs.gnu.org> To: bug#33263 <33263@debbugs.gnu.org> Subject: Status: 27.0.50; Tidying up Gnus modes Reply-To: bug#33263 <33263@debbugs.gnu.org> Date: Wed, 10 Sep 2025 13:17:24 +0000 retitle 33263 27.0.50; Tidying up Gnus modes reassign 33263 emacs submitter 33263 Eric Abrahamsen severity 33263 wishlist thanks From debbugs-submit-bounces@debbugs.gnu.org Sun Nov 04 21:54:08 2018 Received: (at submit) by debbugs.gnu.org; 5 Nov 2018 02:54:08 +0000 Received: from localhost ([127.0.0.1]:34467 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gJV1j-00005Y-Og for submit@debbugs.gnu.org; Sun, 04 Nov 2018 21:54:08 -0500 Received: from eggs.gnu.org ([208.118.235.92]:56247) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gJV1h-00004t-Ad for submit@debbugs.gnu.org; Sun, 04 Nov 2018 21:54:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJV1Z-0007av-W3 for submit@debbugs.gnu.org; Sun, 04 Nov 2018 21:53:59 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50 autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:34573) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gJV1Z-0007ZG-Qj for submit@debbugs.gnu.org; Sun, 04 Nov 2018 21:53:57 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37613) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJV1X-0006os-TP for bug-gnu-emacs@gnu.org; Sun, 04 Nov 2018 21:53:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJV1U-0007My-E4 for bug-gnu-emacs@gnu.org; Sun, 04 Nov 2018 21:53:55 -0500 Received: from mail.ericabrahamsen.net ([50.56.99.223]:51399) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gJV1U-000776-4J for bug-gnu-emacs@gnu.org; Sun, 04 Nov 2018 21:53:52 -0500 Received: from localhost (97-113-224-119.tukw.qwest.net [97.113.224.119]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) (Authenticated sender: eric@ericabrahamsen.net) by mail.ericabrahamsen.net (Postfix) with ESMTPSA id A62C63F072 for ; Mon, 5 Nov 2018 02:53:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mail.ericabrahamsen.net; s=mail; t=1541386424; bh=ARH7bqenrVTBwsWLJ0ATRMtewwwl35cLu02P1jUZ9Q8=; h=From:To:Subject:Date:From; b=MGwZnL7V9/preu7op3c4a7EaAtH07BS8i7YHWJOi4b37+GTv4P/GECYJ+gNPq0Qyo E5tVMVqf155zNSEENaqyo5hqQdBLHVQtIdndmS8dVBsyG9q4e7d2mDt+iTelMnPfKY FFCNI2knRndKtpor90Qwrm8zI0Cnb5elP035vKb4= From: Eric Abrahamsen To: bug-gnu-emacs@gnu.org Subject: 27.0.50; Tidying up Gnus modes Date: Sun, 04 Nov 2018 18:53:41 -0800 Message-ID: <877ehs1bgq.fsf@ericabrahamsen.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.1 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -5.1 (-----) --=-=-= Content-Type: text/plain 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 --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Provide-new-gnus-mode-derive-all-gnus-major-modes-fr.patch >From 395babb983e466d21928433c18faddedf3d88e8f Mon Sep 17 00:00:00 2001 From: Eric Abrahamsen 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. \\ 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. \\ 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. \\ 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. \\ @@ -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 (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. \\ 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 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Mon Nov 05 09:14:35 2018 Received: (at 33263) by debbugs.gnu.org; 5 Nov 2018 14:14:35 +0000 Received: from localhost ([127.0.0.1]:34707 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gJfeE-0001aP-Qp for submit@debbugs.gnu.org; Mon, 05 Nov 2018 09:14:35 -0500 Received: from mail-it1-f177.google.com ([209.85.166.177]:38774) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gJfeC-0001aC-Oe for 33263@debbugs.gnu.org; Mon, 05 Nov 2018 09:14:33 -0500 Received: by mail-it1-f177.google.com with SMTP id k141-v6so10913387itk.3 for <33263@debbugs.gnu.org>; Mon, 05 Nov 2018 06:14:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=YFWy3MBSQ3FyeGqqxKsrr/SWq3Cgy49Xcm7hMvLm9Ew=; b=drR/Q+ZIeXin262AhNlQAp1JIFfrEU7saHanwEzsO8TWFkpIVKAyL98viq97J93kz4 ac7rzxFcfjXC2vJ8AoDT7B+idIhr5Tw+/60KtCqylpjo5AJqgKhCxI9UjEIj/q8/v3HE KDj3RP0VEo7mAF/WEQIR2uiqZQbRyL/V1ELk2x+l87K9yVCZ9+GwUgz3c+IG4B6428CR oLjcZDqsmWuCuYcIqQiXrXQyPJi39Yf5yamDdczxbz/KTNCNNrlDuq1lqy0gatcpC5fj CUvmldWFJZilc9XVeVzx0z/l0X9JB4TdZoH/56cjLgOzlQeDtmT4KTFaWQdsMDARuvdt FGsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=YFWy3MBSQ3FyeGqqxKsrr/SWq3Cgy49Xcm7hMvLm9Ew=; b=gYsPrBkQ4QAOUdjICLjM3FOltsjKqy1BdVQ+KZ3JwiSadQFlvbccz24uYkLLkBwnPt FZjDUQJMjd78YEdEipdLYOrT1O0dvQJKpts+NWJEPinXWtB8Q17dn38n/61XYsVD1YFI WnmS+f9GkqLDFFZpGbWS9UP+ISb4VVF02MjAyKGZEEaOPzlOvXrpl8iVBUWJhyrPQ30S LCOrs2Ewma8nnTRauY0Vz7/4L/cyS2/7hjwOtgj4WijesizU7+SAlAaYnf9CCa1CRlV+ iIXs2ug1qBQkdKBs9jJVNYh/Eiza79bybfjvc6q30p9tj/Rlo0bsmIDnYmCSHJgfftd4 hC1A== X-Gm-Message-State: AGRZ1gKCrRoj9V2Et9RiqgLl6K9wKpooJ38Y3z6nvXn5tdpsKmpedqWS O/xAdSTzO5PSE/f6bEiJ+oH9dN4A X-Google-Smtp-Source: AJdET5ds2zG6ov/kCqQAXfKrROSD0o6BYH5bk00lsUN+D6BN4LG00qj9r5uehZKe4zXkCpxb1JMbcw== X-Received: by 2002:a02:664c:: with SMTP id l12-v6mr19522580jaf.103.1541427266782; Mon, 05 Nov 2018 06:14:26 -0800 (PST) Received: from zebian (cbl-45-2-119-34.yyz.frontiernetworks.ca. [45.2.119.34]) by smtp.googlemail.com with ESMTPSA id b88-v6sm9231891itd.44.2018.11.05.06.14.25 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 05 Nov 2018 06:14:26 -0800 (PST) From: Noam Postavsky To: Eric Abrahamsen Subject: Re: bug#33263: 27.0.50; Tidying up Gnus modes References: <877ehs1bgq.fsf@ericabrahamsen.net> Date: Mon, 05 Nov 2018 09:14:25 -0500 In-Reply-To: <877ehs1bgq.fsf@ericabrahamsen.net> (Eric Abrahamsen's message of "Sun, 04 Nov 2018 18:53:41 -0800") Message-ID: <875zxbipby.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 33263 Cc: 33263@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eric Abrahamsen writes: > +(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)) This doesn't look right. > -(defun gnus-summary-mode (&optional group) > +(define-derived-mode gnus-summary-mode gnus-mode "Summary" > "Major mode for reading articles. > - (gnus-summary-mode group) > + (setq gnus-newsgroup-name group) > + (gnus-summary-mode) > (when (gnus-group-quit-config group) Where does GROUP come from now? From debbugs-submit-bounces@debbugs.gnu.org Mon Nov 05 12:51:59 2018 Received: (at submit) by debbugs.gnu.org; 5 Nov 2018 17:51:59 +0000 Received: from localhost ([127.0.0.1]:35559 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gJj2d-0006ts-Cv for submit@debbugs.gnu.org; Mon, 05 Nov 2018 12:51:59 -0500 Received: from eggs.gnu.org ([208.118.235.92]:43060) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gJj2b-0006tf-P7 for submit@debbugs.gnu.org; Mon, 05 Nov 2018 12:51:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJj2Q-000878-Sa for submit@debbugs.gnu.org; Mon, 05 Nov 2018 12:51:48 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-0.5 required=5.0 tests=BAYES_05 autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:59429) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gJj2P-00086F-KU for submit@debbugs.gnu.org; Mon, 05 Nov 2018 12:51:46 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52649) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJj2O-0005j0-NW for bug-gnu-emacs@gnu.org; Mon, 05 Nov 2018 12:51:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJj2H-000801-PG for bug-gnu-emacs@gnu.org; Mon, 05 Nov 2018 12:51:41 -0500 Received: from [195.159.176.226] (port=37611 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gJj2G-0007vE-Cp for bug-gnu-emacs@gnu.org; Mon, 05 Nov 2018 12:51:37 -0500 Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1gJj03-0006Wd-6j for bug-gnu-emacs@gnu.org; Mon, 05 Nov 2018 18:49:19 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: bug-gnu-emacs@gnu.org From: Eric Abrahamsen Subject: Re: bug#33263: 27.0.50; Tidying up Gnus modes Date: Mon, 05 Nov 2018 09:51:22 -0800 Lines: 51 Message-ID: <87o9b3za3p.fsf@ericabrahamsen.net> References: <877ehs1bgq.fsf@ericabrahamsen.net> <875zxbipby.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain X-Complaints-To: usenet@blaine.gmane.org User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) Cancel-Lock: sha1:vYgEcZ9lxtRHCG1zRsO36MIapZI= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -5.0 (-----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -6.0 (------) Noam Postavsky writes: > Eric Abrahamsen writes: > >> +(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)) > > This doesn't look right. Hmm, you're right, I think I got confused there. TBH I don't really know why these things are wrapped in `unless', but I think what should have happened is that `gnus-browse-mode-map' is first defvar'ed to nil, and later setq'ed to (make-keymap). >> -(defun gnus-summary-mode (&optional group) >> +(define-derived-mode gnus-summary-mode gnus-mode "Summary" >> "Major mode for reading articles. > >> - (gnus-summary-mode group) >> + (setq gnus-newsgroup-name group) >> + (gnus-summary-mode) >> (when (gnus-group-quit-config group) > > Where does GROUP come from now? GROUP has always been passed down through gnus-group-read-group (which picks it up from the group under point) => gnus-summary-read-group => gnus-summary-read-group-1 => gnus-summary-setup-buffer => gnus-summary-mode. When gnus-summary-mode was a function it was passed GROUP as an argument and set it as the (buffer-local) gnus-newsgroup-name variable. I couldn't see anything in the rest of gnus-summary-mode that would need that variable set, but you never know if Gnus is checking something four levels deep. So I pulled that up and set it in gnus-summary-setup-buffer, before the call to the major mode, forgetting that calling gnus-summary-mode would of course clear out buffer-local variables. *And* failing to notice that gnus-summary-setup-buffer sets the variable *again* later on. So it was originally set twice. I've been testing for a while, and don't think anything called from the gnus-summary-mode code needs to be aware of gnus-newsgroup-name, but I will look a little closer. Anything that *does* rely on knowing which group we're opening should definitely be hoisted up to gnus-summary-setup-buffer. Then I'll just delete the first setting of gnus-newsgroup-name and leave the later one. Thanks for looking at this. From debbugs-submit-bounces@debbugs.gnu.org Tue Nov 06 08:28:06 2018 Received: (at 33263) by debbugs.gnu.org; 6 Nov 2018 13:28:06 +0000 Received: from localhost ([127.0.0.1]:36133 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gK1Oo-00064S-0c for submit@debbugs.gnu.org; Tue, 06 Nov 2018 08:28:06 -0500 Received: from mail-it1-f173.google.com ([209.85.166.173]:40572) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gK1Om-00063z-L4 for 33263@debbugs.gnu.org; Tue, 06 Nov 2018 08:28:04 -0500 Received: by mail-it1-f173.google.com with SMTP id e11so14276662itl.5 for <33263@debbugs.gnu.org>; Tue, 06 Nov 2018 05:28:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=C9CyAdJF7ca+zWjO2MkiFNwCSDP3XOWjsYG/9zHtF+k=; b=qiJeMffYyb4kC9V0D18ia2rabiAJ5xHb94leqIljnsYgSw+jTy2niuRE116SRXjXKI U/QlpE8HnbraITrZZ/maO9HJNFHbPfkQMlWESwBTeOcejlTf5QzrvmVO9FzFQ8HavhPt 6C7cpdSZrI7Bn/LWV7DV5PxHEzusBpSsV3BjzkRi4AkOnNB2G3vT3plFDAcArHyh5Dnt NzMRcbNsZfXKdOQbhJTWzR/z8f6HfA21klrXVQEn66Fp1YMRckmiMUiWWjW3/HhVHZ8K lNxYC2FcXk4vNSTXbvHgasbX7V7PZG/gicYAxwGmKCg/znhv2bqUOVWqL5fDR0zrTDVx 6jrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=C9CyAdJF7ca+zWjO2MkiFNwCSDP3XOWjsYG/9zHtF+k=; b=qjIwaw6S2P7XJWGYWAQbhmIx0f1waOrN3Oahgmp2mJKCB4pzd6FgYWvgoCx9Xd4bif U94s8ASAjslRaonlz8Kbso+SbYFuOV2hTzYJTKoQxuneoeXrIFhzrZSUVURJVL4nEbTZ h+nXrGX9UCLBuxA9JldlkrOxDWUd1/GtaN+9hCqSL4Uxn4DCkNqPQni01bgkfZoht6Nk iDDKkUxPMXUiJVeZwn15X3d9PkNEzbA3NLvETA2hpOth0h90vyaX5yVGH31sBnh0UHlB Z4n3TUFctO2BikbbO2W1Oy2xkigLRaANSDnpBSXSTUYprpi5MPUrS5F0nEHwQlL1LOfl iT5g== X-Gm-Message-State: AGRZ1gLqlF2++4AXxkWHcDN1qX0WALJxTRu8TFlgRMTGn5XYfcr+EaRf RfQ1ra2S7HIc0c3bU4XPiscjiClo X-Google-Smtp-Source: AJdET5cix+2e7nPG3vNM4Yyp0CcWmtAuOLQIEi3wQfqOvigSTNpaJe0LfzU6eiJvtS1ICn3YqqBIjw== X-Received: by 2002:a24:7012:: with SMTP id f18-v6mr1817672itc.87.1541510878900; Tue, 06 Nov 2018 05:27:58 -0800 (PST) Received: from zebian (cbl-45-2-119-34.yyz.frontiernetworks.ca. [45.2.119.34]) by smtp.googlemail.com with ESMTPSA id p78-v6sm791953itp.32.2018.11.06.05.27.57 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 06 Nov 2018 05:27:57 -0800 (PST) From: Noam Postavsky To: Eric Abrahamsen Subject: Re: bug#33263: 27.0.50; Tidying up Gnus modes References: <877ehs1bgq.fsf@ericabrahamsen.net> <875zxbipby.fsf@gmail.com> <87o9b3za3p.fsf@ericabrahamsen.net> Date: Tue, 06 Nov 2018 08:27:56 -0500 In-Reply-To: <87o9b3za3p.fsf@ericabrahamsen.net> (Eric Abrahamsen's message of "Mon, 05 Nov 2018 09:51:22 -0800") Message-ID: <8736seibdv.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 33263 Cc: 33263@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eric Abrahamsen writes: > Noam Postavsky writes: > >> Eric Abrahamsen writes: >> >>> +(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)) >> >> This doesn't look right. > > Hmm, you're right, I think I got confused there. TBH I don't really know > why these things are wrapped in `unless', but I think what should have > happened is that `gnus-browse-mode-map' is first defvar'ed to nil, and > later setq'ed to (make-keymap). The usual idiom for this is (defvar gnus-browse-mode-map (let ((map (make-sparse-keymap))) (define-key map ...) ... map)) It seems that (the expansion of) gnus-define-keys relies on dynamic binding of the map variable (i.e., it must be called after the defvar, not inside), so that's the reason to split in two parts. From debbugs-submit-bounces@debbugs.gnu.org Tue Nov 06 11:21:59 2018 Received: (at submit) by debbugs.gnu.org; 6 Nov 2018 16:22:00 +0000 Received: from localhost ([127.0.0.1]:37529 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gK475-0006bi-OF for submit@debbugs.gnu.org; Tue, 06 Nov 2018 11:21:59 -0500 Received: from eggs.gnu.org ([208.118.235.92]:46210) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gK474-0006bV-0m for submit@debbugs.gnu.org; Tue, 06 Nov 2018 11:21:58 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gK46x-0000Hr-0Z for submit@debbugs.gnu.org; Tue, 06 Nov 2018 11:21:52 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:40546) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gK46w-0000Ec-Aw for submit@debbugs.gnu.org; Tue, 06 Nov 2018 11:21:50 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55815) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gK46v-0002n6-Fk for bug-gnu-emacs@gnu.org; Tue, 06 Nov 2018 11:21:50 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gK46r-0008JN-Bc for bug-gnu-emacs@gnu.org; Tue, 06 Nov 2018 11:21:49 -0500 Received: from [195.159.176.226] (port=56672 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gK46o-00085q-Ts for bug-gnu-emacs@gnu.org; Tue, 06 Nov 2018 11:21:43 -0500 Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1gK44f-0003pU-8Y for bug-gnu-emacs@gnu.org; Tue, 06 Nov 2018 17:19:29 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: bug-gnu-emacs@gnu.org From: Eric Abrahamsen Subject: Re: bug#33263: 27.0.50; Tidying up Gnus modes Date: Tue, 06 Nov 2018 08:21:31 -0800 Lines: 36 Message-ID: <87k1lqw510.fsf@ericabrahamsen.net> References: <877ehs1bgq.fsf@ericabrahamsen.net> <875zxbipby.fsf@gmail.com> <87o9b3za3p.fsf@ericabrahamsen.net> <8736seibdv.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain X-Complaints-To: usenet@blaine.gmane.org User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) Cancel-Lock: sha1:6MU27KYdWXgDyQVQdnhL7hjoc+4= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -5.0 (-----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -6.0 (------) Noam Postavsky writes: > Eric Abrahamsen writes: > >> Noam Postavsky writes: >> >>> Eric Abrahamsen writes: >>> >>>> +(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)) >>> >>> This doesn't look right. >> >> Hmm, you're right, I think I got confused there. TBH I don't really know >> why these things are wrapped in `unless', but I think what should have >> happened is that `gnus-browse-mode-map' is first defvar'ed to nil, and >> later setq'ed to (make-keymap). > > The usual idiom for this is > > (defvar gnus-browse-mode-map > (let ((map (make-sparse-keymap))) > (define-key map ...) > ... > map)) > > It seems that (the expansion of) gnus-define-keys relies on dynamic > binding of the map variable (i.e., it must be called after the defvar, > not inside), so that's the reason to split in two parts. Right, I got that much, I was mostly wondering why the `unless' -- it's unlikely these files would be loaded multiple times, and even if they were, that wouldn't break anything, would it? From debbugs-submit-bounces@debbugs.gnu.org Tue Nov 06 11:28:38 2018 Received: (at 33263) by debbugs.gnu.org; 6 Nov 2018 16:28:38 +0000 Received: from localhost ([127.0.0.1]:37534 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gK4DW-0006lE-G0 for submit@debbugs.gnu.org; Tue, 06 Nov 2018 11:28:38 -0500 Received: from mail-ot1-f54.google.com ([209.85.210.54]:39798) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gK4DT-0006l1-Jo for 33263@debbugs.gnu.org; Tue, 06 Nov 2018 11:28:37 -0500 Received: by mail-ot1-f54.google.com with SMTP id g27so11958162oth.6 for <33263@debbugs.gnu.org>; Tue, 06 Nov 2018 08:28:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=AaJS+5loYqjd5S4M/ATSi0FAHw8d6e8TNllWth0Kzc0=; b=p6JZpbf2OGcl86QsoNwlik8oTdxl6gJr0Dm8iX/RWDb72bA+l6+srg4dKYlEXVMG2F SJ8XB/T25m0OyO+OMy2gFc7SiV1ope0pNUrRiiDsxgTknE1Ktlr4Bz051CwXAjvDdxUc gOQLkA5GCNjCjZRakaAnIsorLCX0ohe50KgWH9LKqv4XFYM10ECWY9R4lsn0b7gzTYK6 lLVkKVpj21KejNVeIRAtgNRRE3pYh4bYad8KAALNRBM1HNI2eIew3cMzUiVH/S+k1jTA JfJDb3C8M1xm3StANOeFOkmpSqTJs0VxTUo/S0Mik9DEDRweIJ/uNCD7V14X/kpKxgjr Hnbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=AaJS+5loYqjd5S4M/ATSi0FAHw8d6e8TNllWth0Kzc0=; b=EPwMEWl+30bx/MTqdUGlfvG389X6uUsmWnht5qnPuOY43MDGxV31k7B7lV23L5jCmZ +IXyXetQ3lAOW+YjkK5HX6ZXz2Abavz0l1gU6NlMXiIQUP3Js5Nkwu32KhJEdNpLWaGo ZRccPrSdnMcnef5D1Ahi+p3r9TY4wxwWHBx5J+Jpex1TBBpI0gayq8t+iI5p5y1Etfi5 R2SARaNo41tY/XEk19kvz93iAc3cBQ9QqsycEeTmxhPm5TpVg5MoU38DjofdEOBN4I9K rcfgzJQKlsFwbc2FPkg14A4UJUJgFwXfdfFOncxVq6MUbAg/7osBr8dqSWLGSbP9aFpN PYcw== X-Gm-Message-State: AGRZ1gL5g9lxejIMv+xOIoVbzVkpK66ugOf62LeltIVxMRIg7Jk2W9Hv NVm5YJMLJkFYgag0051jXu8nbn2qj+DSU1i8//A= X-Google-Smtp-Source: AJdET5ccrXjgUT4xz4hZ0c1QU20JmLXa2CojnwfYCr5VDAhVhUqTX3WvbAxzuCo5hMeY+RWJAEwD2QgyjhUulhQwPns= X-Received: by 2002:a9d:38ca:: with SMTP id k10mr17428277ote.72.1541521709855; Tue, 06 Nov 2018 08:28:29 -0800 (PST) MIME-Version: 1.0 References: <875zxbipby.fsf@gmail.com> <87o9b3za3p.fsf@ericabrahamsen.net> <8736seibdv.fsf@gmail.com> <877ehs1bgq.fsf@ericabrahamsen.net> <87k1lqw510.fsf@ericabrahamsen.net> In-Reply-To: <87k1lqw510.fsf@ericabrahamsen.net> From: Noam Postavsky Date: Tue, 6 Nov 2018 11:28:17 -0500 Message-ID: Subject: Re: bug#33263: 27.0.50; Tidying up Gnus modes To: Eric Abrahamsen Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 33263 Cc: 33263@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On Tue, 6 Nov 2018 at 11:22, Eric Abrahamsen wrote: > >>>> +(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)) > Right, I got that much, I was mostly wondering why the `unless' -- it's > unlikely these files would be loaded multiple times, and even if they > were, that wouldn't break anything, would it? Without the `unless', if the user had made changes to gnus-browse-mode-map they would be lost upon reload (as you say, it's not especially likely to happen, but I guess the original author wanted to preserve the semantics of the single defvar form). From debbugs-submit-bounces@debbugs.gnu.org Tue Nov 06 12:39:56 2018 Received: (at submit) by debbugs.gnu.org; 6 Nov 2018 17:39:56 +0000 Received: from localhost ([127.0.0.1]:37630 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gK5KW-00005s-Hv for submit@debbugs.gnu.org; Tue, 06 Nov 2018 12:39:56 -0500 Received: from eggs.gnu.org ([208.118.235.92]:42436) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gK5KS-00005d-Oc for submit@debbugs.gnu.org; Tue, 06 Nov 2018 12:39:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gK5K4-000712-5l for submit@debbugs.gnu.org; Tue, 06 Nov 2018 12:39:37 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:56774) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gK5Jm-0006jD-6G for submit@debbugs.gnu.org; Tue, 06 Nov 2018 12:39:15 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51480) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gK5Jh-00053E-O4 for bug-gnu-emacs@gnu.org; Tue, 06 Nov 2018 12:39:09 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gK5JM-00066w-M3 for bug-gnu-emacs@gnu.org; Tue, 06 Nov 2018 12:38:57 -0500 Received: from [195.159.176.226] (port=38937 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gK5JK-0005aX-25 for bug-gnu-emacs@gnu.org; Tue, 06 Nov 2018 12:38:42 -0500 Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1gK5Gh-0002pq-Ap for bug-gnu-emacs@gnu.org; Tue, 06 Nov 2018 18:35:59 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: bug-gnu-emacs@gnu.org From: Eric Abrahamsen Subject: Re: bug#33263: 27.0.50; Tidying up Gnus modes Date: Tue, 06 Nov 2018 09:37:59 -0800 Lines: 23 Message-ID: <87a7mmw1hk.fsf@ericabrahamsen.net> References: <875zxbipby.fsf@gmail.com> <87o9b3za3p.fsf@ericabrahamsen.net> <8736seibdv.fsf@gmail.com> <877ehs1bgq.fsf@ericabrahamsen.net> <87k1lqw510.fsf@ericabrahamsen.net> Mime-Version: 1.0 Content-Type: text/plain X-Complaints-To: usenet@blaine.gmane.org User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) Cancel-Lock: sha1:7wJeod5bkQFBVeMpsF04Jxo+UM8= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -5.0 (-----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -6.0 (------) Noam Postavsky writes: > On Tue, 6 Nov 2018 at 11:22, Eric Abrahamsen wrote: > >> >>>> +(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)) > >> Right, I got that much, I was mostly wondering why the `unless' -- it's >> unlikely these files would be loaded multiple times, and even if they >> were, that wouldn't break anything, would it? > > Without the `unless', if the user had made changes to > gnus-browse-mode-map they would be lost upon reload (as you say, it's > not especially likely to happen, but I guess the original author > wanted to preserve the semantics of the single defvar form). Got it, thanks for the explanation. I'll fix this, and look more closely at the "group" argument to `gnus-summary-mode'. Eric From debbugs-submit-bounces@debbugs.gnu.org Fri Nov 09 23:01:58 2018 Received: (at 33263) by debbugs.gnu.org; 10 Nov 2018 04:01:58 +0000 Received: from localhost ([127.0.0.1]:44075 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gLKT7-0006I7-Nb for submit@debbugs.gnu.org; Fri, 09 Nov 2018 23:01:58 -0500 Received: from mail-io1-f43.google.com ([209.85.166.43]:38955) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gLKT3-0006Hq-LO for 33263@debbugs.gnu.org; Fri, 09 Nov 2018 23:01:54 -0500 Received: by mail-io1-f43.google.com with SMTP id b26-v6so2095390ioc.6 for <33263@debbugs.gnu.org>; Fri, 09 Nov 2018 20:01:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version; bh=Q0mpu0xdYbP4NW1wYZCX4XI+gb5Axe8tVr1F+5s0OyM=; b=WkflbW5w1PSrcalHDIiNaBD5+p2OIRrLx++KTbgA3e0kZVkskCPGSht9fpm6kOe0F7 7tCegkVLBR0jubpPeIRyW1TCS9p88uF8RinEpYL9jBc67Bsa7cTAZiBMXT+NhePIDxD4 dxRh+kjk7CtuPZ/eFX8K5rjcb9hxQn2r4EgxTCknH5NS/ZArtk5SOZTDl3hfx4OVdY+1 7+MWzYw7cKdG5arPjRMTBFa9tVcAp87Pud2i1dyhLSPk6Qb1/mhF6MtqwwFkAlvUVHzw 8ALJGhJhq5/46ECYQQtEAbl24YDqiuw0WxUcVVfSBDk70I7NovD3OXq5uJjaQToSBYvL sulg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version; bh=Q0mpu0xdYbP4NW1wYZCX4XI+gb5Axe8tVr1F+5s0OyM=; b=X2VsOUq12OXknb9Z3q/+jmq6OFvFX6s0Wfu7grl7ft5xwuxyYABF+R5P11cyP7Dbg5 SOcPdx4MT9WEItefIdsRjnKcmrYYIfmQbXLMiYWtY7CcK3XvopwG4aAuJzDdReqcosKM qQhOcxdd3h+N3M5gom1Zv0c8tqh+vVoS8in3S4YspSRTymiz70eWNjKRu3M1LFVzO1Ls 2AaKDXtWXBT30LGGNC3obx7zK0sOFn7lOat/KhGd7KmtrJi9JurNUFJNjVHgyOFUh2w/ U1sAkYcDcf/qQEE+ui4jQw0+yez+GiawKeGWy6KVpVLxB3f4p5KMBKj25D+DEGpIuRlh zZrg== X-Gm-Message-State: AGRZ1gIlGc4Qy/oH5a5St2+5F/wpuooFK9N0p21wFxxVediP+nryfC9I 13DRGTCuanRXu2k5nIkdYFU= X-Google-Smtp-Source: AJdET5clGaAJQpsfRpdvruhCkTDICCGGbZ8z5LhZ7isrNpVcy9dbMaUHTvf98Qlk2/D9cP/hwLnsFQ== X-Received: by 2002:a6b:1687:: with SMTP id 129-v6mr9696567iow.85.1541822508056; Fri, 09 Nov 2018 20:01:48 -0800 (PST) Received: from zebian (cbl-45-2-119-34.yyz.frontiernetworks.ca. [45.2.119.34]) by smtp.googlemail.com with ESMTPSA id i199-v6sm3578264ioa.16.2018.11.09.20.01.47 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 09 Nov 2018 20:01:47 -0800 (PST) From: Noam Postavsky To: 33263@debbugs.gnu.org Subject: Re: bug#33263: 27.0.50; Tidying up Gnus modes, [PATCH] Provide new gnus-mode, derive all gnus major modes from this Date: Fri, 09 Nov 2018 23:01:46 -0500 Message-ID: <87o9axh979.fsf@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 33263 Cc: Eric Abrahamsen , Lars Ingebrigtsen X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain [forwarding to list] --=-=-= Content-Type: message/rfc822 Content-Disposition: inline From: Eric Abrahamsen To: Noam Postavsky Subject: Re: bug#33263: 27.0.50; Tidying up Gnus modes References: <875zxbipby.fsf@gmail.com> <87o9b3za3p.fsf@ericabrahamsen.net> <8736seibdv.fsf@gmail.com> <877ehs1bgq.fsf@ericabrahamsen.net> <87k1lqw510.fsf@ericabrahamsen.net> Date: Fri, 09 Nov 2018 12:54:53 -0800 In-Reply-To: (Noam Postavsky's message of "Tue, 6 Nov 2018 11:28:17 -0500") Message-ID: <87k1lmkm3m.fsf@ericabrahamsen.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="====-=-=" --====-=-= Content-Type: text/plain Content-Disposition: inline Here's a new version of the patch. I fixed the keymap thing, and looked carefully at the code called from `gnus-summary-mode'. `turn-on-mailing-list-mode' clearly belongs in `gnus-summary-setup-buffer', so I moved it up there. The format spec and mark position stuff doesn't vary depending on the group, but I have dreams of a day when it will, so I moved that up, too. I added more docs and comments making the separation of concerns clear: `gnus-summary-setup-buffer' handles group-dependent setup, `gnus-summary-mode' handles group-independent stuff. That's also the motivation for moving the three `make-local-variables', which would otherwise be a pointless change. I hope this is acceptable (I'm cc'ing Lars in case he has an opinion). I'll run it locally for a week or so, then push to master. Eric --====-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Provide-new-gnus-mode-derive-all-gnus-major-modes-fr.patch >From 777e86d060320f2341ae231ff48d453ae3f503d3 Mon Sep 17 00:00:00 2001 From: Eric Abrahamsen 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 | 44 ++++++++--------------------------- lisp/gnus/gnus-sum.el | 51 +++++++++++++++++++++-------------------- lisp/gnus/gnus.el | 6 +++++ 8 files changed, 48 insertions(+), 93 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. \\ 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. \\ 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..400199083a 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. \\ 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) + (with-current-buffer (get-buffer-create 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,9 +695,7 @@ 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) (unless gnus-browse-mode-map (setq gnus-browse-mode-map (make-keymap)) @@ -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. \\ @@ -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..6ba413eefa 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 (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. \\ 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)) @@ -3100,14 +3088,13 @@ gnus-summary-mode (make-local-variable 'gnus-summary-dummy-line-format) (make-local-variable 'gnus-summary-dummy-line-format-spec) (make-local-variable 'gnus-summary-mark-positions) + (make-local-variable 'gnus-article-buffer) + (make-local-variable 'gnus-article-current) + (make-local-variable 'gnus-original-article-buffer) (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) - 'gnus-summary-bookmark-make-record) - (gnus-update-format-specifications nil 'summary 'summary-mode 'summary-dummy) - (gnus-update-summary-mark-positions)) + 'gnus-summary-bookmark-make-record)) (defun gnus-summary-make-local-variables () "Make all the local summary buffer variables." @@ -3478,8 +3465,11 @@ gnus-summary-set-article-display-arrow (current-buffer)))))) (defun gnus-summary-setup-buffer (group) - "Initialize summary buffer. -If the setup was successful, non-nil is returned." + "Initialize summary buffer for GROUP. +This function does all setup work that relies on the specific +value of GROUP, and puts the buffer in `gnus-summary-mode'. + +Returns non-nil if the setup was successful." (let ((buffer (gnus-summary-buffer-name group)) (dead-name (concat "*Dead Summary " (gnus-group-decoded-name group) "*"))) @@ -3493,13 +3483,15 @@ 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) + (gnus-summary-mode) (when (gnus-group-quit-config group) (set (make-local-variable 'gnus-single-article-buffer) nil)) - (make-local-variable 'gnus-article-buffer) - (make-local-variable 'gnus-article-current) - (make-local-variable 'gnus-original-article-buffer) (setq gnus-newsgroup-name group) + (turn-on-gnus-mailing-list-mode) + ;; This function doesn't currently depend on GROUP, but might in + ;; the future. + (gnus-update-summary-mark-positions) + (gnus-update-format-specifications nil 'summary 'summary-mode 'summary-dummy) ;; Set any local variables in the group parameters. (gnus-summary-set-local-parameters gnus-newsgroup-name) t))) @@ -3935,6 +3927,15 @@ gnus-summary-read-group (defun gnus-summary-read-group-1 (group show-all no-article kill-buffer no-display &optional select-articles) + "Display articles and threads in a Summary buffer for GROUP." + ;; This function calls `gnus-summary-setup-buffer' to create the + ;; buffer, put it in `gnus-summary-mode', and set local variables; + ;; `gnus-select-newsgroup' to update the group's active and marks + ;; from the server; and `gnus-summary-prepare' to actually insert + ;; lines for articles. The rest of the function is mostly concerned + ;; with limiting and positioning and windowing and other visual + ;; effects. + ;; Killed foreign groups can't be entered. ;; (when (and (not (gnus-group-native-p group)) ;; (not (gnus-gethash group gnus-newsrc-hashtb))) 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 --====-=-=-- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Fri Nov 09 23:55:51 2018 Received: (at 33263) by debbugs.gnu.org; 10 Nov 2018 04:55:51 +0000 Received: from localhost ([127.0.0.1]:44088 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gLLJG-0007Ys-OE for submit@debbugs.gnu.org; Fri, 09 Nov 2018 23:55:50 -0500 Received: from mail.ericabrahamsen.net ([50.56.99.223]:52455) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gLLJF-0007Yk-Ke for 33263@debbugs.gnu.org; Fri, 09 Nov 2018 23:55:49 -0500 Received: from localhost (97-113-224-119.tukw.qwest.net [97.113.224.119]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) (Authenticated sender: eric@ericabrahamsen.net) by mail.ericabrahamsen.net (Postfix) with ESMTPSA id BE96D3F8F5; Sat, 10 Nov 2018 04:55:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mail.ericabrahamsen.net; s=mail; t=1541825749; bh=0S1KT2sOLwlfDjBn+78NisXmNp8YePsmQo83VnIkFSE=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=SHgXnJUB40DK9vVTJvUjtjd3XMe9WlUeF2iRIHPMGT5b1X8HuALpobzrLbir7SGWS Yyy/FT3Cth0l+IH3EdaNm6RrxBXcxf2Fpdor6rxspJsEukdDR1zl4L5xWc1o9MjQHc Lk7rFFXtqzm8FCFhguQ+IGAphFo6BQmGCUz3vomE= From: Eric Abrahamsen To: Noam Postavsky Subject: Re: bug#33263: 27.0.50; Tidying up Gnus modes, [PATCH] Provide new gnus-mode, derive all gnus major modes from this References: <877ehs1bgq.fsf@ericabrahamsen.net> <87o9axh979.fsf@gmail.com> Date: Fri, 09 Nov 2018 20:55:47 -0800 In-Reply-To: <87o9axh979.fsf@gmail.com> (Noam Postavsky's message of "Fri, 09 Nov 2018 23:01:46 -0500") Message-ID: <87h8gpcyzw.fsf@ericabrahamsen.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 33263 Cc: 33263@debbugs.gnu.org, Lars Ingebrigtsen X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Noam Postavsky writes: > [forwarding to list] [...] Bah, sorry about that. And it turns out that the mark position stuff does depend on the group! In mysterious ways that aren't clear to me yet. So I'll continue poking at this patch until I've got a better sense of how stuff interacts. Eric From debbugs-submit-bounces@debbugs.gnu.org Sat Nov 10 15:18:43 2018 Received: (at 33263) by debbugs.gnu.org; 10 Nov 2018 20:18:43 +0000 Received: from localhost ([127.0.0.1]:45006 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gLZiL-0002Rx-I6 for submit@debbugs.gnu.org; Sat, 10 Nov 2018 15:18:43 -0500 Received: from mail.ericabrahamsen.net ([50.56.99.223]:44105) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gLZiH-0002Rm-P4 for 33263@debbugs.gnu.org; Sat, 10 Nov 2018 15:18:40 -0500 Received: from localhost (97-113-224-119.tukw.qwest.net [97.113.224.119]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) (Authenticated sender: eric@ericabrahamsen.net) by mail.ericabrahamsen.net (Postfix) with ESMTPSA id DD7853F8F7; Sat, 10 Nov 2018 20:18:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mail.ericabrahamsen.net; s=mail; t=1541881117; bh=55imTPUoWPTU/R0qK6DzooiN8N2DeHSlc9S/mRQ2wMA=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=OgZJ65SWxt8j1WLRzCjbguoNmGEsVwi7ITHBzJgCeVv7um1/oSWkseFbq7a9eF6td p/w309p9Qpz7ySuXEVL+mhRZA0fmFd2saYmgNwijhCf24T7foFwbaWEdEhjUqiMfUU +lk/a6geV3Qm43NIk2vvJT3mF9Vsixwkf3e34V5g= From: Eric Abrahamsen To: Noam Postavsky Subject: Re: bug#33263: 27.0.50; Tidying up Gnus modes, [PATCH] Provide new gnus-mode, derive all gnus major modes from this References: <877ehs1bgq.fsf@ericabrahamsen.net> <87o9axh979.fsf@gmail.com> <87h8gpcyzw.fsf@ericabrahamsen.net> Date: Sat, 10 Nov 2018 12:18:35 -0800 In-Reply-To: <87h8gpcyzw.fsf@ericabrahamsen.net> (Eric Abrahamsen's message of "Fri, 09 Nov 2018 20:55:47 -0800") Message-ID: <8736s8bs9w.fsf@ericabrahamsen.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 33263 Cc: 33263@debbugs.gnu.org, Lars Ingebrigtsen X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) --=-=-= Content-Type: text/plain Eric Abrahamsen writes: > Noam Postavsky writes: > >> [forwarding to list] > > [...] > > Bah, sorry about that. > > And it turns out that the mark position stuff does depend on the group! > In mysterious ways that aren't clear to me yet. So I'll continue poking > at this patch until I've got a better sense of how stuff interacts. Aaaand... It wasn't that mysterious after all, I'd transposed two function calls. Here's the patch that I'm dog-fooding, and I will be quiet for a while. Eric --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Provide-new-gnus-mode-derive-all-gnus-major-modes-fr.patch >From 002d08bb05fbb070cd4082094174dd3f0d35f187 Mon Sep 17 00:00:00 2001 From: Eric Abrahamsen 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 | 44 ++++++++--------------------------- lisp/gnus/gnus-sum.el | 51 +++++++++++++++++++++-------------------- lisp/gnus/gnus.el | 6 +++++ 8 files changed, 48 insertions(+), 93 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. \\ 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. \\ 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..400199083a 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. \\ 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) + (with-current-buffer (get-buffer-create 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,9 +695,7 @@ 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) (unless gnus-browse-mode-map (setq gnus-browse-mode-map (make-keymap)) @@ -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. \\ @@ -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..1c4be09e2e 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 (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. \\ 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)) @@ -3100,14 +3088,13 @@ gnus-summary-mode (make-local-variable 'gnus-summary-dummy-line-format) (make-local-variable 'gnus-summary-dummy-line-format-spec) (make-local-variable 'gnus-summary-mark-positions) + (make-local-variable 'gnus-article-buffer) + (make-local-variable 'gnus-article-current) + (make-local-variable 'gnus-original-article-buffer) (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) - 'gnus-summary-bookmark-make-record) - (gnus-update-format-specifications nil 'summary 'summary-mode 'summary-dummy) - (gnus-update-summary-mark-positions)) + 'gnus-summary-bookmark-make-record)) (defun gnus-summary-make-local-variables () "Make all the local summary buffer variables." @@ -3478,8 +3465,11 @@ gnus-summary-set-article-display-arrow (current-buffer)))))) (defun gnus-summary-setup-buffer (group) - "Initialize summary buffer. -If the setup was successful, non-nil is returned." + "Initialize summary buffer for GROUP. +This function does all setup work that relies on the specific +value of GROUP, and puts the buffer in `gnus-summary-mode'. + +Returns non-nil if the setup was successful." (let ((buffer (gnus-summary-buffer-name group)) (dead-name (concat "*Dead Summary " (gnus-group-decoded-name group) "*"))) @@ -3493,13 +3483,15 @@ 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) + (gnus-summary-mode) (when (gnus-group-quit-config group) (set (make-local-variable 'gnus-single-article-buffer) nil)) - (make-local-variable 'gnus-article-buffer) - (make-local-variable 'gnus-article-current) - (make-local-variable 'gnus-original-article-buffer) (setq gnus-newsgroup-name group) + (turn-on-gnus-mailing-list-mode) + ;; These functions don't currently depend on GROUP, but might in + ;; the future. + (gnus-update-format-specifications nil 'summary 'summary-mode 'summary-dummy) + (gnus-update-summary-mark-positions) ;; Set any local variables in the group parameters. (gnus-summary-set-local-parameters gnus-newsgroup-name) t))) @@ -3935,6 +3927,15 @@ gnus-summary-read-group (defun gnus-summary-read-group-1 (group show-all no-article kill-buffer no-display &optional select-articles) + "Display articles and threads in a Summary buffer for GROUP." + ;; This function calls `gnus-summary-setup-buffer' to create the + ;; buffer, put it in `gnus-summary-mode', and set local variables; + ;; `gnus-select-newsgroup' to update the group's active and marks + ;; from the server; and `gnus-summary-prepare' to actually insert + ;; lines for articles. The rest of the function is mostly concerned + ;; with limiting and positioning and windowing and other visual + ;; effects. + ;; Killed foreign groups can't be entered. ;; (when (and (not (gnus-group-native-p group)) ;; (not (gnus-gethash group gnus-newsrc-hashtb))) 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 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Fri Nov 23 12:45:30 2018 Received: (at 33263-done) by debbugs.gnu.org; 23 Nov 2018 17:45:30 +0000 Received: from localhost ([127.0.0.1]:44491 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gQFWE-0003tt-CL for submit@debbugs.gnu.org; Fri, 23 Nov 2018 12:45:30 -0500 Received: from mail.ericabrahamsen.net ([50.56.99.223]:38665) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gQFWA-0003ti-Pc for 33263-done@debbugs.gnu.org; Fri, 23 Nov 2018 12:45:28 -0500 Received: from localhost (71-212-20-199.tukw.qwest.net [71.212.20.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) (Authenticated sender: eric@ericabrahamsen.net) by mail.ericabrahamsen.net (Postfix) with ESMTPSA id ADF813F08A for <33263-done@debbugs.gnu.org>; Fri, 23 Nov 2018 17:45:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mail.ericabrahamsen.net; s=mail; t=1542995125; bh=U//926Ohx1CEwlpkQNkp3k+j3vK5Tjrx8y0b0y3ZM5s=; h=From:To:Subject:Date:From; b=c1frHlrWr6l2fAgWatbb07DGkcnkpEB0ODTlgB97LAf1UeaAK9/REWoPMZM/e+TYf z3RT1eZQSTwrjX6ex7ZUkpKtx/Wj2kwRsJ+BANJ5jUPAcLW55Ne1fF/Mf5ygz+Yuzm NaNyDt+eWqUee8HNk+/BHT/kdLYbG3UcctLzcFww= From: Eric Abrahamsen To: 33263-done@debbugs.gnu.org Subject: Re: bug#33263: 27.0.50; Tidying up Gnus modes Date: Fri, 23 Nov 2018 09:45:24 -0800 Message-ID: <87o9afwuvf.fsf@ericabrahamsen.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 33263-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Okay, I've been running this for more than a week and it seems fine so far. I'll push it, and watch for repercussions. From unknown Wed Sep 10 06:17:24 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sat, 22 Dec 2018 12:24:06 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator