]> code.delx.au - gnu-emacs/commitdiff
Use define-derived-mode (and derived-mode-p).
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 11 Sep 2013 03:31:56 +0000 (23:31 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 11 Sep 2013 03:31:56 +0000 (23:31 -0400)
* lisp/play/snake.el (snake-mode):
* lisp/play/mpuz.el (mpuz-mode):
* lisp/play/landmark.el (lm-mode):
* lisp/play/blackbox.el (blackbox-mode):
* lisp/play/5x5.el (5x5-mode):
* lisp/obsolete/options.el (Edit-options-mode):
* lisp/net/quickurl.el (quickurl-list-mode):
* lisp/net/newst-treeview.el (newsticker-treeview-mode):
* lisp/mail/rmailsum.el (rmail-summary-mode):
* lisp/mail/mspools.el (mspools-mode):
* lisp/locate.el (locate-mode):
* lisp/ibuffer.el (ibuffer-mode):
* lisp/emulation/ws-mode.el (wordstar-mode):
* lisp/emacs-lisp/debug.el (debugger-mode):
* lisp/array.el (array-mode):
* lisp/net/eudc.el (eudc-mode): Use define-derived-mode.
* lisp/net/mairix.el (mairix-searches-mode-font-lock-keywords):
Move initialization into declaration.
(mairix-searches-mode): Use define-derived-mode.
* lisp/net/eudc-hotlist.el (eudc-hotlist-mode): Use define-derived-mode.
(eudc-edit-hotlist): Use dolist.
* lisp/man.el (Man-mode-syntax-table): Rename from man-mode-syntax-table.
(Man-mode): Use define-derived-mode.
* lisp/info.el (Info-edit-mode-map): Rename from Info-edit-map.
(Info-edit-mode): Use define-derived-mode.
(Info-cease-edit): Use Info-mode.
* lisp/eshell/esh-mode.el (eshell-mode-syntax-table): Move initialization
into declaration.
(eshell-mode): Use define-derived-mode.
* lisp/chistory.el (command-history-mode-map): Rename from
command-history-map.
(command-history-mode): Use define-derived-mode.
* lisp/calc/calc.el (calc-trail-mode-map): New var.
(calc-trail-mode): Use define-derived-mode.
(calc-trail-buffer): Set calc-main-buffer manually.
* lisp/bookmark.el (bookmark-insert-annotation): New function.
(bookmark-edit-annotation): Use it.
(bookmark-edit-annotation-mode): Make it a proper major mode.
(bookmark-send-edited-annotation): Use derived-mode-p.
* lisp/arc-mode.el (archive-mode): Move kill-all-local-variables a tiny bit
closer to its ideal place.  Use \' to match EOS.

* lisp/cedet/semantic/grammar.el (semantic-grammar-mode): Use define-derived-mode.
(semantic-grammar-mode-syntax-table): Rename from
semantic-grammar-syntax-table.
(semantic-grammar-mode-map): Rename from semantic-grammar-map.
* lisp/cedet/data-debug.el (data-debug-mode-map): Rename from data-debug-map.
(data-debug-mode): Use define-derived-mode.

* lisp/gnus/score-mode.el (gnus-score-mode-map): Move initialization
into declaration.
(gnus-score-mode): Use define-derived-mode.
* lisp/gnus/gnus-srvr.el (gnus-browse-mode): Use define-derived-mode.
* lisp/gnus/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.
* lisp/gnus/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.
* lisp/gnus/gnus-cus.el (gnus-custom-mode): Use define-derived-mode.
* lisp/gnus/gnus-bookmark.el (gnus-bookmark-bmenu-mode): Use define-derived-mode.
* lisp/gnus/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.

38 files changed:
lisp/ChangeLog
lisp/arc-mode.el
lisp/array.el
lisp/bookmark.el
lisp/calc/calc.el
lisp/cedet/ChangeLog
lisp/cedet/data-debug.el
lisp/cedet/semantic/grammar.el
lisp/chistory.el
lisp/comint.el
lisp/emacs-lisp/debug.el
lisp/emulation/ws-mode.el
lisp/eshell/esh-mode.el
lisp/gnus/ChangeLog
lisp/gnus/gnus-art.el
lisp/gnus/gnus-bookmark.el
lisp/gnus/gnus-cus.el
lisp/gnus/gnus-group.el
lisp/gnus/gnus-kill.el
lisp/gnus/gnus-srvr.el
lisp/gnus/score-mode.el
lisp/ibuffer.el
lisp/info.el
lisp/locate.el
lisp/mail/mspools.el
lisp/mail/rmailsum.el
lisp/man.el
lisp/net/eudc-hotlist.el
lisp/net/eudc.el
lisp/net/mairix.el
lisp/net/newst-treeview.el
lisp/net/quickurl.el
lisp/obsolete/options.el
lisp/play/5x5.el
lisp/play/blackbox.el
lisp/play/landmark.el
lisp/play/mpuz.el
lisp/play/snake.el

index 135145fe7fc74f8803d796291932a8dc3681d761..e1f1aaa1888ee516ac9c71fa33e5c9097de1874b 100644 (file)
@@ -1,5 +1,47 @@
 2013-09-11  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * play/snake.el (snake-mode):
+       * play/mpuz.el (mpuz-mode):
+       * play/landmark.el (lm-mode):
+       * play/blackbox.el (blackbox-mode):
+       * play/5x5.el (5x5-mode):
+       * obsolete/options.el (Edit-options-mode):
+       * net/quickurl.el (quickurl-list-mode):
+       * net/newst-treeview.el (newsticker-treeview-mode):
+       * mail/rmailsum.el (rmail-summary-mode):
+       * mail/mspools.el (mspools-mode):
+       * locate.el (locate-mode):
+       * ibuffer.el (ibuffer-mode):
+       * emulation/ws-mode.el (wordstar-mode):
+       * emacs-lisp/debug.el (debugger-mode):
+       * array.el (array-mode):
+       * net/eudc.el (eudc-mode): Use define-derived-mode.
+       * net/mairix.el (mairix-searches-mode-font-lock-keywords):
+       Move initialization into declaration.
+       (mairix-searches-mode): Use define-derived-mode.
+       * net/eudc-hotlist.el (eudc-hotlist-mode): Use define-derived-mode.
+       (eudc-edit-hotlist): Use dolist.
+       * man.el (Man-mode-syntax-table): Rename from man-mode-syntax-table.
+       (Man-mode): Use define-derived-mode.
+       * info.el (Info-edit-mode-map): Rename from Info-edit-map.
+       (Info-edit-mode): Use define-derived-mode.
+       (Info-cease-edit): Use Info-mode.
+       * eshell/esh-mode.el (eshell-mode-syntax-table): Move initialization
+       into declaration.
+       (eshell-mode): Use define-derived-mode.
+       * chistory.el (command-history-mode-map): Rename from
+       command-history-map.
+       (command-history-mode): Use define-derived-mode.
+       * calc/calc.el (calc-trail-mode-map): New var.
+       (calc-trail-mode): Use define-derived-mode.
+       (calc-trail-buffer): Set calc-main-buffer manually.
+       * bookmark.el (bookmark-insert-annotation): New function.
+       (bookmark-edit-annotation): Use it.
+       (bookmark-edit-annotation-mode): Make it a proper major mode.
+       (bookmark-send-edited-annotation): Use derived-mode-p.
+       * arc-mode.el (archive-mode): Move kill-all-local-variables a tiny bit
+       closer to its ideal place.  Use \' to match EOS.
+
        * profiler.el (profiler-calltree-find): Use function-equal.
 
 2013-09-10  Glenn Morris  <rgm@gnu.org>
index a4f7015c84496cb41c0f618f573250f6812add99..c22205d563459a839f0d38813ed0840e98dee081 100644 (file)
@@ -683,9 +683,9 @@ archive.
       ;; At present we cannot create archives from scratch
       (funcall (or (default-value 'major-mode) 'fundamental-mode))
     (if (and (not force) archive-files) nil
+      (kill-all-local-variables)
       (let* ((type (archive-find-type))
             (typename (capitalize (symbol-name type))))
-       (kill-all-local-variables)
        (make-local-variable 'archive-subtype)
        (setq archive-subtype type)
 
@@ -761,7 +761,7 @@ archive.
          ((looking-at "..-l[hz][0-9ds]-") 'lzh)
          ((looking-at "....................[\334]\247\304\375") 'zoo)
          ((and (looking-at "\C-z")     ; signature too simple, IMHO
-               (string-match "\\.[aA][rR][cC]$"
+               (string-match "\\.[aA][rR][cC]\\'"
                              (or buffer-file-name (buffer-name))))
           'arc)
           ;; This pattern modeled on the BSD/GNU+Linux `file' command.
index e60cbdfffc11056c3f1cf68a7de65140d0a5f420..8c4f609e62659dd1056721c9230dbc48af17d79a 100644 (file)
@@ -800,7 +800,7 @@ Return COLUMN."
 (put 'array-mode 'mode-class 'special)
 
 ;;;###autoload
-(defun array-mode ()
+(define-derived-mode array-mode fundamental-mode "Array"
   "Major mode for editing arrays.
 
   Array mode is a specialized mode for editing arrays.  An array is
@@ -863,9 +863,6 @@ take a numeric prefix argument):
         \\[array-display-local-variables]   Display the current values of local variables.
 
 Entering array mode calls the function `array-mode-hook'."
-
-  (interactive)
-  (kill-all-local-variables)
   (make-local-variable 'array-buffer-line)
   (make-local-variable 'array-buffer-column)
   (make-local-variable 'array-row)
@@ -888,13 +885,9 @@ Entering array mode calls the function `array-mode-hook'."
        (+ (floor (1- array-max-column) array-columns-per-line)
           (if array-rows-numbered 2 1)))
   (message "")
-  (setq major-mode 'array-mode)
-  (setq mode-name "Array")
   (force-mode-line-update)
   (set (make-local-variable 'truncate-lines) t)
-  (setq overwrite-mode 'overwrite-mode-textual)
-  (use-local-map array-mode-map)
-  (run-mode-hooks 'array-mode-hook))
+  (setq overwrite-mode 'overwrite-mode-textual))
 
 \f
 
index 9514317809b4ca1e14a1fd0b50bb9018601222c1..ce0d6831a3a81e7495e8ffc9ee44e8d60ac4ca5d 100644 (file)
@@ -862,31 +862,25 @@ It takes one argument, the name of the bookmark, as a string.")
     map)
   "Keymap for editing an annotation of a bookmark.")
 
-
-(defun bookmark-edit-annotation-mode (bookmark-name-or-record)
-  "Mode for editing the annotation of bookmark BOOKMARK-NAME-OR-RECORD.
-When you have finished composing, type \\[bookmark-send-annotation].
-
-\\{bookmark-edit-annotation-mode-map}"
-  (interactive)
-  (kill-all-local-variables)
-  (make-local-variable 'bookmark-annotation-name)
-  (setq bookmark-annotation-name bookmark-name-or-record)
-  (use-local-map bookmark-edit-annotation-mode-map)
-  (setq major-mode 'bookmark-edit-annotation-mode
-        mode-name "Edit Bookmark Annotation")
+(defun bookmark-insert-annotation (bookmark-name-or-record)
   (insert (funcall bookmark-edit-annotation-text-func bookmark-name-or-record))
   (let ((annotation (bookmark-get-annotation bookmark-name-or-record)))
     (if (and annotation (not (string-equal annotation "")))
-       (insert annotation)))
-  (run-mode-hooks 'text-mode-hook))
+       (insert annotation))))
+
+(define-derived-mode bookmark-edit-annotation-mode
+  text-mode "Edit Bookmark Annotation"
+  "Mode for editing the annotation of bookmarks.
+When you have finished composing, type \\[bookmark-send-annotation].
+
+\\{bookmark-edit-annotation-mode-map}")
 
 
 (defun bookmark-send-edited-annotation ()
   "Use buffer contents as annotation for a bookmark.
 Lines beginning with `#' are ignored."
   (interactive)
-  (if (not (eq major-mode 'bookmark-edit-annotation-mode))
+  (if (not (derived-mode-p 'bookmark-edit-annotation-mode))
       (error "Not in bookmark-edit-annotation-mode"))
   (goto-char (point-min))
   (while (< (point) (point-max))
@@ -906,7 +900,10 @@ Lines beginning with `#' are ignored."
 (defun bookmark-edit-annotation (bookmark-name-or-record)
   "Pop up a buffer for editing bookmark BOOKMARK-NAME-OR-RECORD's annotation."
   (pop-to-buffer (generate-new-buffer-name "*Bookmark Annotation Compose*"))
-  (bookmark-edit-annotation-mode bookmark-name-or-record))
+  (bookmark-insert-annotation bookmark-name-or-record)
+  (bookmark-edit-annotation-mode)
+  (set (make-local-variable 'bookmark-annotation-name)
+       bookmark-name-or-record))
 
 
 (defun bookmark-buffer-name ()
index 2eeb880c34db41181576e02a3c9c14d9d7e33344..2795a177a414b8b928c4b9bb38d6e08a7480b930 100644 (file)
@@ -1387,7 +1387,12 @@ Notations:  3.14e6     3.14 * 10^6
              (calc-check-defines))
          (setplist 'calc-define nil)))))
 
-(defun calc-trail-mode (&optional buf)
+(defvar calc-trail-mode-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map calc-mode-map)
+    map))
+
+(define-derived-mode calc-trail-mode fundamental-mode "Calc Trail"
   "Calc Trail mode.
 This mode is used by the *Calc Trail* buffer, which records all results
 obtained by the GNU Emacs Calculator.
@@ -1397,26 +1402,18 @@ the Trail.
 
 This buffer uses the same key map as the *Calculator* buffer; calculator
 commands given here will actually operate on the *Calculator* stack."
-  (interactive)
-  (fundamental-mode)
-  (use-local-map calc-mode-map)
-  (setq major-mode 'calc-trail-mode)
-  (setq mode-name "Calc Trail")
   (setq truncate-lines t)
   (setq buffer-read-only t)
   (make-local-variable 'overlay-arrow-position)
   (make-local-variable 'overlay-arrow-string)
-  (when buf
-    (set (make-local-variable 'calc-main-buffer) buf))
   (when (= (buffer-size) 0)
     (let ((buffer-read-only nil))
-      (insert (propertize "Emacs Calculator Trail\n" 'face 'italic))))
-  (run-mode-hooks 'calc-trail-mode-hook))
+      (insert (propertize "Emacs Calculator Trail\n" 'face 'italic)))))
 
 (defun calc-create-buffer ()
   "Create and initialize a buffer for the Calculator."
   (set-buffer (get-buffer-create "*Calculator*"))
-  (or (eq major-mode 'calc-mode)
+  (or (derived-mode-p 'calc-mode)
       (calc-mode))
   (setq max-lisp-eval-depth (max max-lisp-eval-depth 1000))
   (when calc-always-load-extensions
@@ -1439,7 +1436,7 @@ commands given here will actually operate on the *Calculator* stack."
     (when (get-buffer-window "*Calc Keypad*")
       (calc-keypad)
       (set-buffer (window-buffer)))
-    (if (eq major-mode 'calc-mode)
+    (if (derived-mode-p 'calc-mode)
        (calc-quit)
       (let ((oldbuf (current-buffer)))
        (calc-create-buffer)
@@ -1490,7 +1487,7 @@ commands given here will actually operate on the *Calculator* stack."
   (if (and (equal (buffer-name) "*Gnuplot Trail*")
           (> (recursion-depth) 0))
       (exit-recursive-edit)
-    (if (eq major-mode 'calc-edit-mode)
+    (if (derived-mode-p 'calc-edit-mode)
        (calc-edit-finish arg)
       (if calc-was-keypad-mode
           (calc-keypad)
@@ -1504,13 +1501,13 @@ commands given here will actually operate on the *Calculator* stack."
   (if (and (equal (buffer-name) "*Gnuplot Trail*")
           (> (recursion-depth) 0))
       (exit-recursive-edit))
-  (if (eq major-mode 'calc-edit-mode)
+  (if (derived-mode-p 'calc-edit-mode)
       (calc-edit-cancel)
     (if (and interactive
              calc-embedded-info
              (eq (current-buffer) (aref calc-embedded-info 0)))
         (calc-embedded nil)
-      (unless (eq major-mode 'calc-mode)
+      (unless (derived-mode-p 'calc-mode)
         (calc-create-buffer))
       (run-hooks 'calc-end-hook)
       (if (integerp calc-undo-length)
@@ -1631,10 +1628,10 @@ See calc-keypad for details."
             (if (math-lessp 1 time)
                 (calc-record time "(t)"))))
       (or (memq 'no-align calc-command-flags)
-         (eq major-mode 'calc-trail-mode)
+         (derived-mode-p 'calc-trail-mode)
          (calc-align-stack-window))
       (and (memq 'position-point calc-command-flags)
-          (if (eq major-mode 'calc-mode)
+          (if (derived-mode-p 'calc-mode)
               (progn
                 (goto-char (point-min))
                 (forward-line (1- calc-final-point-line))
@@ -1664,7 +1661,7 @@ See calc-keypad for details."
     (setq calc-command-flags (cons f calc-command-flags))))
 
 (defun calc-select-buffer ()
-  (or (eq major-mode 'calc-mode)
+  (or (derived-mode-p 'calc-mode)
       (if calc-main-buffer
          (set-buffer calc-main-buffer)
        (let ((buf (get-buffer "*Calculator*")))
@@ -1801,7 +1798,7 @@ See calc-keypad for details."
        (and calc-embedded-info (calc-embedded-mode-line-change))))))
 
 (defun calc-align-stack-window ()
-  (if (eq major-mode 'calc-mode)
+  (if (derived-mode-p 'calc-mode)
       (progn
        (let ((win (get-buffer-window (current-buffer))))
          (if win
@@ -1988,7 +1985,7 @@ See calc-keypad for details."
 (defvar calc-any-evaltos nil)
 (defun calc-refresh (&optional align)
   (interactive)
-  (and (eq major-mode 'calc-mode)
+  (and (derived-mode-p 'calc-mode)
        (not calc-executing-macro)
        (let* ((buffer-read-only nil)
              (save-point (point))
@@ -2016,7 +2013,7 @@ See calc-keypad for details."
             (calc-align-stack-window)
           (goto-char save-point))
         (if save-mark (set-mark save-mark))))
-  (and calc-embedded-info (not (eq major-mode 'calc-mode))
+  (and calc-embedded-info (not (derived-mode-p 'calc-mode))
        (with-current-buffer (aref calc-embedded-info 1)
         (calc-refresh align)))
   (setq calc-refresh-count (1+ calc-refresh-count)))
@@ -2078,12 +2075,13 @@ the United States."
           (null (buffer-name calc-trail-buffer)))
        (save-excursion
         (setq calc-trail-buffer (get-buffer-create "*Calc Trail*"))
-        (let ((buf (or (and (not (eq major-mode 'calc-mode))
+        (let ((buf (or (and (not (derived-mode-p 'calc-mode))
                             (get-buffer "*Calculator*"))
                        (current-buffer))))
           (set-buffer calc-trail-buffer)
-          (or (eq major-mode 'calc-trail-mode)
-              (calc-trail-mode buf)))))
+          (unless (derived-mode-p 'calc-trail-mode)
+             (calc-trail-mode)
+             (set (make-local-variable 'calc-main-buffer) buf)))))
   (or (and calc-trail-pointer
           (eq (marker-buffer calc-trail-pointer) calc-trail-buffer))
       (with-current-buffer calc-trail-buffer
@@ -2152,7 +2150,7 @@ the United States."
 
 (defun calc-trail-here ()
   (interactive)
-  (if (eq major-mode 'calc-trail-mode)
+  (if (derived-mode-p 'calc-trail-mode)
       (progn
        (beginning-of-line)
        (if (bobp)
index 50467fa6e3750e70222cee741ee939f63491d9c8..f5528202bb49751206b5149185ef4b9d2c1070c4 100644 (file)
@@ -1,3 +1,12 @@
+2013-09-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * semantic/grammar.el (semantic-grammar-mode): Use define-derived-mode.
+       (semantic-grammar-mode-syntax-table): Rename from
+       semantic-grammar-syntax-table.
+       (semantic-grammar-mode-map): Rename from semantic-grammar-map.
+       * data-debug.el (data-debug-mode-map): Rename from data-debug-map.
+       (data-debug-mode): Use define-derived-mode.
+
 2013-09-05  Glenn Morris  <rgm@gnu.org>
 
        * semantic/fw.el (semantic-make-local-hook):
 
        * semantic/decorate/mode.el
        (semantic-decoration-on-includes-p-default)
-        (semantic-decoration-on-includes-highlight-default): Declare for
+       (semantic-decoration-on-includes-highlight-default): Declare for
        byte compiler.
 
        * semantic/wisent/python.el (semantic/format): New require.
 
 2013-07-27  Eric Ludlam <zappo@gnu.org>
 
-       * lisp/cedet/semantic/edit.el (semantic-edits-splice-remove): Wrap
-       debug message removing middle tag in semantic-edits-verbose-flag
+       * lisp/cedet/semantic/edit.el (semantic-edits-splice-remove):
+       Wrap debug message removing middle tag in semantic-edits-verbose-flag
        check.
 
 2013-07-27  David Engster <deng@randomsample.de>
@@ -69,8 +78,8 @@
        `semantic/decorate/include' anymore.
        (semantic-toggle-decoration-style): Error if an unknown decoration
        style is toggled.
-       (define-semantic-decoration-style): Add new :load option.  When
-       :load is specified, add autoload tokens for the definition
+       (define-semantic-decoration-style): Add new :load option.
+       When :load is specified, add autoload tokens for the definition
        functions so that code is loaded when the mode is used.
        (semantic-decoration-on-includes): New autoload definition for
        highlighting includes.
        * semantic/ctxt.el (semantic-ctxt-end-of-symbol): New.
        (semantic-ctxt-current-symbol-default): New.
 
-       * semantic/bovine/el.el (semantic-default-elisp-setup): Add
-       autoload cookie.  Explain existence.
+       * semantic/bovine/el.el (semantic-default-elisp-setup):
+       Add autoload cookie.  Explain existence.
        (footer): Add local variable for loaddefs.
 
        * semantic/db.el (semanticdb-file-table-object): Add new filter,
        * ede/cpp-root.el (ede-preprocessor-map): Protect against init
        problems.
 
-       * ede/proj.el (ede-proj-target): Added a new "custom" option for
+       * ede/proj.el (ede-proj-target): Add a new "custom" option for
        custom symbols representing a compiler or linker instead of
        restricting things to only the predefined compilers and linkers.
 
 2013-04-27  David Engster  <deng@randomsample.de>
 
        * semantic/complete.el
-       (semantic-collector-calculate-completions-raw): If
-       `completionslist' is not set, refresh the cache if necessary and
+       (semantic-collector-calculate-completions-raw):
+       If `completionslist' is not set, refresh the cache if necessary and
        use it for completions.  This fixes the
        `semantic-collector-buffer-deep' collector (bug#14265).
 
 2013-03-26  Leo Liu  <sdl.web@gmail.com>
 
-       * semantic/senator.el (senator-copy-tag-to-register): Move
-       register handling logic from register.el.  (Bug#14052)
+       * semantic/senator.el (senator-copy-tag-to-register):
+       Move register handling logic from register.el.  (Bug#14052)
 
 2013-03-21  Eric Ludlam  <zappo@gnu.org>
 
 
        * semantic/find.el (semantic-filter-tags-by-class): New function.
 
-       * semantic/tag-ls.el (semantic-tag-similar-p-default): Add
-       short-circuit in case tag1 and 2 are identical.
+       * semantic/tag-ls.el (semantic-tag-similar-p-default):
+       Add short-circuit in case tag1 and 2 are identical.
 
        * semantic/analyze/fcn.el
-       (semantic-analyze-dereference-metatype-stack): Use
-       `semantic-tag-similar-p' instead of 'eq' when comparing two tags
+       (semantic-analyze-dereference-metatype-stack):
+       Use `semantic-tag-similar-p' instead of 'eq' when comparing two tags
        during metatype evaluation in case they are the same, but not the
        same node.  (Tweaked patch from Tomasz Gajewski) (Tiny change)
 
-       * semantic/db-find.el (semanticdb-partial-synchronize): Fix
-       require to semantic/db-typecache to be correct.
+       * semantic/db-find.el (semanticdb-partial-synchronize):
+       Fix require to semantic/db-typecache to be correct.
        (semanticdb-find-tags-external-children-of-type): Make this a
        brutish search by default.
 
        input tag as the place to start searching for externally defined
        methods.
 
-       * semantic/db-file.el (semanticdb-default-save-directory): Doc
-       fix: Add ref to default value.
+       * semantic/db-file.el (semanticdb-default-save-directory):
+       Doc fix: Add ref to default value.
 
-       * semantic/complete.el (semantic-complete-post-command-hook): When
-       detecting if cursor is outside completion area, do so if cursor
+       * semantic/complete.el (semantic-complete-post-command-hook):
+       When detecting if cursor is outside completion area, do so if cursor
        moves before start of overlay, or the original starting location
        of the overlay (i.e., if user deletes past beginning of the
        overlay region).
        (semantic-complete-inline-tag-engine): Initialize original start
        of `semantic-complete-inline-overlay'.
 
-       * semantic/bovine/c.el (semantic-c-describe-environment): Update
-       some section titles.  Test semanticdb table before printing it.
+       * semantic/bovine/c.el (semantic-c-describe-environment):
+       Update some section titles.  Test semanticdb table before printing it.
        (semantic-c-reset-preprocessor-symbol-map): Update
        `semantic-lex-spp-macro-symbol-obarray' outside the loop over all
        the files contributing to its value.
        * srecode/cpp.el (srecode-semantic-handle-:c): Replace all
        characters in FILENAME_SYMBOL that aren't valid CPP symbol chars.
 
-       * srecode/map.el (srecode-map-validate-file-for-mode): Force
-       semantic to load if it is not active in the template being added
+       * srecode/map.el (srecode-map-validate-file-for-mode):
+       Force semantic to load if it is not active in the template being added
        to the map.
 
        * srecode/srt.el: Add local variables for setting the autoload
        has both a version variable and a Version: comment, always use
        `call-next-method'.
 
-       * ede/cpp-root.el (ede-set-project-variables): Deleted.
+       * ede/cpp-root.el (ede-set-project-variables): Delete.
        `ede-preprocessor-map' does the job this function was attempting
        to do with :spp-table.
        (ede-preprocessor-map): Update file tests to provide better
 2013-03-21  David Engster  <deng@randomsample.de>
 
        * semantic/bovine/c.el (semantic-get-local-variables): Also add a
-       new variable 'this' if we are in an inline member function.  For
-       detecting this, we check overlays at point if there is a class
+       new variable 'this' if we are in an inline member function.
+       For detecting this, we check overlays at point if there is a class
        spanning the current function.  Also, the variable 'this' has to
        be a pointer.
 
 
 2013-03-21  Tomasz Gajewski  <tomga@wp.pl>  (tiny change)
 
-       * ede/cpp-root.el (ede-project-autoload, initialize-instance): Fix
-       EDE file symbol to match rename.  Fix ede-cpp-root symbol to
+       * ede/cpp-root.el (ede-project-autoload, initialize-instance):
+       Fix EDE file symbol to match rename.  Fix ede-cpp-root symbol to
        include -project in name.
 
 2013-03-21  Alex Ott  <alexott@gmail.com>
 
-       * cedet-files.el (cedet-files-list-recursively): New.  Recursively
-       find files whose names are matching to given regex.
+       * cedet-files.el (cedet-files-list-recursively): New.
+       Recursively find files whose names are matching to given regex.
 
        * ede.el (ede-current-project): Rewrite to avoid imperative style.
 
index c468ec1046a9d314141a05e5c643adee97dbd95f..4658c604211864adb255b2056c1840d93e3793fa 100644 (file)
@@ -869,7 +869,8 @@ If PARENT is non-nil, it is somehow related as a parent to thing."
     table)
   "Syntax table used in data-debug macro buffers.")
 
-(defvar data-debug-map
+(define-obsolete-variable-alias 'data-debug-map 'data-debug-mode-map "24.1")
+(defvar data-debug-mode-map
   (let ((km (make-sparse-keymap)))
     (suppress-keymap km)
     (define-key km [mouse-2] 'data-debug-expand-or-contract-mouse)
@@ -887,22 +888,15 @@ If PARENT is non-nil, it is somehow related as a parent to thing."
   :group 'data-debug
   :type 'hook)
 
-(defun data-debug-mode ()
+(define-derived-mode data-debug-mode fundamental-mode "DATA-DEBUG"
   "Major-mode for the Analyzer debugger.
 
-\\{data-debug-map}"
-  (interactive)
-  (kill-all-local-variables)
-  (setq major-mode 'data-debug-mode
-        mode-name "DATA-DEBUG"
-       comment-start ";;"
+\\{data-debug-mode-map}"
+  (setq comment-start ";;"
        comment-end ""
        buffer-read-only t)
-  (set (make-local-variable 'comment-start-skip)
+  (setq-local comment-start-skip
        "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+ *")
-  (set-syntax-table data-debug-mode-syntax-table)
-  (use-local-map data-debug-map)
-  (run-hooks 'data-debug-hook)
   (buffer-disable-undo)
   (set (make-local-variable 'font-lock-global-modes) nil)
   (font-lock-mode -1)
index ce658cd5d544a998d57603f9a9705621d2d0faa4..60c4ccadf65d88f7b5ae73b53c118afb6d1112ab 100644 (file)
@@ -860,7 +860,7 @@ Lisp code."
       ;; Use Unix EOLs, so that the file is portable to all platforms.
       (setq buffer-file-coding-system 'raw-text-unix)
       (erase-buffer)
-      (unless (eq major-mode 'emacs-lisp-mode)
+      (unless (derived-mode-p 'emacs-lisp-mode)
         (emacs-lisp-mode))
 
 ;;;; Header + Prologue
@@ -1102,7 +1102,9 @@ END is the limit of the search."
 ;;;; Define major mode
 ;;;;
 
-(defvar semantic-grammar-syntax-table
+(define-obsolete-variable-alias 'semantic-grammar-syntax-table
+  'semantic-grammar-mode-syntax-table "24.1")
+(defvar semantic-grammar-mode-syntax-table
   (let ((table (make-syntax-table (standard-syntax-table))))
     (modify-syntax-entry ?\: "."     table) ;; COLON
     (modify-syntax-entry ?\> "."     table) ;; GT
@@ -1170,7 +1172,9 @@ END is the limit of the search."
   semantic-grammar-mode-keywords-1
   "Font Lock keywords used to highlight Semantic grammar buffers.")
 
-(defvar semantic-grammar-map
+(define-obsolete-variable-alias 'semantic-grammar-map
+  'semantic-grammar-mode-map "24.1")
+(defvar semantic-grammar-mode-map
   (let ((km (make-sparse-keymap)))
 
     (define-key km "|" 'semantic-grammar-electric-punctuation)
@@ -1271,22 +1275,17 @@ the change bounds to encompass the whole nonterminal tag."
                                (semantic-tag-start outer)
                                (semantic-tag-end outer)))))
 
-(defun semantic-grammar-mode ()
+(define-derived-mode semantic-grammar-mode
+  fundamental-mode "Semantic Grammar Framework"
   "Initialize a buffer for editing Semantic grammars.
 
-\\{semantic-grammar-map}"
-  (interactive)
-  (kill-all-local-variables)
-  (setq major-mode 'semantic-grammar-mode
-        mode-name "Semantic Grammar Framework")
+\\{semantic-grammar-mode-map}"
   (set (make-local-variable 'parse-sexp-ignore-comments) t)
   (set (make-local-variable 'comment-start) ";;")
   ;; Look within the line for a ; following an even number of backslashes
   ;; after either a non-backslash or the line beginning.
   (set (make-local-variable 'comment-start-skip)
        "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+ *")
-  (set-syntax-table semantic-grammar-syntax-table)
-  (use-local-map semantic-grammar-map)
   (set (make-local-variable 'indent-line-function)
        'semantic-grammar-indent)
   (set (make-local-variable 'fill-paragraph-function)
@@ -1335,15 +1334,14 @@ the change bounds to encompass the whole nonterminal tag."
   (semantic-make-local-hook 'semantic-edits-new-change-functions)
   (add-hook 'semantic-edits-new-change-functions
             'semantic-grammar-edits-new-change-hook-fcn
-            nil t)
-  (semantic-run-mode-hooks 'semantic-grammar-mode-hook))
+            nil t))
 \f
 ;;;;
 ;;;; Useful commands
 ;;;;
 
 (defvar semantic-grammar-skip-quoted-syntax-table
-  (let ((st (copy-syntax-table semantic-grammar-syntax-table)))
+  (let ((st (copy-syntax-table semantic-grammar-mode-syntax-table)))
     (modify-syntax-entry ?\' "$" st)
     st)
   "Syntax table to skip a whole quoted expression in grammar code.
index 509324ade8855787170cd0e80475a4afd48a91c9..9a77793b1e1f849133556f3c58a0855b167b8fa8 100644 (file)
@@ -121,7 +121,9 @@ The buffer is left in Command History mode."
          (error "No command history")
        (command-history-mode)))))
 
-(defvar command-history-map
+(define-obsolete-variable-alias 'command-history-map
+  'command-history-mode-map "24.1")
+(defvar command-history-mode-map
   (let ((map (make-sparse-keymap)))
     (set-keymap-parent map lisp-mode-shared-map)
     (suppress-keymap map)
@@ -132,21 +134,11 @@ The buffer is left in Command History mode."
     map)
   "Keymap for `command-history-mode'.")
 
-(defun command-history-mode ()
+(define-derived-mode command-history-mode fundamental-mode "Command History"
   "Major mode for listing and repeating recent commands.
 
 Keybindings:
-\\{command-history-map}"
-  (interactive)
-  (Command-history-setup)
-  (setq major-mode 'command-history-mode)
-  (setq mode-name "Command History")
-  (use-local-map command-history-map)
-  (run-mode-hooks 'command-history-mode-hook))
-
-(defun Command-history-setup ()
-  (kill-all-local-variables)
-  (use-local-map command-history-map)
+\\{command-history-mode-map}"
   (lisp-mode-variables nil)
   (set-syntax-table emacs-lisp-mode-syntax-table)
   (setq buffer-read-only t))
index 0ce7053c0319bea3707518c3f974e0b75df98478..7572e8baabc6ba60590f03c2eef1ac3a7a3b59c2 100644 (file)
@@ -3793,25 +3793,21 @@ REGEXP-GROUP is the regular expression group in REGEXP to use."
 ;; comint-mode will take care of it. The following example, from shell.el,
 ;; is typical:
 ;;
-;; (defvar shell-mode-map '())
-;; (cond ((not shell-mode-map)
-;;        (setq shell-mode-map (copy-keymap comint-mode-map))
-;;        (define-key shell-mode-map "\C-c\C-f" 'shell-forward-command)
-;;        (define-key shell-mode-map "\C-c\C-b" 'shell-backward-command)
-;;        (define-key shell-mode-map "\t" 'completion-at-point)
-;;        (define-key shell-mode-map "\M-?"
-;;          'comint-dynamic-list-filename-completions)))
+;; (defvar shell-mode-map
+;;   (let ((map (make-sparse-keymap)))
+;;     (set-keymap-parent map comint-mode-map)
+;;     (define-key map "\C-c\C-f" 'shell-forward-command)
+;;     (define-key map "\C-c\C-b" 'shell-backward-command)
+;;     (define-key map "\t" 'completion-at-point)
+;;     (define-key map "\M-?"
+;;       'comint-dynamic-list-filename-completions)
+;;     map))
 ;;
-;; (defun shell-mode ()
-;;   (interactive)
-;;   (comint-mode)
+;; (define-derived-mode shell-mode comint-mode "Shell"
+;;   "Doc."
 ;;   (setq comint-prompt-regexp shell-prompt-pattern)
-;;   (setq major-mode 'shell-mode)
-;;   (setq mode-name "Shell")
-;;   (use-local-map shell-mode-map)
 ;;   (setq-local shell-directory-stack nil)
-;;   (add-hook 'comint-input-filter-functions 'shell-directory-tracker)
-;;   (run-mode-hooks 'shell-mode-hook))
+;;   (add-hook 'comint-input-filter-functions 'shell-directory-tracker))
 ;;
 ;;
 ;; Completion for comint-mode users
index 709a094e73b98a767110e498b04d34935258933a..6c7a0d2db1d9ef34f7493abef69414ebf331649f 100644 (file)
@@ -626,7 +626,7 @@ The environment used is the one when entering the activation frame at point."
 
 (put 'debugger-mode 'mode-class 'special)
 
-(defun debugger-mode ()
+(define-derived-mode debugger-mode fundamental-mode "Debugger"
   "Mode for backtrace buffers, selected in debugger.
 \\<debugger-mode-map>
 A line starts with `*' if exiting that frame will call the debugger.
@@ -641,13 +641,9 @@ which functions will enter the debugger when called.
 
 Complete list of commands:
 \\{debugger-mode-map}"
-  (kill-all-local-variables)
-  (setq major-mode 'debugger-mode)
-  (setq mode-name "Debugger")
   (setq truncate-lines t)
   (set-syntax-table emacs-lisp-mode-syntax-table)
-  (use-local-map debugger-mode-map)
-  (run-mode-hooks 'debugger-mode-hook))
+  (use-local-map debugger-mode-map))
 \f
 (defcustom debugger-record-buffer "*Debugger-record*"
   "Buffer name for expression values, for \\[debugger-record-expression]."
index 03d7076195e3638e5243c1bec492c79da1226b6c..dfb81b3829cec85dac655d940752694cb6d76a65 100644 (file)
@@ -73,8 +73,7 @@
     (define-key map "\C-x" 'save-buffers-kill-emacs)
     (define-key map "y" 'ws-delete-block)
     (define-key map "\C-y" 'ws-delete-block)
-    map)
-  "")
+    map))
 
 (defvar wordstar-C-o-map
   (let ((map (make-keymap)))
     (define-key map "y" 'ws-kill-eol)
     (define-key map "\C-y" 'ws-kill-eol)
     (define-key map "\177" 'ws-kill-bol)
-    map)
-  "")
+    map))
 
 (defvar wordstar-mode-map
   (let ((map (make-keymap)))
     (define-key map "\C-x" 'next-line)
     (define-key map "\C-y" 'kill-complete-line)
     (define-key map "\C-z" 'scroll-up-line)
-    map)
-  "")
+    map))
 
 ;; wordstar-C-j-map not yet implemented
-(defvar wordstar-C-j-map nil "")
+(defvar wordstar-C-j-map nil)
 
 
 (put 'wordstar-mode 'mode-class 'special)
 
 ;;;###autoload
-(defun wordstar-mode ()
+(define-derived-mode wordstar-mode fundamental-mode "WordStar"
   "Major mode with WordStar-like key bindings.
 
 BUGS:
@@ -191,106 +188,7 @@ BUGS:
  - Search and replace (C-q a) is only available in forward direction
 
 No key bindings beginning with ESC are installed, they will work
-Emacs-like.
-
-The key bindings are:
-
-  C-a          backward-word
-  C-b          fill-paragraph
-  C-c          scroll-up-line
-  C-d          forward-char
-  C-e          previous-line
-  C-f          forward-word
-  C-g          delete-char
-  C-h          backward-char
-  C-i          indent-for-tab-command
-  C-j          help-for-help
-  C-k          ordstar-C-k-map
-  C-l          ws-repeat-search
-  C-n          open-line
-  C-p          quoted-insert
-  C-r          scroll-down-line
-  C-s          backward-char
-  C-t          kill-word
-  C-u          keyboard-quit
-  C-v          overwrite-mode
-  C-w          scroll-down
-  C-x          next-line
-  C-y          kill-complete-line
-  C-z          scroll-up
-
-  C-k 0                ws-set-marker-0
-  C-k 1                ws-set-marker-1
-  C-k 2                ws-set-marker-2
-  C-k 3                ws-set-marker-3
-  C-k 4                ws-set-marker-4
-  C-k 5                ws-set-marker-5
-  C-k 6                ws-set-marker-6
-  C-k 7                ws-set-marker-7
-  C-k 8                ws-set-marker-8
-  C-k 9                ws-set-marker-9
-  C-k b                ws-begin-block
-  C-k c                ws-copy-block
-  C-k d                save-buffers-kill-emacs
-  C-k f                find-file
-  C-k h                ws-show-markers
-  C-k i                ws-indent-block
-  C-k k                ws-end-block
-  C-k p                ws-print-block
-  C-k q                kill-emacs
-  C-k r                insert-file
-  C-k s                save-some-buffers
-  C-k t                ws-mark-word
-  C-k u                ws-exdent-block
-  C-k C-u      keyboard-quit
-  C-k v                ws-move-block
-  C-k w                ws-write-block
-  C-k x                kill-emacs
-  C-k y                ws-delete-block
-
-  C-o c                wordstar-center-line
-  C-o b                switch-to-buffer
-  C-o j                justify-current-line
-  C-o k                kill-buffer
-  C-o l                list-buffers
-  C-o m                auto-fill-mode
-  C-o r                set-fill-column
-  C-o C-u      keyboard-quit
-  C-o wd       delete-other-windows
-  C-o wh       split-window-right
-  C-o wo       other-window
-  C-o wv       split-window-below
-
-  C-q 0                ws-find-marker-0
-  C-q 1                ws-find-marker-1
-  C-q 2                ws-find-marker-2
-  C-q 3                ws-find-marker-3
-  C-q 4                ws-find-marker-4
-  C-q 5                ws-find-marker-5
-  C-q 6                ws-find-marker-6
-  C-q 7                ws-find-marker-7
-  C-q 8                ws-find-marker-8
-  C-q 9                ws-find-marker-9
-  C-q a                ws-query-replace
-  C-q b                ws-to-block-begin
-  C-q c                end-of-buffer
-  C-q d                end-of-line
-  C-q f                ws-search
-  C-q k                ws-to-block-end
-  C-q l                ws-undo
-  C-q p                ws-last-cursorp
-  C-q r                beginning-of-buffer
-  C-q C-u      keyboard-quit
-  C-q w                ws-last-error
-  C-q y                ws-kill-eol
-  C-q DEL      ws-kill-bol
-"
-  (interactive)
-  (kill-all-local-variables)
-  (use-local-map wordstar-mode-map)
-  (setq mode-name "WordStar")
-  (setq major-mode 'wordstar-mode)
-  (run-mode-hooks 'wordstar-mode-hook))
+Emacs-like.")
 
 
 (defun wordstar-center-paragraph ()
index ed5fecf09fff6fb74e39642ce02a7aba41628f3b..0d32dae7ddb04d4b6bd4f08c02bf89312ed4d56b 100644 (file)
@@ -220,74 +220,66 @@ This is used by `eshell-watch-for-password-prompt'."
 (defvar eshell-last-output-end nil)
 
 (defvar eshell-currently-handling-window nil)
-(defvar eshell-mode-syntax-table nil)
-(defvar eshell-mode-abbrev-table nil)
 
 (define-abbrev-table 'eshell-mode-abbrev-table ())
 
-(if (not eshell-mode-syntax-table)
-    (let ((i 0))
-      (setq eshell-mode-syntax-table (make-syntax-table))
-      (while (< i ?0)
-       (modify-syntax-entry i "_   " eshell-mode-syntax-table)
-       (setq i (1+ i)))
-      (setq i (1+ ?9))
-      (while (< i ?A)
-       (modify-syntax-entry i "_   " eshell-mode-syntax-table)
-       (setq i (1+ i)))
-      (setq i (1+ ?Z))
-      (while (< i ?a)
-       (modify-syntax-entry i "_   " eshell-mode-syntax-table)
-       (setq i (1+ i)))
-      (setq i (1+ ?z))
-      (while (< i 128)
-       (modify-syntax-entry i "_   " eshell-mode-syntax-table)
-       (setq i (1+ i)))
-      (modify-syntax-entry ?  "    " eshell-mode-syntax-table)
-      (modify-syntax-entry ?\t "    " eshell-mode-syntax-table)
-      (modify-syntax-entry ?\f "    " eshell-mode-syntax-table)
-      (modify-syntax-entry ?\n ">   " eshell-mode-syntax-table)
-      ;; Give CR the same syntax as newline, for selective-display.
-      (modify-syntax-entry ?\^m ">   " eshell-mode-syntax-table)
-;;;   (modify-syntax-entry ?\; "<   " eshell-mode-syntax-table)
-      (modify-syntax-entry ?` "'   " eshell-mode-syntax-table)
-      (modify-syntax-entry ?' "'   " eshell-mode-syntax-table)
-      (modify-syntax-entry ?, "'   " eshell-mode-syntax-table)
-      ;; Used to be singlequote; changed for flonums.
-      (modify-syntax-entry ?. "_   " eshell-mode-syntax-table)
-      (modify-syntax-entry ?- "_   " eshell-mode-syntax-table)
-      (modify-syntax-entry ?| ".   " eshell-mode-syntax-table)
-      (modify-syntax-entry ?# "'   " eshell-mode-syntax-table)
-      (modify-syntax-entry ?\" "\"    " eshell-mode-syntax-table)
-      (modify-syntax-entry ?\\ "/   " eshell-mode-syntax-table)
-      (modify-syntax-entry ?\( "()  " eshell-mode-syntax-table)
-      (modify-syntax-entry ?\) ")(  " eshell-mode-syntax-table)
-      (modify-syntax-entry ?\{ "(}  " eshell-mode-syntax-table)
-      (modify-syntax-entry ?\} "){  " eshell-mode-syntax-table)
-      (modify-syntax-entry ?\[ "(]  " eshell-mode-syntax-table)
-      (modify-syntax-entry ?\] ")[  " eshell-mode-syntax-table)
-      ;; All non-word multibyte characters should be `symbol'.
-      (if (featurep 'xemacs)
-         (map-char-table
-          (function
-           (lambda (key val)
-             (and (characterp key)
-                  (>= (char-int key) 256)
-                  (/= (char-syntax key) ?w)
-                  (modify-syntax-entry key "_   "
-                                       eshell-mode-syntax-table))))
-          (standard-syntax-table))
-       (map-char-table
-        (function
-         (lambda (key val)
-           (and (if (consp key)
-                    (and (>= (car key) 128)
-                         (/= (char-syntax (car key)) ?w))
-                  (and (>= key 256)
-                       (/= (char-syntax key) ?w)))
-                (modify-syntax-entry key "_   "
-                                     eshell-mode-syntax-table))))
-        (standard-syntax-table)))))
+(defvar eshell-mode-syntax-table
+  (let ((st (make-syntax-table))
+        (i 0))
+    (while (< i ?0)
+      (modify-syntax-entry i "_   " st)
+      (setq i (1+ i)))
+    (setq i (1+ ?9))
+    (while (< i ?A)
+      (modify-syntax-entry i "_   " st)
+      (setq i (1+ i)))
+    (setq i (1+ ?Z))
+    (while (< i ?a)
+      (modify-syntax-entry i "_   " st)
+      (setq i (1+ i)))
+    (setq i (1+ ?z))
+    (while (< i 128)
+      (modify-syntax-entry i "_   " st)
+      (setq i (1+ i)))
+    (modify-syntax-entry ?  "    " st)
+    (modify-syntax-entry ?\t "    " st)
+    (modify-syntax-entry ?\f "    " st)
+    (modify-syntax-entry ?\n ">   " st)
+    ;; Give CR the same syntax as newline, for selective-display.
+    (modify-syntax-entry ?\^m ">   " st)
+    ;; (modify-syntax-entry ?\; "<   " st)
+    (modify-syntax-entry ?` "'   " st)
+    (modify-syntax-entry ?' "'   " st)
+    (modify-syntax-entry ?, "'   " st)
+    ;; Used to be singlequote; changed for flonums.
+    (modify-syntax-entry ?. "_   " st)
+    (modify-syntax-entry ?- "_   " st)
+    (modify-syntax-entry ?| ".   " st)
+    (modify-syntax-entry ?# "'   " st)
+    (modify-syntax-entry ?\" "\"    " st)
+    (modify-syntax-entry ?\\ "/   " st)
+    (modify-syntax-entry ?\( "()  " st)
+    (modify-syntax-entry ?\) ")(  " st)
+    (modify-syntax-entry ?\{ "(}  " st)
+    (modify-syntax-entry ?\} "){  " st)
+    (modify-syntax-entry ?\[ "(]  " st)
+    (modify-syntax-entry ?\] ")[  " st)
+    ;; All non-word multibyte characters should be `symbol'.
+    (map-char-table
+     (if (featurep 'xemacs)
+         (lambda (key val)
+           (and (characterp key)
+                (>= (char-int key) 256)
+                (/= (char-syntax key) ?w)
+                (modify-syntax-entry key "_   " st)))
+       (lambda (key val)
+         (and (if (consp key)
+                  (and (>= (car key) 128)
+                       (/= (char-syntax (car key)) ?w))
+                (and (>= key 256)
+                     (/= (char-syntax key) ?w)))
+              (modify-syntax-entry key "_   " st))))
+     (standard-syntax-table))))
 
 ;;; User Functions:
 
@@ -303,25 +295,18 @@ and the hook `eshell-exit-hook'."
   (run-hooks 'eshell-exit-hook))
 
 ;;;###autoload
-(defun eshell-mode ()
-  "Emacs shell interactive mode.
-
-\\{eshell-mode-map}"
-  (kill-all-local-variables)
-
-  (setq major-mode 'eshell-mode)
-  (setq mode-name "EShell")
-  (set (make-local-variable 'eshell-mode) t)
+(define-derived-mode eshell-mode fundamental-mode "EShell"
+  "Emacs shell interactive mode."
+  (setq-local eshell-mode t)
 
-  (make-local-variable 'eshell-mode-map)
-  (setq eshell-mode-map (make-sparse-keymap))
+  ;; FIXME: What the hell!?
+  (setq-local eshell-mode-map (make-sparse-keymap))
   (use-local-map eshell-mode-map)
 
   (when eshell-status-in-mode-line
     (make-local-variable 'eshell-command-running-string)
     (let ((fmt (copy-sequence mode-line-format)))
-      (make-local-variable 'mode-line-format)
-      (setq mode-line-format fmt))
+      (setq-local mode-line-format fmt))
     (let ((mode-line-elt (memq 'mode-line-modified mode-line-format)))
       (if mode-line-elt
          (setcar mode-line-elt 'eshell-command-running-string))))
@@ -331,11 +316,9 @@ and the hook `eshell-exit-hook'."
   (define-key eshell-mode-map [(meta control ?l)] 'eshell-show-output)
   (define-key eshell-mode-map [(control ?a)] 'eshell-bol)
 
-  (set (make-local-variable 'eshell-command-prefix)
-       (make-symbol "eshell-command-prefix"))
+  (setq-local eshell-command-prefix (make-symbol "eshell-command-prefix"))
   (fset eshell-command-prefix (make-sparse-keymap))
-  (set (make-local-variable 'eshell-command-map)
-       (symbol-function eshell-command-prefix))
+  (setq-local eshell-command-map (symbol-function eshell-command-prefix))
   (define-key eshell-mode-map [(control ?c)] eshell-command-prefix)
 
   ;; without this, find-tag complains about read-only text being
@@ -359,7 +342,6 @@ and the hook `eshell-exit-hook'."
   (define-key eshell-command-map [(control ?y)] 'eshell-repeat-argument)
 
   (setq local-abbrev-table eshell-mode-abbrev-table)
-  (set-syntax-table eshell-mode-syntax-table)
 
   (set (make-local-variable 'dired-directory) default-directory)
   (set (make-local-variable 'list-buffers-directory)
@@ -442,7 +424,6 @@ and the hook `eshell-exit-hook'."
 
   (if eshell-first-time-p
       (run-hooks 'eshell-first-time-mode-hook))
-  (run-mode-hooks 'eshell-mode-hook)
   (run-hooks 'eshell-post-command-hook))
 
 (put 'eshell-mode 'mode-class 'special)
index c75588536a4715455928963fe198113646c9de91..1bf7bb588f092fe1564c0ce4d3d7c405e15554b0 100644 (file)
@@ -1,3 +1,27 @@
+2013-09-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * 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  <yamaoka@jpl.org>
 
        * mm-decode.el (mm-temp-files-delete): Fix file deletion logic.
 2013-07-10  David Engster  <deng@randomsample.de>
 
        * gnus-start.el (gnus-clean-old-newsrc): Always remove 'unexist' marks
-       if `gnus-newsrc-file-version' does not match `gnus-version'.  This
-       fixes a bug in Emacs trunk where the 'unexist' marks were always
+       if `gnus-newsrc-file-version' does not match `gnus-version'.
+       This fixes a bug in Emacs trunk where the 'unexist' marks were always
        removed at startup because "Gnus v5.13" was considered smaller than "Ma
        Gnus v0.03".
 
 2013-07-10  Tassilo Horn  <tsdh@gnu.org>
 
-       * gnus.el (gnus-summary-line-format): Reference
-       `gnus-user-date-format-alist' for the &user-date; format, not
+       * gnus.el (gnus-summary-line-format):
+       Reference `gnus-user-date-format-alist' for the &user-date; format, not
        `gnus-summary-user-date-format-alist'.
 
 2013-07-08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * shr.el (shr-render-td): Support horizontal alignment.
 
-       * eww.el (eww-put-color): Removed.
+       * eww.el (eww-put-color): Remove.
        (eww-colorize-region): Use `add-face-text-property'.
 
        * shr.el (shr-add-font): Append face data, so that we get the correct
 
 2013-06-16  Rüdiger Sonderfeld  <ruediger@c-plusplus.de>
 
-       * shr.el (shr-dom-to-xml): Fixed function call.
+       * shr.el (shr-dom-to-xml): Fix function call.
 
        * eww.el (eww): New group.
        (eww-header-line-format): New custom variable.
        (auth-source-netrc-parse): Refactor and improve netrc parser to support
        single-quoted strings and multiline entries.
        (auth-source-netrc-parse-next-interesting)
-       (auth-source-netrc-parse-one, auth-source-netrc-parse-entries): New
-       functions to support parser.
+       (auth-source-netrc-parse-one, auth-source-netrc-parse-entries):
+       New functions to support parser.
 
 2013-06-14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * registry.el (initialize-instance, registry-lookup)
        (registry-lookup-breaks-before-lexbind, registry-lookup-secondary)
        (registry-lookup-secondary-value, registry-search, registry-delete)
-       (registry-insert, registry-reindex, registry-size, registry-prune): Do
-       not wrap methods in `eval-and-compile'.  This breaks due to latest
+       (registry-insert, registry-reindex, registry-size, registry-prune):
+       Do not wrap methods in `eval-and-compile'.  This breaks due to latest
        changes in EIEIO (introduction of eieio-core.el).
 
 2013-05-30  Glenn Morris  <rgm@gnu.org>
 2013-03-26  Andrew Cohen  <cohen@bu.edu>
 
        * nnir.el: Major rewrite.  Cleaner separation between searches and group
-       management.  Marks are now shown in nnir summary buffers.  Rudimentary
-       support for real (i.e. not ephemeral) nnir groups.
+       management.  Marks are now shown in nnir summary buffers.
+       Rudimentary support for real (i.e. not ephemeral) nnir groups.
        (gnus-summary-make-nnir-group): New function for initiating searches
        from a summary buffer.
 
 2013-02-22  David Engster  <deng@randomsample.de>
 
        * gnus-registry.el (gnus-registry-save): Provide class name when
-       calling `eieio-persistent-read' to avoid "unsafe call" warning.  Use
-       `condition-case' to stay compatible with older EIEIO versions which
+       calling `eieio-persistent-read' to avoid "unsafe call" warning.
+       Use `condition-case' to stay compatible with older EIEIO versions which
        only accept one argument.
 
 2013-02-17  Daiki Ueno  <ueno@gnu.org>
        a creation default, pass the whole port list down.  It will be
        completed.
 
-       * auth-source.el (auth-source-search): Updated docs to talk about
+       * auth-source.el (auth-source-search): Update docs to talk about
        multiple creation choices.
        (auth-source-netrc-create): Accept a list as a value (from the search
        parameters) and do completion on that list.  Keep a separate netrc line
        (gnus-summary-exit): Kill the correct article buffer on exit from a
        `C-d' group.
 
-       * gnus-start.el (gnus-use-backend-marks): Removed, since it duplicates
+       * gnus-start.el (gnus-use-backend-marks): Remove, since it duplicates
        gnus-propagate-marks.
 
        * gnus-sum.el (gnus-summary-exit-no-update): Restore the group conf
 
 2005-11-19  Kevin Greiner  <kevin.greiner@compsol.cc>
 
-       * gnus-sum.el (gnus-fetch-old-headers): Updated docs to warn that
+       * gnus-sum.el (gnus-fetch-old-headers): Update docs to warn that
        it can seriously impact performance as it bypasses the agent's
        local caches.
 
index e65b9fb99e4a2f4cb0e25c142fb17c6b9b2ed50b..b80aa3a24e9411d97f03ca12a33989061f7f383b 100644 (file)
@@ -3683,7 +3683,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))
@@ -4455,7 +4455,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.
@@ -4470,13 +4470,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
@@ -4504,9 +4499,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."
@@ -4554,7 +4547,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))
@@ -4603,7 +4596,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))
@@ -4714,7 +4707,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
@@ -4776,7 +4769,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))
@@ -4792,7 +4785,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)
@@ -4801,11 +4794,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
@@ -4893,7 +4886,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
@@ -6477,7 +6470,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)
@@ -6592,7 +6585,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))))
index 7a3d273622a7af3db89dd85cbcba2662fc487bef..c31cb1aef36c752027e6a3b753e80c44b9104ec5 100644 (file)
@@ -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)
index c8fb5b5dc735d7e541bc928247d6e24279f4a572..247c081a20f72d58bc52e5690c9aeddb89daf16d 100644 (file)
@@ -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:
 
index 9533f5819a4f000db5af150db64bc2efca49d88b..c8945e57531bcc85f170113464811667a7032610 100644 (file)
@@ -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)
index b3f06de086899a4d68471a01b13ccc4650c7458a..011288e280b3b48c46cde0d21eabc779bcd5144f 100644 (file)
@@ -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))
index 69774587d809af381fe3d9f3089c4caf014c87f3..2f151e570d7c4a6318e4c28c3a44fd3fbe35735e 100644 (file)
@@ -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
index ec24f1f9670d45c0b1910a895786315a898bf61b..58767cfcc7a7b0bca1325ce5ea47407169234ea7 100644 (file)
 (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)))
 (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)
index ce29505d6f208f6f5e17c8c992180ac4f9544939..8356a186f13f175d4f8676a273328c6861c373b1 100644 (file)
@@ -156,7 +156,7 @@ elisp byte-compiler."
             (null buffer-file-name))
        italic)
     (30 (memq major-mode ibuffer-help-buffer-modes) font-lock-comment-face)
-    (35 (eq major-mode 'dired-mode) font-lock-function-name-face))
+    (35 (derived-mode-p 'dired-mode) font-lock-function-name-face))
   "An alist describing how to fontify buffers.
 Each element should be of the form (PRIORITY FORM FACE), where
 PRIORITY is an integer, FORM is an arbitrary form to evaluate in the
@@ -2358,7 +2358,7 @@ FORMATS is the value to use for `ibuffer-formats'.
        ;; We switch to the buffer's window in order to be able
        ;; to modify the value of point
        (select-window (get-buffer-window buf 0))
-       (or (eq major-mode 'ibuffer-mode)
+       (or (derived-mode-p 'ibuffer-mode)
            (ibuffer-mode))
        (setq ibuffer-restore-window-config-on-quit other-window-p)
        (when shrink
@@ -2383,7 +2383,7 @@ FORMATS is the value to use for `ibuffer-formats'.
          (message "Commands: m, u, t, RET, g, k, S, D, Q; q to quit; h for help"))))))
 
 (put 'ibuffer-mode 'mode-class 'special)
-(defun ibuffer-mode ()
+(define-derived-mode ibuffer-mode special-mode "IBuffer"
   "A major mode for viewing a list of buffers.
 In Ibuffer, you can conveniently perform many operations on the
 currently open buffers, in addition to filtering your view to a
@@ -2564,10 +2564,6 @@ filter groups are displayed in this order of precedence.
 You may rearrange filter groups by using the regular
 '\\[ibuffer-kill-line]' and '\\[ibuffer-yank]' pair.  Yanked groups
 will be inserted before the group at point."
-  (kill-all-local-variables)
-  (use-local-map ibuffer-mode-map)
-  (setq major-mode 'ibuffer-mode)
-  (setq mode-name "Ibuffer")
   ;; Include state info next to the mode name.
   (set (make-local-variable 'mode-line-process)
         '(" by "
@@ -2627,13 +2623,12 @@ will be inserted before the group at point."
   (ibuffer-update-format)
   (when ibuffer-default-directory
     (setq default-directory ibuffer-default-directory))
-  (add-hook 'change-major-mode-hook 'font-lock-defontify nil t)
-  (run-mode-hooks 'ibuffer-mode-hook))
+  (add-hook 'change-major-mode-hook 'font-lock-defontify nil t))
 
 \f
 ;;; Start of automatically extracted autoloads.
 \f
-;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" "d06b2735a74954e0c6922a811de7608c")
+;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" "85795a4045d20654599b73b88e8e1bc9")
 ;;; Generated autoloads from ibuf-ext.el
 
 (autoload 'ibuffer-auto-mode "ibuf-ext" "\
index 65cd7eddcfd06dc85bb637cf13928c759fd6ce38..93442689319edb77ad44755426def8352ee467f9 100644 (file)
@@ -790,7 +790,7 @@ See a list of available Info commands in `Info-mode'."
 
 (defun info-setup (file-or-node buffer)
   "Display Info node FILE-OR-NODE in BUFFER."
-  (if (and buffer (not (eq major-mode 'Info-mode)))
+  (if (and buffer (not (derived-mode-p 'Info-mode)))
       (Info-mode))
   (if file-or-node
       ;; If argument already contains parentheses, don't add another set
@@ -931,7 +931,7 @@ STRICT-CASE is non-nil)."
   (info-initialize)
   (setq filename (Info-find-file filename))
   ;; Go into Info buffer.
-  (or (eq major-mode 'Info-mode) (switch-to-buffer "*info*"))
+  (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*"))
   ;; Record the node we are leaving, if we were in one.
   (and (not no-going-back)
        Info-current-file
@@ -961,7 +961,7 @@ otherwise, that defaults to `Top'."
   "Go to an Info node FILENAME and NODENAME, re-reading disk contents.
 When *info* is already displaying FILENAME and NODENAME, the window position
 is preserved, if possible."
-  (or (eq major-mode 'Info-mode) (switch-to-buffer "*info*"))
+  (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*"))
   (let ((old-filename Info-current-file)
        (old-nodename Info-current-node)
        (window-selected (eq (selected-window) (get-buffer-window)))
@@ -1065,7 +1065,7 @@ is non-nil)."
 
 (defun Info-find-node-2 (filename nodename &optional no-going-back strict-case)
   (buffer-disable-undo (current-buffer))
-  (or (eq major-mode 'Info-mode)
+  (or (derived-mode-p 'Info-mode)
       (Info-mode))
   (widen)
   (setq Info-current-node nil)
@@ -2212,7 +2212,7 @@ End of submatch 0, 1, and 3 are the same, so you can safely concat."
   (interactive)
   ;; In case another window is currently selected
   (save-window-excursion
-    (or (eq major-mode 'Info-mode) (switch-to-buffer "*info*"))
+    (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*"))
     (Info-goto-node (Info-extract-pointer "next"))))
 
 (defun Info-prev ()
@@ -2220,7 +2220,7 @@ End of submatch 0, 1, and 3 are the same, so you can safely concat."
   (interactive)
   ;; In case another window is currently selected
   (save-window-excursion
-    (or (eq major-mode 'Info-mode) (switch-to-buffer "*info*"))
+    (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*"))
     (Info-goto-node (Info-extract-pointer "prev[ious]*" "previous"))))
 
 (defun Info-up (&optional same-file)
@@ -2229,7 +2229,7 @@ If SAME-FILE is non-nil, do not move to a different Info file."
   (interactive)
   ;; In case another window is currently selected
   (save-window-excursion
-    (or (eq major-mode 'Info-mode) (switch-to-buffer "*info*"))
+    (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*"))
     (let ((old-node Info-current-node)
          (old-file Info-current-file)
          (node (Info-extract-pointer "up")) p)
@@ -4082,7 +4082,7 @@ If FORK is non-nil, it is passed to `Info-goto-node'."
 (defun Info-menu-update ()
   "Update the Info menu for the current node."
   (condition-case nil
-      (if (or (not (eq major-mode 'Info-mode))
+      (if (or (not (derived-mode-p 'Info-mode))
              (equal (list Info-current-file Info-current-node)
                     Info-menu-last-node))
          ()
@@ -4285,7 +4285,7 @@ Advanced commands:
 ;; When an Info buffer is killed, make sure the associated tags buffer
 ;; is killed too.
 (defun Info-kill-buffer ()
-  (and (eq major-mode 'Info-mode)
+  (and (derived-mode-p 'Info-mode)
        Info-tag-table-buffer
        (kill-buffer Info-tag-table-buffer)))
 
@@ -4302,10 +4302,11 @@ Advanced commands:
                  (copy-marker (marker-position m)))
              (make-marker))))))
 
-(defvar Info-edit-map (let ((map (make-sparse-keymap)))
-                       (set-keymap-parent map text-mode-map)
-                       (define-key map "\C-c\C-c" 'Info-cease-edit)
-                       map)
+(define-obsolete-variable-alias 'Info-edit-map 'Info-edit-mode-map "24.1")
+(defvar Info-edit-mode-map (let ((map (make-sparse-keymap)))
+                             (set-keymap-parent map text-mode-map)
+                             (define-key map "\C-c\C-c" 'Info-cease-edit)
+                             map)
   "Local keymap used within `e' command of Info.")
 
 (make-obsolete-variable 'Info-edit-map
@@ -4315,19 +4316,14 @@ Advanced commands:
 ;; Info-edit mode is suitable only for specially formatted data.
 (put 'Info-edit-mode 'mode-class 'special)
 
-(defun Info-edit-mode ()
+(define-derived-mode Info-edit-mode text-mode "Info Edit"
   "Major mode for editing the contents of an Info node.
 Like text mode with the addition of `Info-cease-edit'
 which returns to Info mode for browsing.
 \\{Info-edit-map}"
-  (use-local-map Info-edit-map)
-  (setq major-mode 'Info-edit-mode)
-  (setq mode-name "Info Edit")
-  (kill-local-variable 'mode-line-buffer-identification)
   (setq buffer-read-only nil)
   (force-mode-line-update)
-  (buffer-enable-undo (current-buffer))
-  (run-mode-hooks 'Info-edit-mode-hook))
+  (buffer-enable-undo (current-buffer)))
 
 (make-obsolete 'Info-edit-mode
               "editing Info nodes by hand is not recommended." "24.4")
@@ -4352,11 +4348,7 @@ This feature will be removed in future.")
   (and (buffer-modified-p)
        (y-or-n-p "Save the file? ")
        (save-buffer))
-  (use-local-map Info-mode-map)
-  (setq major-mode 'Info-mode)
-  (setq mode-name "Info")
-  (Info-set-mode-line)
-  (setq buffer-read-only t)
+  (Info-mode)
   (force-mode-line-update)
   (and (marker-position Info-tag-table-marker)
        (buffer-modified-p)
@@ -4469,7 +4461,7 @@ COMMAND must be a symbol or string."
          ;; Get Info running, and pop to it in another window.
          (save-window-excursion
            (info))
-         (or (eq major-mode 'Info-mode) (pop-to-buffer "*info*"))
+         (or (derived-mode-p 'Info-mode) (pop-to-buffer "*info*"))
          ;; Bind Info-history to nil, to prevent the last Index node
          ;; visited by Info-find-emacs-command-nodes from being
          ;; pushed onto the history.
@@ -5133,7 +5125,7 @@ INDENT is the current indentation depth."
 NODESPEC is a string of the form: (file)node."
   ;; Set up a buffer we can use to fake-out Info.
   (with-current-buffer (get-buffer-create " *info-browse-tmp*")
-    (if (not (equal major-mode 'Info-mode))
+    (if (not (derived-mode-p 'Info-mode))
        (Info-mode))
     ;; Get the node into this buffer
     (if (not (string-match "^(\\([^)]+\\))\\([^.]+\\)$" nodespec))
index ab0417070e7e47758796a9b42bbd40f36c3fa7c0..99a99853da9e2b50d2e2e75562824707d8b07f5f 100644 (file)
@@ -95,7 +95,7 @@
 ;;
 ;; (defadvice dired-make-relative (before set-no-error activate)
 ;;   "For locate mode and Windows, don't return errors"
-;;   (if (and (eq   major-mode  'locate-mode)
+;;   (if (and (derived-mode-p 'locate-mode)
 ;;        (memq system-type '(windows-nt ms-dos)))
 ;;       (ad-set-arg 2 t)
 ;;     ))
@@ -448,7 +448,7 @@ file name or is inside a subdirectory."
 ;; Define a mode for locate
 ;; Default directory is set to "/" so that dired commands, which
 ;; expect to be in a tree, will work properly
-(defun locate-mode ()
+(define-derived-mode locate-mode special-mode "Locate"
   "Major mode for the `*Locate*' buffer made by \\[locate].
 \\<locate-mode-map>\
 In that buffer, you can use almost all the usual dired bindings.
@@ -463,39 +463,31 @@ Specific `locate-mode' commands, such as \\[locate-find-directory],
 do not work in subdirectories.
 
 \\{locate-mode-map}"
-  ;; Not to be called interactively.
-  (kill-all-local-variables)
   ;; Avoid clobbering this variable
   (make-local-variable 'dired-subdir-alist)
-  (use-local-map             locate-mode-map)
-  (setq major-mode          'locate-mode
-        mode-name           "Locate"
-        default-directory   "/"
+  (setq default-directory   "/"
        buffer-read-only    t
        selective-display   t)
   (dired-alist-add-1 default-directory (point-min-marker))
   (set (make-local-variable 'dired-directory) "/")
   (set (make-local-variable 'dired-subdir-switches) locate-ls-subdir-switches)
   (setq dired-switches-alist nil)
-  (make-local-variable 'directory-listing-before-filename-regexp)
   ;; This should support both Unix and Windoze style names
-  (setq directory-listing-before-filename-regexp
-       (concat "^.\\("
-               (make-string (1- locate-filename-indentation) ?\s)
-                "\\)\\|"
-               (default-value 'directory-listing-before-filename-regexp)))
-  (make-local-variable 'dired-actual-switches)
-  (setq dired-actual-switches "")
-  (make-local-variable 'dired-permission-flags-regexp)
-  (setq dired-permission-flags-regexp
-       (concat "^.\\("
-               (make-string (1- locate-filename-indentation) ?\s)
-               "\\)\\|"
-               (default-value 'dired-permission-flags-regexp)))
-  (make-local-variable 'revert-buffer-function)
-  (setq revert-buffer-function 'locate-update)
-  (set (make-local-variable 'page-delimiter) "\n\n")
-  (run-mode-hooks 'locate-mode-hook))
+  (setq-local directory-listing-before-filename-regexp
+              (concat "^.\\("
+                      (make-string (1- locate-filename-indentation) ?\s)
+                      "\\)\\|"
+                      (default-value
+                        'directory-listing-before-filename-regexp)))
+  (setq-local dired-actual-switches "")
+  (setq-local dired-permission-flags-regexp
+              (concat "^.\\("
+                      (make-string (1- locate-filename-indentation) ?\s)
+                      "\\)\\|"
+                      (default-value 'dired-permission-flags-regexp)))
+
+  (setq-local revert-buffer-function #'locate-update)
+  (setq-local page-delimiter "\n\n"))
 (put 'locate-mode 'derived-mode-parent 'dired-mode)
 
 (defun locate-do-setup (search-string)
index 5e01a7149a830c00be1ba0c3cf33b7c90e72677d..b2618ef42db266e608fc927b405ef275b3fdae6d 100644 (file)
@@ -344,19 +344,13 @@ nil."
   (interactive)
   (kill-buffer mspools-buffer))
 
-(defun mspools-mode ()
+(define-derived-mode mspools-mode special-mode "MSpools"
   "Major mode for output from mspools-show.
 \\<mspools-mode-map>Move point to one of the items in this buffer, then use
 \\[mspools-visit-spool] to go to the spool that the current line refers to.
 \\[revert-buffer] to regenerate the list of spools.
 \\{mspools-mode-map}"
-  (kill-all-local-variables)
-  (make-local-variable 'revert-buffer-function)
-  (setq revert-buffer-function 'mspools-revert-buffer)
-  (use-local-map mspools-mode-map)
-  (setq major-mode 'mspools-mode)
-  (setq mode-name "MSpools")
-  (run-mode-hooks 'mspools-mode-hook))
+  (setq-local revert-buffer-function 'mspools-revert-buffer))
 
 (defun mspools-get-spool-files ()
   "Find the list of spool files and display them in *spools* buffer."
index 3a0a7824ad8f3fed5499bf6430893800aeac9c18..cced22315225601b325edff665509454643126b2 100644 (file)
@@ -408,7 +408,7 @@ If FUNCTION is nil, includes all messages."
   (unless rmail-buffer
     (error "No RMAIL buffer found"))
   (let (mesg was-in-summary sumbuf)
-    (if (eq major-mode 'rmail-summary-mode)
+    (if (derived-mode-p 'rmail-summary-mode)
        (setq was-in-summary t))
     (with-current-buffer rmail-buffer
       (setq rmail-summary-buffer (rmail-new-summary-1 desc redo function args)
@@ -1035,7 +1035,7 @@ Optional prefix ARG means undelete ARG previous messages."
 ;; Rmail Summary mode is suitable only for specially formatted data.
 (put 'rmail-summary-mode 'mode-class 'special)
 
-(defun rmail-summary-mode ()
+(define-derived-mode rmail-summary-mode special-mode "RMAIL Summary"
   "Rmail Summary Mode is invoked from Rmail Mode by using \\<rmail-mode-map>\\[rmail-summary].
 As commands are issued in the summary buffer, they are applied to the
 corresponding mail messages in the rmail buffer.
@@ -1058,10 +1058,6 @@ Commands for sorting the summary:
 \\[rmail-summary-sort-by-correspondent] Sort by correspondent.
 \\[rmail-summary-sort-by-lines] Sort by lines.
 \\[rmail-summary-sort-by-labels] Sort by labels."
-  (interactive)
-  (kill-all-local-variables)
-  (setq major-mode 'rmail-summary-mode)
-  (setq mode-name "RMAIL Summary")
   (setq truncate-lines t)
   (setq buffer-read-only t)
   (set-syntax-table text-mode-syntax-table)
@@ -1074,8 +1070,7 @@ Commands for sorting the summary:
   (make-local-variable 'revert-buffer-function)
   (make-local-variable 'font-lock-defaults)
   (setq font-lock-defaults '(rmail-summary-font-lock-keywords t))
-  (rmail-summary-enable)
-  (run-mode-hooks 'rmail-summary-mode-hook))
+  (rmail-summary-enable))
 
 ;; Summary features need to be disabled during edit mode.
 (defun rmail-summary-disable ()
index 34131f43692d759a53fb0e56bfe5962d90345b72..9eb0ccd719a14f5598f0710e650f643ffb444afe 100644 (file)
@@ -413,7 +413,7 @@ Otherwise, the value is whatever the function
 
 (defvar Man-topic-history nil "Topic read history.")
 
-(defvar man-mode-syntax-table
+(defvar Man-mode-syntax-table
   (let ((table (copy-syntax-table (standard-syntax-table))))
     (modify-syntax-entry ?. "w" table)
     (modify-syntax-entry ?_ "w" table)
@@ -1350,7 +1350,7 @@ manpage command."
 
 (put 'Man-mode 'mode-class 'special)
 
-(defun Man-mode ()
+(define-derived-mode Man-mode fundamental-mode "Man"
   "A mode for browsing Un*x manual pages.
 
 The following man commands are available in the buffer.  Try
@@ -1387,11 +1387,7 @@ The following variables may be of some use.  Try
 
 The following key bindings are currently in effect in the buffer:
 \\{Man-mode-map}"
-  (interactive)
-  (kill-all-local-variables)
-  (setq major-mode 'Man-mode
-       mode-name "Man"
-       buffer-auto-save-file-name nil
+  (setq buffer-auto-save-file-name nil
        mode-line-buffer-identification
        (list (default-value 'mode-line-buffer-identification)
              " {" 'Man-page-mode-string "}")
@@ -1399,8 +1395,6 @@ The following key bindings are currently in effect in the buffer:
        buffer-read-only t)
   (buffer-disable-undo)
   (auto-fill-mode -1)
-  (use-local-map Man-mode-map)
-  (set-syntax-table man-mode-syntax-table)
   (setq imenu-generic-expression (list (list nil Man-heading-regexp 0)))
   (set (make-local-variable 'outline-regexp) Man-heading-regexp)
   (set (make-local-variable 'outline-level) (lambda () 1))
@@ -1409,8 +1403,7 @@ The following key bindings are currently in effect in the buffer:
   (Man-build-page-list)
   (Man-strip-page-headers)
   (Man-unindent)
-  (Man-goto-page 1 t)
-  (run-mode-hooks 'Man-mode-hook))
+  (Man-goto-page 1 t))
 
 (defsubst Man-build-section-alist ()
   "Build the list of manpage sections."
index a8a51b7d61b33b8c9d4048d80d5328a0ea8b5e41..57675a483b2583f4602dd9d7cbfee795b66ca376 100644 (file)
@@ -44,7 +44,7 @@
     (define-key map "x" 'kill-this-buffer)
     map))
 
-(defun eudc-hotlist-mode ()
+(define-derived-mode eudc-hotlist-mode fundamental-mode "EUDC-Servers"
   "Major mode used to edit the hotlist of servers.
 
 These are the special commands of this mode:
@@ -54,18 +54,12 @@ These are the special commands of this mode:
     t -- Transpose the server at point and the previous one
     q -- Commit the changes and quit.
     x -- Quit without committing the changes."
-  (interactive)
-  (kill-all-local-variables)
-  (setq major-mode 'eudc-hotlist-mode)
-  (setq mode-name "EUDC-Servers")
-  (use-local-map eudc-hotlist-mode-map)
   (when (featurep 'xemacs)
     (setq mode-popup-menu eudc-hotlist-menu)
     (when (featurep 'menubar)
       (set-buffer-menubar current-menubar)
       (add-submenu nil (cons "EUDC-Hotlist" (cdr (cdr eudc-hotlist-menu))))))
-  (setq buffer-read-only t)
-  (run-mode-hooks 'eudc-hotlist-mode-hook))
+  (setq buffer-read-only t))
 
 ;;;###autoload
 (defun eudc-edit-hotlist ()
@@ -76,10 +70,8 @@ These are the special commands of this mode:
     (switch-to-buffer (get-buffer-create "*EUDC Servers*"))
     (setq buffer-read-only nil)
     (erase-buffer)
-    (mapc (function
-          (lambda (entry)
-            (setq proto-col (max (length (car entry)) proto-col))))
-         eudc-server-hotlist)
+    (dolist (entry eudc-server-hotlist)
+      (setq proto-col (max (length (car entry)) proto-col)))
     (setq proto-col (+ 3 proto-col))
     (setq gap (make-string (- proto-col 6) ?\ ))
     (insert "              EUDC Servers\n"
@@ -89,17 +81,16 @@ These are the special commands of this mode:
            "------" gap "--------\n"
            "\n")
     (setq eudc-hotlist-list-beginning (point))
-    (mapc (lambda (entry)
-            (insert (car entry))
-            (indent-to proto-col)
-            (insert (symbol-name (cdr entry)) "\n"))
-         eudc-server-hotlist)
-  (eudc-hotlist-mode)))
+    (dolist (entry eudc-server-hotlist)
+      (insert (car entry))
+      (indent-to proto-col)
+      (insert (symbol-name (cdr entry)) "\n"))
+    (eudc-hotlist-mode)))
 
 (defun eudc-hotlist-add-server ()
   "Add a new server to the list after current one."
   (interactive)
-  (if (not (eq major-mode 'eudc-hotlist-mode))
+  (if (not (derived-mode-p 'eudc-hotlist-mode))
       (error "Not in a EUDC hotlist edit buffer"))
   (let ((server (read-from-minibuffer "Server: "))
        (protocol (completing-read "Protocol: "
@@ -117,7 +108,7 @@ These are the special commands of this mode:
 (defun eudc-hotlist-delete-server ()
   "Delete the server at point from the list."
   (interactive)
-  (if (not (eq major-mode 'eudc-hotlist-mode))
+  (if (not (derived-mode-p 'eudc-hotlist-mode))
       (error "Not in a EUDC hotlist edit buffer"))
   (let ((buffer-read-only nil))
     (save-excursion
@@ -130,7 +121,7 @@ These are the special commands of this mode:
 (defun eudc-hotlist-quit-edit ()
   "Quit the hotlist editing mode and save changes to the hotlist."
   (interactive)
-  (if (not (eq major-mode 'eudc-hotlist-mode))
+  (if (not (derived-mode-p 'eudc-hotlist-mode))
       (error "Not in a EUDC hotlist edit buffer"))
   (let (hotlist)
     (goto-char eudc-hotlist-list-beginning)
@@ -149,7 +140,7 @@ These are the special commands of this mode:
 (defun eudc-hotlist-select-server ()
   "Select the server at point as the current server."
   (interactive)
-  (if (not (eq major-mode 'eudc-hotlist-mode))
+  (if (not (derived-mode-p 'eudc-hotlist-mode))
       (error "Not in a EUDC hotlist edit buffer"))
   (save-excursion
     (beginning-of-line)
@@ -163,7 +154,7 @@ These are the special commands of this mode:
 (defun eudc-hotlist-transpose-servers ()
   "Swap the order of the server with the previous one in the list."
   (interactive)
-  (if (not (eq major-mode 'eudc-hotlist-mode))
+  (if (not (derived-mode-p 'eudc-hotlist-mode))
       (error "Not in a EUDC hotlist edit buffer"))
   (let ((buffer-read-only nil))
     (save-excursion
index c474ac9380d5b7535bc25236d3e98507bf07d7b9..453c19b27f97ca39495d44c1a7b940872d23f70c 100644 (file)
@@ -652,7 +652,7 @@ Each copy is added a new field containing one of the values of FIELD."
     result))
 
 
-(defun eudc-mode ()
+(define-derived-mode eudc-mode special-mode "EUDC"
   "Major mode used in buffers displaying the results of directory queries.
 There is no sense in calling this command from a buffer other than
 one containing the results of a directory query.
@@ -663,15 +663,9 @@ These are the special commands of EUDC mode:
     n -- Move to next record.
     p -- Move to previous record.
     b -- Insert record at point into the BBDB database."
-  (interactive)
-  (kill-all-local-variables)
-  (setq major-mode 'eudc-mode)
-  (setq mode-name "EUDC")
-  (use-local-map eudc-mode-map)
   (if (not (featurep 'xemacs))
       (easy-menu-define eudc-emacs-menu eudc-mode-map "" (eudc-menu))
-    (setq mode-popup-menu (eudc-menu)))
-  (run-mode-hooks 'eudc-mode-hook))
+    (setq mode-popup-menu (eudc-menu))))
 
 ;;}}}
 
@@ -1084,7 +1078,7 @@ queries the server for the existing fields and displays a corresponding form."
 (defun eudc-move-to-next-record ()
   "Move to next record, in a buffer displaying directory query results."
   (interactive)
-  (if (not (eq major-mode 'eudc-mode))
+  (if (not (derived-mode-p 'eudc-mode))
       (error "Not in a EUDC buffer")
     (let ((pt (next-overlay-change (point))))
       (if (< pt (point-max))
@@ -1094,7 +1088,7 @@ queries the server for the existing fields and displays a corresponding form."
 (defun eudc-move-to-previous-record ()
   "Move to previous record, in a buffer displaying directory query results."
   (interactive)
-  (if (not (eq major-mode 'eudc-mode))
+  (if (not (derived-mode-p 'eudc-mode))
       (error "Not in a EUDC buffer")
     (let ((pt (previous-overlay-change (point))))
       (if (> pt (point-min))
@@ -1122,7 +1116,7 @@ queries the server for the existing fields and displays a corresponding form."
          (overlay-get (car (overlays-at (point))) 'eudc-record))
      :help "Insert record at point into the BBDB database"]
     ["Insert All Records into BBDB" eudc-batch-export-records-to-bbdb
-     (and (eq major-mode 'eudc-mode)
+     (and (derived-mode-p 'eudc-mode)
          (or (featurep 'bbdb)
              (prog1 (locate-library "bbdb") (message ""))))
      :help "Insert all the records returned by a directory query into BBDB"]
index e6a5f8299ac4c219f572d21361201beaf309fd1f..f2d404afa5873eec2276829768d8d6bed8018af9 100644 (file)
@@ -757,31 +757,24 @@ VALUES may contain values for editable fields from current article."
     map)
   "'mairix-searches-mode' keymap.")
 
-(defvar mairix-searches-mode-font-lock-keywords)
-
-(defun mairix-searches-mode ()
+(defvar mairix-searches-mode-font-lock-keywords
+  '(("^\\([0-9]+\\)"
+     (1 font-lock-constant-face))
+    ("^[0-9 ]+\\(Name:\\) \\(.*\\)"
+     (1 font-lock-keyword-face) (2 font-lock-string-face))
+    ("^[ ]+\\(Query:\\) \\(.*\\) , "
+     (1 font-lock-keyword-face) (2 font-lock-string-face))
+    (", \\(Threads:\\) \\(.*\\)"
+     (1 font-lock-keyword-face) (2 font-lock-constant-face))
+    ("^\\([A-Z].*\\)$"
+     (1 font-lock-comment-face))
+    ("^[ ]+\\(Folder:\\) \\(.*\\)"
+     (1 font-lock-keyword-face) (2 font-lock-string-face))))
+
+(define-derived-mode mairix-searches-mode fundamental-mode "mairix-searches"
   "Major mode for editing mairix searches."
-  (interactive)
-  (kill-all-local-variables)
-  (setq major-mode 'mairix-searches-mode)
-  (setq mode-name "mairix-searches")
-  (set-syntax-table text-mode-syntax-table)
-  (use-local-map mairix-searches-mode-map)
-  (make-local-variable 'font-lock-defaults)
-  (setq mairix-searches-mode-font-lock-keywords
-       (list (list "^\\([0-9]+\\)"
-                   '(1 font-lock-constant-face))
-             (list "^[0-9 ]+\\(Name:\\) \\(.*\\)"
-                   '(1 font-lock-keyword-face) '(2 font-lock-string-face))
-             (list "^[ ]+\\(Query:\\) \\(.*\\) , "
-                   '(1 font-lock-keyword-face) '(2 font-lock-string-face))
-             (list ", \\(Threads:\\) \\(.*\\)"
-                   '(1 font-lock-keyword-face) '(2 font-lock-constant-face))
-             (list "^\\([A-Z].*\\)$"
-                   '(1 font-lock-comment-face))
-             (list "^[ ]+\\(Folder:\\) \\(.*\\)"
-                   '(1 font-lock-keyword-face) '(2 font-lock-string-face))))
-  (setq font-lock-defaults '(mairix-searches-mode-font-lock-keywords)))
+  :syntax-table text-mode-syntax-table
+  (setq-local font-lock-defaults '(mairix-searches-mode-font-lock-keywords)))
 
 (defun mairix-build-search-list ()
   "Display saved searches in current buffer."
index d6c8f6f557d41184884900352d74dc0e7756022d..411d4dfdb4352a510a8473007ac7ef30272c877b 100644 (file)
@@ -1909,13 +1909,9 @@ Return t if groups have changed, nil otherwise."
     map)
   "Mode map for newsticker treeview.")
 
-(defun newsticker-treeview-mode ()
+(define-derived-mode newsticker-treeview-mode fundamental-mode "Newsticker TV"
   "Major mode for Newsticker Treeview.
 \\{newsticker-treeview-mode-map}"
-  (kill-all-local-variables)
-  (use-local-map newsticker-treeview-mode-map)
-  (setq major-mode 'newsticker-treeview-mode)
-  (setq mode-name "Newsticker TV")
   (if (boundp 'tool-bar-map)
       (set (make-local-variable 'tool-bar-map)
            newsticker-treeview-tool-bar-map))
index 1e05d8db33620be855a221b60a235582c31ad355..08ae9574a33eaab27e97862d2380e9ecd0839ffc 100644 (file)
@@ -429,18 +429,12 @@ current buffer, this default action can be modified via
 (put 'quickurl-list-mode 'mode-class 'special)
 
 ;;;###autoload
-(defun quickurl-list-mode ()
+(define-derived-mode quickurl-list-mode fundamental-mode "quickurl list"
   "A mode for browsing the quickurl URL list.
 
 The key bindings for `quickurl-list-mode' are:
 
 \\{quickurl-list-mode-map}"
-  (interactive)
-  (kill-all-local-variables)
-  (use-local-map quickurl-list-mode-map)
-  (setq major-mode 'quickurl-list-mode
-        mode-name  "quickurl list")
-  (run-mode-hooks 'quickurl-list-mode-hook)
   (setq buffer-read-only t
         truncate-lines   t))
 
index f25003e56526b6c162459d1177e7fc4f3e058ddd..16941167fb602723d8d889fb604b2e95c3bdd63a 100644 (file)
@@ -88,7 +88,7 @@ The Custom feature is intended to make this obsolete."
 ;; Edit Options mode is suitable only for specially formatted data.
 (put 'Edit-options-mode 'mode-class 'special)
 
-(defun Edit-options-mode ()
+(define-derived-mode Edit-options-mode emacs-lisp-mode "Options"
   "\\<Edit-options-mode-map>\
 Major mode for editing Emacs user option settings.
 Special commands are:
@@ -100,17 +100,9 @@ Changed values made by these commands take effect immediately.
 
 Each variable description is a paragraph.
 For convenience, the characters \\[backward-paragraph] and \\[forward-paragraph] move back and forward by paragraphs."
-  (kill-all-local-variables)
-  (set-syntax-table emacs-lisp-mode-syntax-table)
-  (use-local-map Edit-options-mode-map)
-  (make-local-variable 'paragraph-separate)
-  (setq paragraph-separate "[^\^@-\^?]")
-  (make-local-variable 'paragraph-start)
-  (setq paragraph-start "\t")
-  (setq truncate-lines t)
-  (setq major-mode 'Edit-options-mode)
-  (setq mode-name "Options")
-  (run-mode-hooks 'Edit-options-mode-hook))
+  (setq-local paragraph-separate "[^\^@-\^?]")
+  (setq-local paragraph-start "\t")
+  (setq-local truncate-lines t))
 
 (defun Edit-options-set () (interactive)
   (Edit-options-modify
index 2e3f500766f0cdfcba9a1781ea582b9a5c7d9074..4bd0c4ddcf4b6aa433be209d34418c0b87748127 100644 (file)
@@ -185,19 +185,8 @@ GRID is the grid of positions to click.")
 
 ;; Gameplay functions.
 
-(put '5x5-mode 'mode-class 'special)
-
-(defun 5x5-mode ()
-  "A mode for playing `5x5'.
-
-The key bindings for `5x5-mode' are:
-
-\\{5x5-mode-map}"
-  (kill-all-local-variables)
-  (use-local-map 5x5-mode-map)
-  (setq major-mode '5x5-mode
-        mode-name  "5x5")
-  (run-mode-hooks '5x5-mode-hook)
+(define-derived-mode 5x5-mode special-mode "5x5"
+  "A mode for playing `5x5'."
   (setq buffer-read-only t
         truncate-lines   t)
   (buffer-disable-undo))
index d38f799756bea843250930ee0c38b8aaa659b0a6..ce2c928db0dc00ec851067e19fc82fe4a2ab2932 100644 (file)
     map))
 
 ;; Blackbox mode is suitable only for specially formatted data.
-(put 'blackbox-mode 'mode-class 'special)
 
-(defun blackbox-mode ()
+(define-derived-mode blackbox-mode special-mode "Blackbox"
   "Major mode for playing blackbox.
 To learn how to play blackbox, see the documentation for function `blackbox'.
 
@@ -124,13 +123,7 @@ The usual mnemonic keys move the cursor around the box.
 
 \\[bb-romp] -- send in a ray from point, or toggle a ball at point
 \\[bb-done] -- end game and get score"
-  (interactive)
-  (kill-all-local-variables)
-  (use-local-map blackbox-mode-map)
-  (setq truncate-lines t)
-  (setq major-mode 'blackbox-mode)
-  (setq mode-name "Blackbox")
-  (run-mode-hooks 'blackbox-mode-hook))
+  (setq truncate-lines t))
 
 ;;;###autoload
 (defun blackbox (num)
index cf86d7a9de57d06348a5f70c73c7dfa1e6d1870a..b995da4513cbcafa985f52b99b3491445284f4e1 100644 (file)
 (put 'landmark-mode 'intangible 1)
 ;; This one is for when they set view-read-only to t: Landmark cannot
 ;; allow View Mode to be activated in its buffer.
-(put 'landmark-mode 'mode-class 'special)
-
-(defun landmark-mode ()
-  "Major mode for playing Landmark against Emacs.
+(define-derived-mode lm-mode special-mode "Lm"
+  "Major mode for playing Lm against Emacs.
 You and Emacs play in turn by marking a free square.  You mark it with X
 and Emacs marks it with O.  The winner is the first to get five contiguous
 marks horizontally, vertically or in diagonal.
@@ -247,16 +245,9 @@ Other useful commands:
 \\{landmark-mode-map}
 Entry to this mode calls the value of `landmark-mode-hook' if that value
 is non-nil.  One interesting value is `turn-on-font-lock'."
-  (interactive)
-  (kill-all-local-variables)
-  (setq major-mode 'landmark-mode
-       mode-name "Landmark")
-  (landmark-display-statistics)
-  (use-local-map landmark-mode-map)
-  (make-local-variable 'font-lock-defaults)
-  (setq font-lock-defaults '(landmark-font-lock-keywords t)
-       buffer-read-only t)
-  (run-mode-hooks 'landmark-mode-hook))
+  (lm-display-statistics)
+  (setq-local font-lock-defaults '(lm-font-lock-keywords t))
+  (setq buffer-read-only t))
 
 
 ;;;_ +  THE SCORE TABLE.
index e4e627a529300ab4d8ec34a1aa090887fef8d29e..f4c26bfc6c48bae550d4cc472e72fc315123a6f7 100644 (file)
@@ -94,7 +94,9 @@ The value t means never ding, and `error' means only ding on wrong input."
     map)
   "Local keymap to use in Mult Puzzle.")
 
-(defun mpuz-mode ()
+
+
+(define-derived-mode mpuz-mode fundamental-mode "Mult Puzzle"
   "Multiplication puzzle mode.
 
 You have to guess which letters stand for which digits in the
@@ -106,13 +108,7 @@ then the digit.  Thus, to guess that A=3, type `A 3'.
 To leave the game to do other editing work, just switch buffers.
 Then you may resume the game with M-x mpuz.
 You may abort a game by typing \\<mpuz-mode-map>\\[mpuz-offer-abort]."
-  (interactive)
-  (kill-all-local-variables)
-  (setq major-mode 'mpuz-mode
-       mode-name  "Mult Puzzle"
-       tab-width 30)
-  (use-local-map mpuz-mode-map)
-  (run-mode-hooks 'mpuz-mode-hook))
+  (setq tab-width 30))
 
 \f
 ;; Some variables for statistics
index 85acfb116d287b930e628a4832f30a7651a189d1..4c11091429852bcb588d0d46bf6f3ba7c5df4827 100644 (file)
@@ -353,21 +353,13 @@ Argument SNAKE-BUFFER is the name of the buffer."
 
 (put 'snake-mode 'mode-class 'special)
 
-(defun snake-mode ()
-  "A mode for playing Snake.
-
-Snake mode keybindings:
-   \\{snake-mode-map}
-"
-  (kill-all-local-variables)
+(define-derived-mode snake-mode special-mode "Snake"
+  "A mode for playing Snake."
 
   (add-hook 'kill-buffer-hook 'gamegrid-kill-timer nil t)
 
   (use-local-map snake-null-map)
 
-  (setq major-mode 'snake-mode)
-  (setq mode-name "Snake")
-
   (unless (featurep 'emacs)
     (setq mode-popup-menu
          '("Snake Commands"
@@ -382,9 +374,7 @@ Snake mode keybindings:
   (setq gamegrid-use-glyphs snake-use-glyphs-flag)
   (setq gamegrid-use-color snake-use-color-flag)
 
-  (gamegrid-init (snake-display-options))
-
-  (run-mode-hooks 'snake-mode-hook))
+  (gamegrid-init (snake-display-options)))
 
 ;;;###autoload
 (defun snake ()