From 316053a4ea014aba36b36f4d2dd9e83433a9c5df Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 11 Sep 2013 14:54:27 +0000 Subject: [PATCH] Use define-derived-mode (and derived-mode-p) --- lisp/ChangeLog | 24 ++++++++++++++++++++++ lisp/gnus-art.el | 39 +++++++++++++++--------------------- lisp/gnus-bookmark.el | 11 +++-------- lisp/gnus-cus.el | 8 ++------ lisp/gnus-group.el | 20 +++++++------------ lisp/gnus-kill.el | 46 ++++++++++++++++++------------------------- lisp/gnus-srvr.el | 13 ++++-------- lisp/score-mode.el | 26 +++++++++--------------- 8 files changed, 84 insertions(+), 103 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index dfb4d54a1..3c171045c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,27 @@ +2013-09-11 Stefan Monnier + + * score-mode.el (gnus-score-mode-map): Move initialization + into declaration. + (gnus-score-mode): Use define-derived-mode. + * gnus-srvr.el (gnus-browse-mode): Use define-derived-mode. + * gnus-kill.el (gnus-kill-file-mode-map): Move initialization + into declaration. + (gnus-kill-file-mode): Use define-derived-mode. + (gnus-kill-file-edit-file, gnus-kill-file-enter-kill, gnus-kill): + Use derived-mode-p. + * gnus-group.el (gnus-group-mode): Use define-derived-mode. + (gnus-group-setup-buffer, gnus-group-name-at-point) + (gnus-group-make-web-group, gnus-group-enter-directory) + (gnus-group-suspend): Use derived-mode-p. + * gnus-cus.el (gnus-custom-mode): Use define-derived-mode. + * gnus-bookmark.el (gnus-bookmark-bmenu-mode): Use define-derived-mode. + * gnus-art.el (gnus-article-mode): Use define-derived-mode. + (gnus-article-setup-buffer, gnus-article-prepare) + (gnus-article-prepare-display, gnus-sticky-article) + (gnus-kill-sticky-article-buffer, gnus-kill-sticky-article-buffers) + (gnus-bind-safe-url-regexp, gnus-article-check-buffer) + (gnus-article-read-summary-keys): Use derived-mode-p. + 2013-08-28 Katsumi Yamaoka * mm-decode.el (mm-temp-files-delete): Fix file deletion logic. diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index 2fa8fdfd9..bc164caf5 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -3684,7 +3684,7 @@ function and want to see what the date was before converting." (walk-windows (lambda (w) (set-buffer (window-buffer w)) - (when (eq major-mode 'gnus-article-mode) + (when (derived-mode-p 'gnus-article-mode) (let ((old-line (count-lines (point-min) (point))) (old-column (- (point) (line-beginning-position))) (window-start (window-start w)) @@ -4456,7 +4456,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is (defvar bookmark-make-record-function) (defvar shr-put-image-function) -(defun gnus-article-mode () +(define-derived-mode gnus-article-mode fundamental-mode "Article" "Major mode for displaying an article. All normal editing commands are switched off. @@ -4471,13 +4471,8 @@ commands: \\[gnus-article-mail]\t Send a reply to the address near point \\[gnus-article-describe-briefly]\t Describe the current mode briefly \\[gnus-info-find-node]\t Go to the Gnus info node" - (interactive) - (kill-all-local-variables) (gnus-simplify-mode-line) - (setq mode-name "Article") - (setq major-mode 'gnus-article-mode) (make-local-variable 'minor-mode-alist) - (use-local-map gnus-article-mode-map) (when (gnus-visual-p 'article-menu 'menu) (gnus-article-make-menu-bar) (when gnus-summary-tool-bar-map @@ -4505,9 +4500,7 @@ commands: (buffer-disable-undo) (setq buffer-read-only t show-trailing-whitespace nil) - (set-syntax-table gnus-article-mode-syntax-table) - (mm-enable-multibyte) - (gnus-run-mode-hooks 'gnus-article-mode-hook)) + (mm-enable-multibyte)) (defun gnus-article-setup-buffer () "Initialize the article buffer." @@ -4555,7 +4548,7 @@ commands: (setq gnus-article-mime-handle-alist nil) (buffer-disable-undo) (setq buffer-read-only t) - (unless (eq major-mode 'gnus-article-mode) + (unless (derived-mode-p 'gnus-article-mode) (gnus-article-mode)) (setq truncate-lines gnus-article-truncate-lines) (current-buffer)) @@ -4604,7 +4597,7 @@ If ARTICLE is an id, HEADER should be the article headers. If ALL-HEADERS is non-nil, no headers are hidden." (save-excursion ;; Make sure we start in a summary buffer. - (unless (eq major-mode 'gnus-summary-mode) + (unless (derived-mode-p 'gnus-summary-mode) (set-buffer gnus-summary-buffer)) (setq gnus-summary-buffer (current-buffer)) (let* ((gnus-article (if header (mail-header-number header) article)) @@ -4715,7 +4708,7 @@ If ALL-HEADERS is non-nil, no headers are hidden." (let ((gnus-article-buffer (current-buffer)) buffer-read-only (inhibit-read-only t)) - (unless (eq major-mode 'gnus-article-mode) + (unless (derived-mode-p 'gnus-article-mode) (gnus-article-mode)) (setq buffer-read-only nil gnus-article-wash-types nil @@ -4777,7 +4770,7 @@ If a prefix ARG is given, ask for a name for this sticky article buffer." "*")) (if (and (gnus-buffer-live-p new-art-buf-name) (with-current-buffer new-art-buf-name - (eq major-mode 'gnus-sticky-article-mode))) + (derived-mode-p 'gnus-sticky-article-mode))) (switch-to-buffer new-art-buf-name) (setq new-art-buf-name (rename-buffer new-art-buf-name t))) (gnus-sticky-article-mode)) @@ -4793,7 +4786,7 @@ If none is given, assume the current buffer and kill it if it has (unless buffer (setq buffer (current-buffer))) (with-current-buffer buffer - (when (eq major-mode 'gnus-sticky-article-mode) + (when (derived-mode-p 'gnus-sticky-article-mode) (gnus-kill-buffer buffer)))) (defun gnus-kill-sticky-article-buffers (arg) @@ -4802,11 +4795,11 @@ If a prefix ARG is given, ask for confirmation." (interactive "P") (dolist (buf (gnus-buffers)) (with-current-buffer buf - (when (eq major-mode 'gnus-sticky-article-mode) - (if (not arg) - (gnus-kill-buffer buf) - (when (yes-or-no-p (concat "Kill buffer " (buffer-name buf) "? ")) - (gnus-kill-buffer buf))))))) + (when (derived-mode-p 'gnus-sticky-article-mode) + (if (not arg) + (gnus-kill-buffer buf) + (when (yes-or-no-p (concat "Kill buffer " (buffer-name buf) "? ")) + (gnus-kill-buffer buf))))))) ;;; ;;; Gnus MIME viewing functions @@ -4894,7 +4887,7 @@ General format specifiers can also be used. See Info node (defmacro gnus-bind-safe-url-regexp (&rest body) "Bind `mm-w3m-safe-url-regexp' according to `gnus-safe-html-newsgroups'." `(let ((mm-w3m-safe-url-regexp - (let ((group (if (and (eq major-mode 'gnus-article-mode) + (let ((group (if (and (derived-mode-p 'gnus-article-mode) (gnus-buffer-live-p gnus-article-current-summary)) (with-current-buffer gnus-article-current-summary @@ -6478,7 +6471,7 @@ not have a face in `gnus-article-boring-faces'." (defun gnus-article-check-buffer () "Beep if not in an article buffer." - (unless (equal major-mode 'gnus-article-mode) + (unless (derived-mode-p 'gnus-article-mode) (error "Command invoked outside of a Gnus article buffer"))) (defun gnus-article-read-summary-keys (&optional arg key not-restore-window) @@ -6593,7 +6586,7 @@ not have a face in `gnus-article-boring-faces'." new-sum-point (window-live-p win) (with-current-buffer (window-buffer win) - (eq major-mode 'gnus-summary-mode))) + (derived-mode-p 'gnus-summary-mode))) (set-window-point win new-sum-point) (set-window-start win new-sum-start) (set-window-hscroll win new-sum-hscroll)))) diff --git a/lisp/gnus-bookmark.el b/lisp/gnus-bookmark.el index 7a3d27362..c31cb1aef 100644 --- a/lisp/gnus-bookmark.el +++ b/lisp/gnus-bookmark.el @@ -190,7 +190,7 @@ So the cdr of each bookmark is an alist too.") "Set a bookmark for this article." (interactive) (gnus-bookmark-maybe-load-default-file) - (if (or (not (eq major-mode 'gnus-summary-mode)) + (if (or (not (derived-mode-p 'gnus-summary-mode)) (not gnus-article-current)) (error "Please select an article in the Gnus summary buffer") (let* ((group (car gnus-article-current)) @@ -473,7 +473,7 @@ That is, all information but the name." ;; Been to lazy to use gnus-bookmark-save... (defalias 'gnus-bookmark-bmenu-save 'gnus-bookmark-write-file) -(defun gnus-bookmark-bmenu-mode () +(define-derived-mode gnus-bookmark-bmenu-mode fundamental-mode "Bookmark Menu" "Major mode for editing a list of Gnus bookmarks. Each line describes one of the bookmarks in Gnus. Letters do not insert themselves; instead, they are commands. @@ -497,13 +497,8 @@ Gnus bookmarks names preceded by a \"*\" have annotations. in another buffer. \\[gnus-bookmark-bmenu-show-all-annotations] -- show the annotations of all bookmarks in another buffer. \\[gnus-bookmark-bmenu-edit-annotation] -- edit the annotation for the current bookmark." - (kill-all-local-variables) - (use-local-map gnus-bookmark-bmenu-mode-map) (setq truncate-lines t) - (setq buffer-read-only t) - (setq major-mode 'gnus-bookmark-bmenu-mode) - (setq mode-name "Bookmark Menu") - (gnus-run-mode-hooks 'gnus-bookmark-bmenu-mode-hook)) + (setq buffer-read-only t)) ;; avoid compilation warnings (defvar gnus-bookmark-bmenu-toggle-infos nil) diff --git a/lisp/gnus-cus.el b/lisp/gnus-cus.el index c8fb5b5dc..247c081a2 100644 --- a/lisp/gnus-cus.el +++ b/lisp/gnus-cus.el @@ -33,7 +33,7 @@ ;;; Widgets: -(defun gnus-custom-mode () +(define-derived-mode gnus-custom-mode fundamental-mode "Gnus Customize" "Major mode for editing Gnus customization buffers. The following commands are available: @@ -45,9 +45,6 @@ The following commands are available: Entry to this mode calls the value of `gnus-custom-mode-hook' if that value is non-nil." - (kill-all-local-variables) - (setq major-mode 'gnus-custom-mode - mode-name "Gnus Customize") (use-local-map widget-keymap) ;; Emacs stuff: (when (and (facep 'custom-button-face) @@ -63,8 +60,7 @@ if that value is non-nil." (set (make-local-variable 'widget-push-button-prefix) "") (set (make-local-variable 'widget-push-button-suffix) "") (set (make-local-variable 'widget-link-prefix) "") - (set (make-local-variable 'widget-link-suffix) "")) - (gnus-run-mode-hooks 'gnus-custom-mode-hook)) + (set (make-local-variable 'widget-link-suffix) ""))) ;;; Group Customization: diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index 9533f5819..c8945e575 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -1105,7 +1105,7 @@ When FORCE, rebuild the tool bar." (set (make-local-variable 'tool-bar-map) map)))) gnus-group-tool-bar-map) -(defun gnus-group-mode () +(define-derived-mode gnus-group-mode fundamental-mode "Group" "Major mode for reading news. All normal editing commands are switched off. @@ -1122,17 +1122,12 @@ For more in-depth information on this mode, read the manual (`\\[gnus-info-find- The following commands are available: \\{gnus-group-mode-map}" - (interactive) - (kill-all-local-variables) (when (gnus-visual-p 'group-menu 'menu) (gnus-group-make-menu-bar) (gnus-group-make-tool-bar)) (gnus-simplify-mode-line) - (setq major-mode 'gnus-group-mode) - (setq mode-name "Group") (gnus-group-set-mode-line) (setq mode-line-process nil) - (use-local-map gnus-group-mode-map) (buffer-disable-undo) (setq truncate-lines t) (setq buffer-read-only t @@ -1143,8 +1138,7 @@ The following commands are available: (when gnus-use-undo (gnus-undo-mode 1)) (when gnus-slave - (gnus-slave-mode)) - (gnus-run-mode-hooks 'gnus-group-mode-hook)) + (gnus-slave-mode))) (defun gnus-update-group-mark-positions () (save-excursion @@ -1193,7 +1187,7 @@ The following commands are available: (defun gnus-group-setup-buffer () (set-buffer (gnus-get-buffer-create gnus-group-buffer)) - (unless (eq major-mode 'gnus-group-mode) + (unless (derived-mode-p 'gnus-group-mode) (gnus-group-mode))) (defun gnus-group-name-charset (method group) @@ -2147,7 +2141,7 @@ be permanent." (defun gnus-group-name-at-point () "Return a group name from around point if it exists, or nil." - (if (eq major-mode 'gnus-group-mode) + (if (derived-mode-p 'gnus-group-mode) (let ((group (gnus-group-group-name))) (when group (gnus-group-decoded-name group))) @@ -3114,7 +3108,7 @@ If SOLID (the prefix), create a solid group." (gnus-group-read-ephemeral-group group method t (cons (current-buffer) - (if (eq major-mode 'gnus-summary-mode) 'summary 'group)))))) + (if (derived-mode-p 'gnus-summary-mode) 'summary 'group)))))) (defvar nnrss-group-alist) (eval-when-compile @@ -3229,7 +3223,7 @@ mail messages or news articles in files that have numeric names." (unless (gnus-group-read-ephemeral-group name method t (cons (current-buffer) - (if (eq major-mode 'gnus-summary-mode) + (if (derived-mode-p 'gnus-summary-mode) 'summary 'group))) (error "Couldn't enter %s" dir)))) @@ -4319,7 +4313,7 @@ The hook `gnus-suspend-gnus-hook' is called before actually suspending." (unless (or (eq buf group-buf) (eq buf gnus-dribble-buffer) (with-current-buffer buf - (eq major-mode 'message-mode))) + (derived-mode-p 'message-mode))) (gnus-kill-buffer buf))) (setq gnus-backlog-articles nil) (gnus-kill-gnus-frames) diff --git a/lisp/gnus-kill.el b/lisp/gnus-kill.el index b3f06de08..011288e28 100644 --- a/lisp/gnus-kill.el +++ b/lisp/gnus-kill.el @@ -75,20 +75,20 @@ of time." ;;; Gnus Kill File Mode ;;; -(defvar gnus-kill-file-mode-map nil) - -(unless gnus-kill-file-mode-map - (gnus-define-keymap (setq gnus-kill-file-mode-map - (copy-keymap emacs-lisp-mode-map)) - "\C-c\C-k\C-s" gnus-kill-file-kill-by-subject - "\C-c\C-k\C-a" gnus-kill-file-kill-by-author - "\C-c\C-k\C-t" gnus-kill-file-kill-by-thread - "\C-c\C-k\C-x" gnus-kill-file-kill-by-xref - "\C-c\C-a" gnus-kill-file-apply-buffer - "\C-c\C-e" gnus-kill-file-apply-last-sexp - "\C-c\C-c" gnus-kill-file-exit)) - -(defun gnus-kill-file-mode () +(defvar gnus-kill-file-mode-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map emacs-lisp-mode-map) + (gnus-define-keymap map + "\C-c\C-k\C-s" gnus-kill-file-kill-by-subject + "\C-c\C-k\C-a" gnus-kill-file-kill-by-author + "\C-c\C-k\C-t" gnus-kill-file-kill-by-thread + "\C-c\C-k\C-x" gnus-kill-file-kill-by-xref + "\C-c\C-a" gnus-kill-file-apply-buffer + "\C-c\C-e" gnus-kill-file-apply-last-sexp + "\C-c\C-c" gnus-kill-file-exit) + map)) + +(define-derived-mode gnus-kill-file-mode emacs-lisp-mode "Kill" "Major mode for editing kill files. If you are using this mode - you probably shouldn't. Kill files @@ -151,15 +151,7 @@ which are marked as read in the previous Gnus sessions. Marks other than `D' should be used for articles which should really be deleted. Entry to this mode calls emacs-lisp-mode-hook and -gnus-kill-file-mode-hook with no arguments, if that value is non-nil." - (interactive) - (kill-all-local-variables) - (use-local-map gnus-kill-file-mode-map) - (set-syntax-table emacs-lisp-mode-syntax-table) - (setq major-mode 'gnus-kill-file-mode) - (setq mode-name "Kill") - (lisp-mode-variables nil) - (gnus-run-mode-hooks 'emacs-lisp-mode-hook 'gnus-kill-file-mode-hook)) +gnus-kill-file-mode-hook with no arguments, if that value is non-nil.") (defun gnus-kill-file-edit-file (newsgroup) "Begin editing a kill file for NEWSGROUP. @@ -175,10 +167,10 @@ If NEWSGROUP is nil, the global kill file is selected." (let ((buffer (find-file-noselect file))) (cond ((get-buffer-window buffer) (pop-to-buffer buffer)) - ((eq major-mode 'gnus-group-mode) + ((derived-mode-p 'gnus-group-mode) (gnus-configure-windows 'group) ;Take all windows. (pop-to-buffer buffer)) - ((eq major-mode 'gnus-summary-mode) + ((derived-mode-p 'gnus-summary-mode) (gnus-configure-windows 'article) (pop-to-buffer gnus-article-buffer) (bury-buffer gnus-article-buffer) @@ -201,7 +193,7 @@ If NEWSGROUP is nil, the global kill file is selected." ;; REGEXP: The string to kill. (save-excursion (let (string) - (unless (eq major-mode 'gnus-kill-file-mode) + (unless (derived-mode-p 'gnus-kill-file-mode) (gnus-kill-set-kill-buffer)) (unless dont-move (goto-char (point-max))) @@ -520,7 +512,7 @@ COMMAND must be a Lisp expression or a string representing a key sequence." (setq kill-list (cdr kill-list)))) (gnus-execute field kill-list command nil (not all)))))) (switch-to-buffer old-buffer) - (when (and (eq major-mode 'gnus-kill-file-mode) regexp (not silent)) + (when (and (derived-mode-p 'gnus-kill-file-mode) regexp (not silent)) (gnus-pp-gnus-kill (nconc (list 'gnus-kill field (if (consp regexp) (list 'quote regexp) regexp)) diff --git a/lisp/gnus-srvr.el b/lisp/gnus-srvr.el index 69774587d..2f151e570 100644 --- a/lisp/gnus-srvr.el +++ b/lisp/gnus-srvr.el @@ -244,6 +244,7 @@ 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)) @@ -869,7 +870,7 @@ claim them." (gnus-message 5 "Connecting to %s...done" (nth 1 method)) t)))) -(defun gnus-browse-mode () +(define-derived-mode gnus-browse-mode fundamental-mode "Browse Server" "Major mode for browsing a foreign server. All normal editing commands are switched off. @@ -884,20 +885,14 @@ buffer. 2) `\\[gnus-browse-read-group]' to read a group ephemerally. 3) `\\[gnus-browse-exit]' to return to the group buffer." - (interactive) - (kill-all-local-variables) (when (gnus-visual-p 'browse-menu 'menu) (gnus-browse-make-menu-bar)) (gnus-simplify-mode-line) - (setq major-mode 'gnus-browse-mode) - (setq mode-name "Browse Server") (setq mode-line-process nil) - (use-local-map gnus-browse-mode-map) (buffer-disable-undo) (setq truncate-lines t) (gnus-set-default-directory) - (setq buffer-read-only t) - (gnus-run-mode-hooks 'gnus-browse-mode-hook)) + (setq buffer-read-only t)) (defun gnus-browse-read-group (&optional no-article number) "Enter the group at the current line. @@ -1022,7 +1017,7 @@ doing the deletion." (defun gnus-browse-exit () "Quit browsing and return to the group buffer." (interactive) - (when (eq major-mode 'gnus-browse-mode) + (when (derived-mode-p 'gnus-browse-mode) (gnus-kill-buffer (current-buffer))) ;; Insert the newly subscribed groups in the group buffer. (with-current-buffer gnus-group-buffer diff --git a/lisp/score-mode.el b/lisp/score-mode.el index ec24f1f96..58767cfcc 100644 --- a/lisp/score-mode.el +++ b/lisp/score-mode.el @@ -40,13 +40,13 @@ (defvar gnus-score-edit-exit-function nil "Function run on exit from the score buffer.") -(defvar gnus-score-mode-map nil) -(unless gnus-score-mode-map - (setq gnus-score-mode-map (make-sparse-keymap)) - (set-keymap-parent gnus-score-mode-map emacs-lisp-mode-map) - (define-key gnus-score-mode-map "\C-c\C-c" 'gnus-score-edit-exit) - (define-key gnus-score-mode-map "\C-c\C-d" 'gnus-score-edit-insert-date) - (define-key gnus-score-mode-map "\C-c\C-p" 'gnus-score-pretty-print)) +(defvar gnus-score-mode-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map emacs-lisp-mode-map) + (define-key map "\C-c\C-c" 'gnus-score-edit-exit) + (define-key map "\C-c\C-d" 'gnus-score-edit-insert-date) + (define-key map "\C-c\C-p" 'gnus-score-pretty-print) + map)) (defvar score-mode-syntax-table (let ((table (copy-syntax-table lisp-mode-syntax-table))) @@ -58,21 +58,13 @@ (defvar score-mode-coding-system mm-universal-coding-system) ;;;###autoload -(defun gnus-score-mode () +(define-derived-mode gnus-score-mode emacs-lisp-mode "Score" "Mode for editing Gnus score files. This mode is an extended emacs-lisp mode. \\{gnus-score-mode-map}" - (interactive) - (kill-all-local-variables) - (use-local-map gnus-score-mode-map) (gnus-score-make-menu-bar) - (set-syntax-table score-mode-syntax-table) - (setq major-mode 'gnus-score-mode) - (setq mode-name "Score") - (lisp-mode-variables nil) - (make-local-variable 'gnus-score-edit-exit-function) - (gnus-run-mode-hooks 'emacs-lisp-mode-hook 'gnus-score-mode-hook)) + (make-local-variable 'gnus-score-edit-exit-function)) (defun gnus-score-make-menu-bar () (unless (boundp 'gnus-score-menu) -- 2.34.1