]> git.eshelyaron.com Git - emacs.git/commitdiff
Provide new gnus-mode, derive all gnus major modes from this
authorEric Abrahamsen <eric@ericabrahamsen.net>
Tue, 26 Jun 2018 00:40:19 +0000 (17:40 -0700)
committerEric Abrahamsen <eric@ericabrahamsen.net>
Fri, 23 Nov 2018 17:44:35 +0000 (09:44 -0800)
* 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.

(Bug#33263)

lisp/gnus/gnus-agent.el
lisp/gnus/gnus-art.el
lisp/gnus/gnus-group.el
lisp/gnus/gnus-kill.el
lisp/gnus/gnus-salt.el
lisp/gnus/gnus-srvr.el
lisp/gnus/gnus-sum.el
lisp/gnus/gnus.el

index 18e6174fa02bcc3132b1d82647f4e7a0607eca4d..93a675584f50ce23c12ed61c059adcf16c4ef7d4 100644 (file)
@@ -2575,9 +2575,6 @@ modified) original contents, they are first saved to their own file."
 ;;; 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 @@ General format specifiers can also be used.  See Info node
 (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 @@ General format specifiers can also be used.  See Info node
 
     (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 @@ The following commands are available:
   (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)
 
index f28e6db3c7e5378c841b56d74bbf83ade2933528..c78bb3325f0440d8aab57af3126a58061867e9cb 100644 (file)
@@ -4388,8 +4388,6 @@ If variable `gnus-use-long-file-name' is non-nil, it is
 ;;; 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 @@ If variable `gnus-use-long-file-name' is non-nil, it is
 (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 @@ commands:
     (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 ()
index 6af27afbfaaed935f9fd6ebb6aa7f9087f0b8dfd..d526894b3ac5c1b6e9b324f079f8e29f816fe59c 100644 (file)
@@ -567,8 +567,6 @@ simple manner."
 ;;; 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 @@ When FORCE, rebuild the 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 @@ The following commands are available:
   (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)
index 60732c11d54eadcd6e5a6a7c2adf0761678e2a02..e65ff51ce789b365ac7e16a376f82fce02193172 100644 (file)
 (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
index aff841760ae95fa21875cf436f200e4f96c0361c..0504465de3e1d561c7b5f0e2350ee1b21ee6f7d9 100644 (file)
@@ -396,11 +396,6 @@ Two predefined functions are available:
                (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 @@ Two predefined functions are available:
      '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 @@ Two predefined functions are available:
       '("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)
index 34ebd00ef246cdbf2a33003d0aeb4221ca25bf04..4d15f36ffc47887ce18aea4aec11e5f9ff286361 100644 (file)
 
 (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 @@ If nil, a faster, but more primitive, buffer is used instead."
 (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 @@ If nil, a faster, but more primitive, buffer is used instead."
 
     (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 @@ If nil, a faster, but more primitive, buffer is used instead."
     ("(\\(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 @@ For more in-depth information on this mode, read the manual
 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 @@ The following commands are available:
 
 (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 @@ claim them."
                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 @@ claim them."
       (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 @@ buffer.
   (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.
index f9fae3792b147703406bbca1f7141a2f74f9f2d3..1c4be09e2e9150d32e2a46b5cca817a46711eb48 100644 (file)
@@ -1842,8 +1842,6 @@ increase the score of each group you read."
 ;;; Gnus summary mode
 ;;;
 
-(put 'gnus-summary-mode 'mode-class 'special)
-
 (defvar gnus-article-commands-menu)
 
 ;; Non-orthogonal keys
@@ -3052,10 +3050,8 @@ When FORCE, rebuild the tool bar."
 \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 @@ buffer; read the info pages for more information (`\\[gnus-info-find-node]').
 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 @@ The following commands are available:
   (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 @@ display only a single character."
                                               (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 @@ If the setup was successful, non-nil is returned."
          (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 @@ If SELECT-ARTICLES, only select those articles from 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)))
index 2786323f671b153aeb331659c64e6ea5a56eccd3..6c59b1357421f584d5647e2f5d2c1d8cc715839f 100644 (file)
@@ -637,6 +637,12 @@ be set in `.emacs' instead."
   "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