emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r103075: * lisp/simple.el (special-mo


From: Sam Steingold
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r103075: * lisp/simple.el (special-mode-map): Bind "h" to `describe-mode';
Date: Tue, 01 Feb 2011 16:22:21 -0500
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 103075
committer: Sam Steingold <address@hidden>
branch nick: trunk
timestamp: Tue 2011-02-01 16:22:21 -0500
message:
  * lisp/simple.el (special-mode-map): Bind "h" to `describe-mode';
  bind "z" to `kill-this-buffer'.
  (completion-list-mode-map): Bind "z" to `kill-this-buffer'.
  * lisp/apropos.el (apropos-mode-map): Inherit from `special-mode-map'.
  (apropos-mode): Inherit from `special-mode'.
  * lisp/arc-mode.el (archive-mode-map): Inherit from `special-mode-map'.
  * lisp/bookmark.el (bookmark-bmenu-mode): Define using
  `define-derived-mode' inheriting from `special-mode'.
  * lisp/dired.el (dired-mode-map): Inherit from `special-mode-map'.
  * lisp/image-mode.el (image-mode-map): Ditto.
  * lisp/replace.el (occur-mode): Define using
  `define-derived-mode' inheriting from `special-mode'.
  * lisp/tar-mode.el (tar-mode): Inherit from `special-mode'.
  * lisp/calendar/diary-lib.el (diary-fancy-display-mode):
  Inherit from `special-mode-map'.
  * lisp/emacs-lisp/ert.el (ert-simple-view-mode, ert-results-mode):
  Inherit from `special-mode'.
  * lisp/emacs-lisp/package.el (package-menu-mode-map): Copy from
  `special-mode-map'.
  (package-menu-mode): Define using `define-derived-mode'
  inheriting from `special-mode'.
  * erc/erc-list.el (erc-list-menu-mode): Inherit from `special-mode'.
  * lisp/net/xesam.el (xesam-mode): Inherit from `special-mode'.
  (xesam-mode-map): Define separately.
  * lisp/play/solitaire.el (solitaire-mode): Inherit from `special-mode'.
  * lisp/progmodes/compile.el (compilation-minor-mode-map)
  (compilation-mode-map): Inherit from `special-mode-map'.
  * lisp/vc/diff-mode.el (diff-mode-shared-map):
  Inherit from `special-mode-map'.
  * lisp/vc/log-view.el (log-view-mode-map): Add a comment.
modified:
  lisp/ChangeLog
  lisp/apropos.el
  lisp/arc-mode.el
  lisp/bookmark.el
  lisp/calendar/diary-lib.el
  lisp/dired.el
  lisp/emacs-lisp/ert.el
  lisp/emacs-lisp/package.el
  lisp/erc/erc-list.el
  lisp/image-mode.el
  lisp/net/xesam.el
  lisp/play/solitaire.el
  lisp/progmodes/compile.el
  lisp/replace.el
  lisp/simple.el
  lisp/tar-mode.el
  lisp/vc/diff-mode.el
  lisp/vc/log-view.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2011-02-01 18:15:18 +0000
+++ b/lisp/ChangeLog    2011-02-01 21:22:21 +0000
@@ -1,5 +1,38 @@
 2011-02-01  Sam Steingold  <address@hidden>
 
+       * simple.el (special-mode-map): Bind "h" to `describe-mode';
+       bind "z" to `kill-this-buffer'.
+       (completion-list-mode-map): Bind "z" to `kill-this-buffer'.
+       * apropos.el (apropos-mode-map): Inherit from `special-mode-map'.
+       (apropos-mode): Inherit from `special-mode'.
+       * arc-mode.el (archive-mode-map): Inherit from `special-mode-map'.
+       * bookmark.el (bookmark-bmenu-mode): Define using
+       `define-derived-mode' inheriting from `special-mode'.
+       * dired.el (dired-mode-map): Inherit from `special-mode-map'.
+       * image-mode.el (image-mode-map): Ditto.
+       * replace.el (occur-mode): Define using
+       `define-derived-mode' inheriting from `special-mode'.
+       * tar-mode.el (tar-mode): Inherit from `special-mode'.
+       * calendar/diary-lib.el (diary-fancy-display-mode):
+       Inherit from `special-mode-map'.
+       * emacs-lisp/ert.el (ert-simple-view-mode, ert-results-mode):
+       Inherit from `special-mode'.
+       * emacs-lisp/package.el (package-menu-mode-map): Copy from
+       `special-mode-map'.
+       (package-menu-mode): Define using `define-derived-mode'
+       inheriting from `special-mode'.
+       * erc/erc-list.el (erc-list-menu-mode): Inherit from `special-mode'.
+       * net/xesam.el (xesam-mode): Inherit from `special-mode'.
+       (xesam-mode-map): Define separately.
+       * play/solitaire.el (solitaire-mode): Inherit from `special-mode'.
+       * progmodes/compile.el (compilation-minor-mode-map)
+       (compilation-mode-map): Inherit from `special-mode-map'.
+       * vc/diff-mode.el (diff-mode-shared-map):
+       Inherit from `special-mode-map'.
+       * vc/log-view.el (log-view-mode-map): Add a comment.
+
+2011-02-01  Sam Steingold  <address@hidden>
+
        * subr.el (purecopy-cons, purecopy-car): Add shortcuts.
        * faces.el (face-x-resources): Use `purecopy-cons'.
        * files.el (auto-mode-alist, interpreter-mode-alist): Use

=== modified file 'lisp/apropos.el'
--- a/lisp/apropos.el   2011-01-25 04:08:28 +0000
+++ b/lisp/apropos.el   2011-02-01 21:22:21 +0000
@@ -121,15 +121,12 @@
                 (const :tag "show scores" verbose)))
 
 (defvar apropos-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map button-buffer-map)
+  (let ((map (copy-keymap button-buffer-map)))
+    (set-keymap-parent map special-mode-map)
     ;; Use `apropos-follow' instead of just using the button
     ;; definition of RET, so that users can use it anywhere in an
     ;; apropos item, not just on top of a button.
     (define-key map "\C-m" 'apropos-follow)
-    (define-key map " "    'scroll-up)
-    (define-key map "\177" 'scroll-down)
-    (define-key map "q"    'quit-window)
     map)
   "Keymap used in Apropos mode.")
 
@@ -410,7 +407,7 @@
   "Return t if DOC is really matched by the current keywords."
   (apropos-true-hit doc apropos-all-words))
 
-(define-derived-mode apropos-mode fundamental-mode "Apropos"
+(define-derived-mode apropos-mode special-mode "Apropos"
   "Major mode for following hyperlinks in output of apropos commands.
 
 \\{apropos-mode-map}")

=== modified file 'lisp/arc-mode.el'
--- a/lisp/arc-mode.el  2011-01-25 04:08:28 +0000
+++ b/lisp/arc-mode.el  2011-02-01 21:22:21 +0000
@@ -339,7 +339,7 @@
 (defvar archive-local-name nil "Name of local copy of remote archive.")
 (defvar archive-mode-map
   (let ((map (make-keymap)))
-    (suppress-keymap map)
+    (set-keymap-parent map 'special-mode-map)
     (define-key map " " 'archive-next-line)
     (define-key map "a" 'archive-alternate-display)
     ;;(define-key map "c" 'archive-copy)
@@ -348,15 +348,12 @@
     (define-key map "e" 'archive-extract)
     (define-key map "f" 'archive-extract)
     (define-key map "\C-m" 'archive-extract)
-    (define-key map "g" 'revert-buffer)
-    (define-key map "h" 'describe-mode)
     (define-key map "m" 'archive-mark)
     (define-key map "n" 'archive-next-line)
     (define-key map "\C-n" 'archive-next-line)
     (define-key map [down] 'archive-next-line)
     (define-key map "o" 'archive-extract-other-window)
     (define-key map "p" 'archive-previous-line)
-    (define-key map "q" 'quit-window)
     (define-key map "\C-p" 'archive-previous-line)
     (define-key map [up] 'archive-previous-line)
     (define-key map "r" 'archive-rename-entry)

=== modified file 'lisp/bookmark.el'
--- a/lisp/bookmark.el  2011-01-26 08:36:39 +0000
+++ b/lisp/bookmark.el  2011-02-01 21:22:21 +0000
@@ -1058,7 +1058,7 @@
 (defun bookmark-handle-bookmark (bookmark-name-or-record)
   "Call BOOKMARK-NAME-OR-RECORD's handler or `bookmark-default-handler'
 if it has none.  This changes current buffer and point and returns nil,
-or signals a `file-error'. 
+or signals a `file-error'.
 
 If BOOKMARK-NAME-OR-RECORD has no file, this is a no-op.  If
 BOOKMARK-NAME-OR-RECORD has a file, but that file no longer exists,
@@ -1473,45 +1473,6 @@
 (defvar bookmark-bmenu-hidden-bookmarks ())
 
 
-(defvar bookmark-bmenu-mode-map
-  (let ((map (make-keymap)))
-    (suppress-keymap map t)
-    (define-key map "q" 'quit-window)
-    (define-key map "v" 'bookmark-bmenu-select)
-    (define-key map "w" 'bookmark-bmenu-locate)
-    (define-key map "2" 'bookmark-bmenu-2-window)
-    (define-key map "1" 'bookmark-bmenu-1-window)
-    (define-key map "j" 'bookmark-bmenu-this-window)
-    (define-key map "\C-c\C-c" 'bookmark-bmenu-this-window)
-    (define-key map "f" 'bookmark-bmenu-this-window)
-    (define-key map "\C-m" 'bookmark-bmenu-this-window)
-    (define-key map "o" 'bookmark-bmenu-other-window)
-    (define-key map "\C-o" 'bookmark-bmenu-switch-other-window)
-    (define-key map "s" 'bookmark-bmenu-save)
-    (define-key map "k" 'bookmark-bmenu-delete)
-    (define-key map "\C-d" 'bookmark-bmenu-delete-backwards)
-    (define-key map "x" 'bookmark-bmenu-execute-deletions)
-    (define-key map "d" 'bookmark-bmenu-delete)
-    (define-key map " " 'next-line)
-    (define-key map "n" 'next-line)
-    (define-key map "p" 'previous-line)
-    (define-key map "\177" 'bookmark-bmenu-backup-unmark)
-    (define-key map "?" 'describe-mode)
-    (define-key map "u" 'bookmark-bmenu-unmark)
-    (define-key map "m" 'bookmark-bmenu-mark)
-    (define-key map "l" 'bookmark-bmenu-load)
-    (define-key map "r" 'bookmark-bmenu-rename)
-    (define-key map "R" 'bookmark-bmenu-relocate)
-    (define-key map "t" 'bookmark-bmenu-toggle-filenames)
-    (define-key map "a" 'bookmark-bmenu-show-annotation)
-    (define-key map "A" 'bookmark-bmenu-show-all-annotations)
-    (define-key map "e" 'bookmark-bmenu-edit-annotation)
-    ;; The original binding of M-g hides the M-g prefix map.
-    ;; If someone has a better idea than M-g s, I'm open to suggestions.
-    (define-key map [?\M-g ?s] 'bookmark-bmenu-search)
-    (define-key map [mouse-2] 'bookmark-bmenu-other-window-with-mouse)
-    map))
-
 ;; Bookmark Buffer Menu mode is suitable only for specially formatted
 ;; data.
 (put 'bookmark-bmenu-mode 'mode-class 'special)
@@ -1586,7 +1547,7 @@
 
 
 
-(defun bookmark-bmenu-mode ()
+(define-derived-mode bookmark-bmenu-mode special-mode "Bookmark Menu"
   "Major mode for editing a list of bookmarks.
 Each line describes one of the bookmarks in Emacs.
 Letters do not insert themselves; instead, they are commands.
@@ -1619,14 +1580,42 @@
   in another buffer.
 \\[bookmark-bmenu-show-all-annotations] -- show the annotations of all 
bookmarks in another buffer.
 \\[bookmark-bmenu-edit-annotation] -- edit the annotation for the current 
bookmark."
-  (kill-all-local-variables)
-  (use-local-map bookmark-bmenu-mode-map)
   (setq truncate-lines t)
-  (setq buffer-read-only t)
-  (setq major-mode 'bookmark-bmenu-mode)
-  (setq mode-name "Bookmark Menu")
-  (run-mode-hooks 'bookmark-bmenu-mode-hook))
+  (setq buffer-read-only t))
 
+(define-key bookmark-bmenu-mode-map "q" 'quit-window)
+(define-key bookmark-bmenu-mode-map "v" 'bookmark-bmenu-select)
+(define-key bookmark-bmenu-mode-map "w" 'bookmark-bmenu-locate)
+(define-key bookmark-bmenu-mode-map "2" 'bookmark-bmenu-2-window)
+(define-key bookmark-bmenu-mode-map "1" 'bookmark-bmenu-1-window)
+(define-key bookmark-bmenu-mode-map "j" 'bookmark-bmenu-this-window)
+(define-key bookmark-bmenu-mode-map "\C-c\C-c" 'bookmark-bmenu-this-window)
+(define-key bookmark-bmenu-mode-map "f" 'bookmark-bmenu-this-window)
+(define-key bookmark-bmenu-mode-map "\C-m" 'bookmark-bmenu-this-window)
+(define-key bookmark-bmenu-mode-map "o" 'bookmark-bmenu-other-window)
+(define-key bookmark-bmenu-mode-map "\C-o" 'bookmark-bmenu-switch-other-window)
+(define-key bookmark-bmenu-mode-map "s" 'bookmark-bmenu-save)
+(define-key bookmark-bmenu-mode-map "k" 'bookmark-bmenu-delete)
+(define-key bookmark-bmenu-mode-map "\C-d" 'bookmark-bmenu-delete-backwards)
+(define-key bookmark-bmenu-mode-map "x" 'bookmark-bmenu-execute-deletions)
+(define-key bookmark-bmenu-mode-map "d" 'bookmark-bmenu-delete)
+(define-key bookmark-bmenu-mode-map " " 'next-line)
+(define-key bookmark-bmenu-mode-map "n" 'next-line)
+(define-key bookmark-bmenu-mode-map "p" 'previous-line)
+(define-key bookmark-bmenu-mode-map "\177" 'bookmark-bmenu-backup-unmark)
+(define-key bookmark-bmenu-mode-map "?" 'describe-mode)
+(define-key bookmark-bmenu-mode-map "u" 'bookmark-bmenu-unmark)
+(define-key bookmark-bmenu-mode-map "m" 'bookmark-bmenu-mark)
+(define-key bookmark-bmenu-mode-map "l" 'bookmark-bmenu-load)
+(define-key bookmark-bmenu-mode-map "r" 'bookmark-bmenu-rename)
+(define-key bookmark-bmenu-mode-map "R" 'bookmark-bmenu-relocate)
+(define-key bookmark-bmenu-mode-map "t" 'bookmark-bmenu-toggle-filenames)
+(define-key bookmark-bmenu-mode-map "a" 'bookmark-bmenu-show-annotation)
+(define-key bookmark-bmenu-mode-map "A" 'bookmark-bmenu-show-all-annotations)
+(define-key bookmark-bmenu-mode-map "e" 'bookmark-bmenu-edit-annotation)
+;; The original binding of M-g hides the M-g prefix map.
+;; If someone has a better idea than M-g s, I'm open to suggestions.
+(define-key bookmark-bmenu-mode-map [?\M-g ?s] 
'bookmark-bmenu-search)(define-key bookmark-bmenu-mode-map [mouse-2] 
'bookmark-bmenu-other-window-with-mouse)
 
 (defun bookmark-bmenu-toggle-filenames (&optional show)
   "Toggle whether filenames are shown in the bookmark list.

=== modified file 'lisp/calendar/diary-lib.el'
--- a/lisp/calendar/diary-lib.el        2011-01-25 04:08:28 +0000
+++ b/lisp/calendar/diary-lib.el        2011-02-01 21:22:21 +0000
@@ -2409,12 +2409,10 @@
       (setq end (line-beginning-position 2)))
   (font-lock-default-fontify-region beg end verbose))
 
-(defvar diary-fancy-overriding-map (let ((map (make-sparse-keymap)))
-                                     (define-key map "q" 'quit-window)
-                                     map)
+(defvar diary-fancy-overriding-map (make-sparse-keymap)
   "Keymap overriding minor-mode maps in `diary-fancy-display-mode'.")
 
-(define-derived-mode diary-fancy-display-mode fundamental-mode
+(define-derived-mode diary-fancy-display-mode special-mode
   "Diary"
   "Major mode used while displaying diary entries using Fancy Display."
   (set (make-local-variable 'font-lock-defaults)
@@ -2422,7 +2420,6 @@
          t nil nil nil
          (font-lock-fontify-region-function
           . diary-fancy-font-lock-fontify-region-function)))
-  (local-set-key "q" 'quit-window)
   (set (make-local-variable 'minor-mode-overriding-map-alist)
        (list (cons t diary-fancy-overriding-map)))
   (view-mode 1))

=== modified file 'lisp/dired.el'
--- a/lisp/dired.el     2011-01-28 16:58:04 +0000
+++ b/lisp/dired.el     2011-02-01 21:22:21 +0000
@@ -1294,7 +1294,7 @@
   ;; This looks ugly when substitute-command-keys uses C-d instead d:
   ;;  (define-key dired-mode-map "\C-d" 'dired-flag-file-deletion)
   (let ((map (make-keymap)))
-    (suppress-keymap map)
+    (set-keymap-parent map special-mode-map)
     (define-key map [mouse-2] 'dired-mouse-find-file-other-window)
     (define-key map [follow-link] 'mouse-face)
     ;; Commands to mark or flag certain categories of files
@@ -1373,7 +1373,6 @@
     (define-key map "\C-m" 'dired-find-file)
     (put 'dired-find-file :advertised-binding "\C-m")
     (define-key map "g" 'revert-buffer)
-    (define-key map "h" 'describe-mode)
     (define-key map "i" 'dired-maybe-insert-subdir)
     (define-key map "j" 'dired-goto-file)
     (define-key map "k" 'dired-do-kill-lines)
@@ -1383,7 +1382,6 @@
     (define-key map "o" 'dired-find-file-other-window)
     (define-key map "\C-o" 'dired-display-file)
     (define-key map "p" 'dired-previous-line)
-    (define-key map "q" 'quit-window)
     (define-key map "s" 'dired-sort-toggle-or-edit)
     (define-key map "t" 'dired-toggle-marks)
     (define-key map "u" 'dired-unmark)
@@ -2027,7 +2025,7 @@
           ;; with quotation marks in their names.
          (while (string-match "\\(?:[^\\]\\|\\`\\)\\(\"\\)" file)
            (setq file (replace-match "\\\"" nil t file 1)))
-         
+
          (when (eq system-type 'windows-nt)
            (save-match-data
              (let ((start 0))

=== modified file 'lisp/emacs-lisp/ert.el'
--- a/lisp/emacs-lisp/ert.el    2011-01-25 04:08:28 +0000
+++ b/lisp/emacs-lisp/ert.el    2011-02-01 21:22:21 +0000
@@ -1997,19 +1997,12 @@
 ;;; Simple view mode for auxiliary information like stack traces or
 ;;; messages.  Mainly binds "q" for quit.
 
-(define-derived-mode ert-simple-view-mode fundamental-mode "ERT-View"
+(define-derived-mode ert-simple-view-mode special-mode "ERT-View"
   "Major mode for viewing auxiliary information in ERT.")
 
-(loop for (key binding) in
-      '(("q" quit-window)
-        )
-      do
-      (define-key ert-simple-view-mode-map key binding))
-
-
 ;;; Commands and button actions for the results buffer.
 
-(define-derived-mode ert-results-mode fundamental-mode "ERT-Results"
+(define-derived-mode ert-results-mode special-mode "ERT-Results"
   "Major mode for viewing results of ERT test runs.")
 
 (loop for (key binding) in
@@ -2017,7 +2010,6 @@
         ("\t" forward-button)
         ([backtab] backward-button)
         ("j" ert-results-jump-between-summary-and-result)
-        ("q" quit-window)
         ("L" ert-results-toggle-printer-limits-for-test-at-point)
         ("n" ert-results-next-test)
         ("p" ert-results-previous-test)

=== modified file 'lisp/emacs-lisp/package.el'
--- a/lisp/emacs-lisp/package.el        2011-01-25 04:08:28 +0000
+++ b/lisp/emacs-lisp/package.el        2011-02-01 21:22:21 +0000
@@ -1213,18 +1213,16 @@
 ;;;; Package menu mode.
 
 (defvar package-menu-mode-map
-  (let ((map (make-keymap))
+  (let ((map (copy-keymap special-mode-map))
        (menu-map (make-sparse-keymap "Package")))
     (set-keymap-parent map button-buffer-map)
     (define-key map "\C-m" 'package-menu-describe-package)
-    (define-key map "q" 'quit-window)
     (define-key map "n" 'next-line)
     (define-key map "p" 'previous-line)
     (define-key map "u" 'package-menu-mark-unmark)
     (define-key map "\177" 'package-menu-backup-unmark)
     (define-key map "d" 'package-menu-mark-delete)
     (define-key map "i" 'package-menu-mark-install)
-    (define-key map "g" 'revert-buffer)
     (define-key map "r" 'package-menu-refresh)
     (define-key map "~" 'package-menu-mark-obsolete-for-deletion)
     (define-key map "x" 'package-menu-execute)
@@ -1290,15 +1288,11 @@
 
 (put 'package-menu-mode 'mode-class 'special)
 
-(defun package-menu-mode ()
+(define-derived-mode package-menu-mode special-mode "Package Menu"
   "Major mode for browsing a list of packages.
 Letters do not insert themselves; instead, they are commands.
 \\<package-menu-mode-map>
 \\{package-menu-mode-map}"
-  (kill-all-local-variables)
-  (use-local-map package-menu-mode-map)
-  (setq major-mode 'package-menu-mode)
-  (setq mode-name "Package Menu")
   (setq truncate-lines t)
   (setq buffer-read-only t)
   (set (make-local-variable 'revert-buffer-function) 'package-menu-revert)
@@ -1326,8 +1320,7 @@
           (20 . "Version")
           (32 . "Status")
           (43 . "Description"))
-        ""))
-  (run-mode-hooks 'package-menu-mode-hook))
+        "")))
 
 (defun package-menu-refresh ()
   "Download the Emacs Lisp package archive.

=== modified file 'lisp/erc/erc-list.el'
--- a/lisp/erc/erc-list.el      2011-01-25 04:08:28 +0000
+++ b/lisp/erc/erc-list.el      2011-02-01 21:22:21 +0000
@@ -117,26 +117,12 @@
          (sort-fields col (point-min) (point-max))
        (sort-numeric-fields col (point-min) (point-max))))))
 
-(defvar erc-list-menu-mode-map
-  (let ((map (make-keymap)))
-    (suppress-keymap map)
-    (define-key map "k" 'erc-list-kill)
-    (define-key map "j" 'erc-list-join)
-    (define-key map "g" 'erc-list-revert)
-    (define-key map "n" 'next-line)
-    (define-key map "p" 'previous-line)
-    (define-key map "q" 'quit-window)
-    map)
-  "Local keymap for `erc-list-mode' buffers.")
-
-(defvar erc-list-menu-sort-button-map nil
-  "Local keymap for ERC list menu mode sorting buttons.")
-
-(unless erc-list-menu-sort-button-map
+(defvar erc-list-menu-sort-button-map
   (let ((map (make-sparse-keymap)))
     (define-key map [header-line mouse-1] 'erc-list-menu-sort-by-column)
     (define-key map [follow-link] 'mouse-face)
-    (setq erc-list-menu-sort-button-map map)))
+    map)
+  "Local keymap for ERC list menu mode sorting buttons.")
 
 ;; Helper function that makes a buttonized column header.
 (defun erc-list-button (title column)
@@ -146,7 +132,7 @@
                  'mouse-face 'highlight
                  'keymap erc-list-menu-sort-button-map))
 
-(define-derived-mode erc-list-menu-mode nil "ERC-List"
+(define-derived-mode erc-list-menu-mode special-mode "ERC-List"
   "Major mode for editing a list of irc channels."
   (setq header-line-format
        (concat
@@ -160,6 +146,12 @@
 
 (put 'erc-list-menu-mode 'mode-class 'special)
 
+(define-key erc-list-menu-mode-map "k" 'erc-list-kill)
+(define-key erc-list-menu-mode-map "j" 'erc-list-join)
+(define-key erc-list-menu-mode-map "g" 'erc-list-revert)
+(define-key erc-list-menu-mode-map "n" 'next-line)
+(define-key erc-list-menu-mode-map "p" 'previous-line)
+
 ;; Handle a "322" response.  This response tells us about a single
 ;; channel.
 (defun erc-list-handle-322 (proc parsed)

=== modified file 'lisp/image-mode.el'
--- a/lisp/image-mode.el        2011-01-28 19:13:01 +0000
+++ b/lisp/image-mode.el        2011-02-01 21:22:21 +0000
@@ -305,8 +305,7 @@
 
 (defvar image-mode-map
   (let ((map (make-sparse-keymap)))
-    (suppress-keymap map)
-    (define-key map "q"         'quit-window)
+    (set-keymap-parent map special-mode-map)
     (define-key map "\C-c\C-c" 'image-toggle-display)
     (define-key map (kbd "SPC")       'image-scroll-up)
     (define-key map (kbd "DEL")       'image-scroll-down)
@@ -385,7 +384,6 @@
      (funcall
       (if (called-interactively-p 'any) 'error 'message)
       "Cannot display image: %s" (cdr err)))))
-
 ;;;###autoload
 (define-minor-mode image-minor-mode
   "Toggle Image minor mode.

=== modified file 'lisp/net/xesam.el'
--- a/lisp/net/xesam.el 2011-01-25 04:08:28 +0000
+++ b/lisp/net/xesam.el 2011-02-01 21:22:21 +0000
@@ -446,7 +446,12 @@
 
 ;;; Search buffers.
 
-(define-derived-mode xesam-mode nil "Xesam"
+(defvar xesam-mode-map
+  (let ((map (copy-keymap special-mode-map)))
+    (set-keymap-parent xesam-mode-map widget-keymap)
+    map))
+
+(define-derived-mode xesam-mode special-mode "Xesam"
   "Major mode for presenting search results of a Xesam search.
 In this mode, widgets represent the search results.
 
@@ -455,12 +460,6 @@
 can be used to set `xesam-notify-function', which must a search
 engine specific, widget :notify function to visualize xesam:url."
   (set (make-local-variable 'xesam-notify-function) nil)
-
-  ;; Keymap.
-  (setq xesam-mode-map (copy-keymap special-mode-map))
-  (set-keymap-parent xesam-mode-map widget-keymap)
-  (define-key xesam-mode-map "z" 'kill-this-buffer)
-
   ;; Maybe we implement something useful, later on.
   (set (make-local-variable 'revert-buffer-function) 'ignore)
   ;; `xesam-engine', `xesam-search', `xesam-type', `xesam-query', and

=== modified file 'lisp/play/solitaire.el'
--- a/lisp/play/solitaire.el    2011-01-25 04:08:28 +0000
+++ b/lisp/play/solitaire.el    2011-02-01 21:22:21 +0000
@@ -41,54 +41,10 @@
   :type 'hook
   :group 'solitaire)
 
-(defvar solitaire-mode-map
-  (let ((map (make-sparse-keymap)))
-    (suppress-keymap map t)
-
-    (define-key map "\C-f" 'solitaire-right)
-    (define-key map "\C-b" 'solitaire-left)
-    (define-key map "\C-p" 'solitaire-up)
-    (define-key map "\C-n" 'solitaire-down)
-    (define-key map "\r" 'solitaire-move)
-    (define-key map [remap undo] 'solitaire-undo)
-    (define-key map " " 'solitaire-do-check)
-    (define-key map "q" 'quit-window)
-
-    (define-key map [right] 'solitaire-right)
-    (define-key map [left] 'solitaire-left)
-    (define-key map [up] 'solitaire-up)
-    (define-key map [down] 'solitaire-down)
-
-    (define-key map [S-right] 'solitaire-move-right)
-    (define-key map [S-left]  'solitaire-move-left)
-    (define-key map [S-up]    'solitaire-move-up)
-    (define-key map [S-down]  'solitaire-move-down)
-
-    (define-key map [kp-6] 'solitaire-right)
-    (define-key map [kp-4] 'solitaire-left)
-    (define-key map [kp-8] 'solitaire-up)
-    (define-key map [kp-2] 'solitaire-down)
-    (define-key map [kp-5] 'solitaire-center-point)
-
-    (define-key map [S-kp-6] 'solitaire-move-right)
-    (define-key map [S-kp-4] 'solitaire-move-left)
-    (define-key map [S-kp-8] 'solitaire-move-up)
-    (define-key map [S-kp-2] 'solitaire-move-down)
-
-    (define-key map [kp-enter] 'solitaire-move)
-    (define-key map [kp-0] 'solitaire-undo)
-
-    ;; spoil it with s ;)
-    (define-key map [?s] 'solitaire-solve)
-
-    ;;  (define-key map [kp-0] 'solitaire-hint) - Not yet provided ;)
-    map)
-  "Keymap for playing Solitaire.")
-
 ;; Solitaire mode is suitable only for specially formatted data.
 (put 'solitaire-mode 'mode-class 'special)
 
-(define-derived-mode solitaire-mode nil "Solitaire"
+(define-derived-mode solitaire-mode special-mode "Solitaire"
   "Major mode for playing Solitaire.
 To learn how to play Solitaire, see the documentation for function
 `solitaire'.
@@ -98,6 +54,41 @@
   (setq truncate-lines t)
   (setq show-trailing-whitespace nil))
 
+(define-key solitaire-mode-map "\C-f" 'solitaire-right)
+(define-key solitaire-mode-map "\C-b" 'solitaire-left)
+(define-key solitaire-mode-map "\C-p" 'solitaire-up)
+(define-key solitaire-mode-map "\C-n" 'solitaire-down)
+(define-key solitaire-mode-map "\r" 'solitaire-move)
+(define-key solitaire-mode-map [remap undo] 'solitaire-undo)
+(define-key solitaire-mode-map " " 'solitaire-do-check)
+
+(define-key solitaire-mode-map [right] 'solitaire-right)
+(define-key solitaire-mode-map [left] 'solitaire-left)
+(define-key solitaire-mode-map [up] 'solitaire-up)
+(define-key solitaire-mode-map [down] 'solitaire-down)
+
+(define-key solitaire-mode-map [S-right] 'solitaire-move-right)
+(define-key solitaire-mode-map [S-left]  'solitaire-move-left)
+(define-key solitaire-mode-map [S-up]    'solitaire-move-up)
+(define-key solitaire-mode-map [S-down]  'solitaire-move-down)
+
+(define-key solitaire-mode-map [kp-6] 'solitaire-right)
+(define-key solitaire-mode-map [kp-4] 'solitaire-left)
+(define-key solitaire-mode-map [kp-8] 'solitaire-up)
+(define-key solitaire-mode-map [kp-2] 'solitaire-down)
+(define-key solitaire-mode-map [kp-5] 'solitaire-center-point)
+
+(define-key solitaire-mode-map [S-kp-6] 'solitaire-move-right)
+(define-key solitaire-mode-map [S-kp-4] 'solitaire-move-left)
+(define-key solitaire-mode-map [S-kp-8] 'solitaire-move-up)
+(define-key solitaire-mode-map [S-kp-2] 'solitaire-move-down)
+
+(define-key solitaire-mode-map [kp-enter] 'solitaire-move)
+(define-key solitaire-mode-map [kp-0] 'solitaire-undo)
+
+;; spoil it with s ;)
+(define-key solitaire-mode-map [?s] 'solitaire-solve)
+;;  (define-key map [kp-0] 'solitaire-hint) - Not yet provided ;)
 (defvar solitaire-stones 0
   "Counter for the stones that are still there.")
 

=== modified file 'lisp/progmodes/compile.el'
--- a/lisp/progmodes/compile.el 2011-02-01 16:33:17 +0000
+++ b/lisp/progmodes/compile.el 2011-02-01 21:22:21 +0000
@@ -862,7 +862,7 @@
                (< (cdr compilation--previous-directory-cache) pos)))
       ;; No need to call previous-single-property-change.
       (cdr compilation--previous-directory-cache)
-   
+
     (let* ((cache (and compilation--previous-directory-cache
                        (<= (car compilation--previous-directory-cache) pos)
                        (car compilation--previous-directory-cache)))
@@ -1711,6 +1711,7 @@
 
 (defvar compilation-minor-mode-map
   (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map special-mode-map)
     (define-key map [mouse-2] 'compile-goto-error)
     (define-key map [follow-link] 'mouse-face)
     (define-key map "\C-c\C-c" 'compile-goto-error)
@@ -1721,7 +1722,6 @@
     (define-key map "\M-{" 'compilation-previous-file)
     (define-key map "\M-}" 'compilation-next-file)
     (define-key map "g" 'recompile) ; revert
-    (define-key map "q" 'quit-window)
     ;; Set up the menu-bar
     (define-key map [menu-bar compilation]
       (cons "Errors" compilation-menu-map))
@@ -1755,6 +1755,7 @@
     ;; Don't inherit from compilation-minor-mode-map,
     ;; because that introduces a menu bar item we don't want.
     ;; That confuses C-down-mouse-3.
+    (set-keymap-parent map special-mode-map)
     (define-key map [mouse-2] 'compile-goto-error)
     (define-key map [follow-link] 'mouse-face)
     (define-key map "\C-c\C-c" 'compile-goto-error)
@@ -1767,10 +1768,7 @@
     (define-key map "\t" 'compilation-next-error)
     (define-key map [backtab] 'compilation-previous-error)
     (define-key map "g" 'recompile) ; revert
-    (define-key map "q" 'quit-window)
 
-    (define-key map " " 'scroll-up)
-    (define-key map "\^?" 'scroll-down)
     (define-key map "\C-c\C-f" 'next-error-follow-minor-mode)
 
     ;; Set up the menu-bar

=== modified file 'lisp/replace.el'
--- a/lisp/replace.el   2011-01-25 04:08:28 +0000
+++ b/lisp/replace.el   2011-02-01 21:22:21 +0000
@@ -757,63 +757,6 @@
       count)))
 
 
-(defvar occur-mode-map
-  (let ((map (make-sparse-keymap)))
-    ;; We use this alternative name, so we can use \\[occur-mode-mouse-goto].
-    (define-key map [mouse-2] 'occur-mode-mouse-goto)
-    (define-key map "\C-c\C-c" 'occur-mode-goto-occurrence)
-    (define-key map "\C-m" 'occur-mode-goto-occurrence)
-    (define-key map "o" 'occur-mode-goto-occurrence-other-window)
-    (define-key map "\C-o" 'occur-mode-display-occurrence)
-    (define-key map "\M-n" 'occur-next)
-    (define-key map "\M-p" 'occur-prev)
-    (define-key map "r" 'occur-rename-buffer)
-    (define-key map "c" 'clone-buffer)
-    (define-key map "g" 'revert-buffer)
-    (define-key map "q" 'quit-window)
-    (define-key map "z" 'kill-this-buffer)
-    (define-key map "\C-c\C-f" 'next-error-follow-minor-mode)
-    (define-key map [menu-bar] (make-sparse-keymap))
-    (define-key map [menu-bar occur]
-      `(cons ,(purecopy "Occur") map))
-    (define-key map [next-error-follow-minor-mode]
-      (menu-bar-make-mm-toggle next-error-follow-minor-mode
-                              "Auto Occurrence Display"
-                              "Display another occurrence when moving the 
cursor"))
-    (define-key map [separator-1] menu-bar-separator)
-    (define-key map [kill-this-buffer]
-      `(menu-item ,(purecopy "Kill occur buffer") kill-this-buffer
-                 :help ,(purecopy "Kill the current *Occur* buffer")))
-    (define-key map [quit-window]
-      `(menu-item ,(purecopy "Quit occur window") quit-window
-                 :help ,(purecopy "Quit the current *Occur* buffer.  Bury it, 
and maybe delete the selected frame")))
-    (define-key map [revert-buffer]
-      `(menu-item ,(purecopy "Revert occur buffer") revert-buffer
-                 :help ,(purecopy "Replace the text in the *Occur* buffer with 
the results of rerunning occur")))
-    (define-key map [clone-buffer]
-      `(menu-item ,(purecopy "Clone occur buffer") clone-buffer
-                 :help ,(purecopy "Create and return a twin copy of the 
current *Occur* buffer")))
-    (define-key map [occur-rename-buffer]
-      `(menu-item ,(purecopy "Rename occur buffer") occur-rename-buffer
-                 :help ,(purecopy "Rename the current *Occur* buffer to 
*Occur: original-buffer-name*.")))
-    (define-key map [separator-2] menu-bar-separator)
-    (define-key map [occur-mode-goto-occurrence-other-window]
-      `(menu-item ,(purecopy "Go To Occurrence Other Window") 
occur-mode-goto-occurrence-other-window
-                 :help ,(purecopy "Go to the occurrence the current line 
describes, in another window")))
-    (define-key map [occur-mode-goto-occurrence]
-      `(menu-item ,(purecopy "Go To Occurrence") occur-mode-goto-occurrence
-                 :help ,(purecopy "Go to the occurrence the current line 
describes")))
-    (define-key map [occur-mode-display-occurrence]
-      `(menu-item ,(purecopy "Display Occurrence") 
occur-mode-display-occurrence
-                 :help ,(purecopy "Display in another window the occurrence 
the current line describes")))
-    (define-key map [occur-next]
-      `(menu-item ,(purecopy "Move to next match") occur-next
-                 :help ,(purecopy "Move to the Nth (default 1) next match in 
an Occur mode buffer")))
-    (define-key map [occur-prev]
-      `(menu-item ,(purecopy "Move to previous match") occur-prev
-                 :help ,(purecopy "Move to the Nth (default 1) previous match 
in an Occur mode buffer")))
-    map)
-  "Keymap for `occur-mode'.")
 
 (defvar occur-revert-arguments nil
   "Arguments to pass to `occur-1' to revert an Occur mode buffer.
@@ -837,24 +780,66 @@
   :group 'matching)
 
 (put 'occur-mode 'mode-class 'special)
-(defun occur-mode ()
+(define-derived-mode occur-mode special-mode "Occur"
   "Major mode for output from \\[occur].
 \\<occur-mode-map>Move point to one of the items in this buffer, then use
 \\[occur-mode-goto-occurrence] to go to the occurrence that the item refers to.
 Alternatively, click \\[occur-mode-mouse-goto] on an item to go to it.
 
 \\{occur-mode-map}"
-  (interactive)
-  (kill-all-local-variables)
-  (use-local-map occur-mode-map)
-  (setq major-mode 'occur-mode)
-  (setq mode-name "Occur")
   (set (make-local-variable 'revert-buffer-function) 'occur-revert-function)
   (make-local-variable 'occur-revert-arguments)
   (add-hook 'change-major-mode-hook 'font-lock-defontify nil t)
-  (setq next-error-function 'occur-next-error)
-  (run-mode-hooks 'occur-mode-hook))
+  (setq next-error-function 'occur-next-error))
 
+(define-key occur-mode-map [mouse-2] 'occur-mode-mouse-goto)
+(define-key occur-mode-map "\C-c\C-c" 'occur-mode-goto-occurrence)
+(define-key occur-mode-map "\C-m" 'occur-mode-goto-occurrence)
+(define-key occur-mode-map "o" 'occur-mode-goto-occurrence-other-window)
+(define-key occur-mode-map "\C-o" 'occur-mode-display-occurrence)
+(define-key occur-mode-map "\M-n" 'occur-next)
+(define-key occur-mode-map "\M-p" 'occur-prev)
+(define-key occur-mode-map "r" 'occur-rename-buffer)
+(define-key occur-mode-map "c" 'clone-buffer)
+(define-key occur-mode-map "\C-c\C-f" 'next-error-follow-minor-mode)
+(define-key occur-mode-map [menu-bar] (make-sparse-keymap))
+(define-key occur-mode-map [menu-bar occur] `(cons ,(purecopy "Occur") map))
+(define-key occur-mode-map [next-error-follow-minor-mode]
+  (menu-bar-make-mm-toggle next-error-follow-minor-mode
+                           "Auto Occurrence Display"
+                           "Display another occurrence when moving the 
cursor"))
+(define-key occur-mode-map [separator-1] menu-bar-separator)
+(define-key occur-mode-map [kill-this-buffer]
+  `(menu-item ,(purecopy "Kill occur buffer") kill-this-buffer
+              :help ,(purecopy "Kill the current *Occur* buffer")))
+(define-key occur-mode-map [quit-window]
+  `(menu-item ,(purecopy "Quit occur window") quit-window
+              :help ,(purecopy "Quit the current *Occur* buffer.  Bury it, and 
maybe delete the selected frame")))
+(define-key occur-mode-map [revert-buffer]
+  `(menu-item ,(purecopy "Revert occur buffer") revert-buffer
+              :help ,(purecopy "Replace the text in the *Occur* buffer with 
the results of rerunning occur")))
+(define-key occur-mode-map [clone-buffer]
+  `(menu-item ,(purecopy "Clone occur buffer") clone-buffer
+              :help ,(purecopy "Create and return a twin copy of the current 
*Occur* buffer")))
+(define-key occur-mode-map [occur-rename-buffer]
+  `(menu-item ,(purecopy "Rename occur buffer") occur-rename-buffer
+              :help ,(purecopy "Rename the current *Occur* buffer to *Occur: 
original-buffer-name*.")))
+(define-key occur-mode-map [separator-2] menu-bar-separator)
+(define-key occur-mode-map [occur-mode-goto-occurrence-other-window]
+  `(menu-item ,(purecopy "Go To Occurrence Other Window") 
occur-mode-goto-occurrence-other-window
+              :help ,(purecopy "Go to the occurrence the current line 
describes, in another window")))
+(define-key occur-mode-map [occur-mode-goto-occurrence]
+  `(menu-item ,(purecopy "Go To Occurrence") occur-mode-goto-occurrence
+              :help ,(purecopy "Go to the occurrence the current line 
describes")))
+(define-key occur-mode-map [occur-mode-display-occurrence]
+  `(menu-item ,(purecopy "Display Occurrence") occur-mode-display-occurrence
+              :help ,(purecopy "Display in another window the occurrence the 
current line describes")))
+(define-key occur-mode-map [occur-next]
+  `(menu-item ,(purecopy "Move to next match") occur-next
+              :help ,(purecopy "Move to the Nth (default 1) next match in an 
Occur mode buffer")))
+(define-key occur-mode-map [occur-prev]
+  `(menu-item ,(purecopy "Move to previous match") occur-prev
+              :help ,(purecopy "Move to the Nth (default 1) previous match in 
an Occur mode buffer")))
 (defun occur-revert-function (ignore1 ignore2)
   "Handle `revert-buffer' for Occur mode buffers."
   (apply 'occur-1 (append occur-revert-arguments (list (buffer-name)))))

=== modified file 'lisp/simple.el'
--- a/lisp/simple.el    2011-01-25 04:08:28 +0000
+++ b/lisp/simple.el    2011-02-01 21:22:21 +0000
@@ -411,9 +411,11 @@
     (define-key map " " 'scroll-up)
     (define-key map "\C-?" 'scroll-down)
     (define-key map "?" 'describe-mode)
+    (define-key map "h" 'describe-mode)
     (define-key map ">" 'end-of-buffer)
     (define-key map "<" 'beginning-of-buffer)
     (define-key map "g" 'revert-buffer)
+    (define-key map "z" 'kill-this-buffer)
     map))
 
 (put 'special-mode 'mode-class 'special)
@@ -5890,6 +5892,7 @@
     (define-key map [left] 'previous-completion)
     (define-key map [right] 'next-completion)
     (define-key map "q" 'quit-window)
+    (define-key map "z" 'kill-this-buffer)
     map)
   "Local map for completion list buffers.")
 

=== modified file 'lisp/tar-mode.el'
--- a/lisp/tar-mode.el  2011-01-26 08:36:39 +0000
+++ b/lisp/tar-mode.el  2011-02-01 21:22:21 +0000
@@ -220,7 +220,7 @@
 (defun tar-roundup-512 (s)
   "Round S up to the next multiple of 512."
   (ash (ash (+ s 511) -9) 9))
- 
+
 (defun tar-header-block-tokenize (pos coding)
   "Return a `tar-header' structure.
 This is a list of name, mode, uid, gid, size,
@@ -283,7 +283,7 @@
             (let* ((size (tar-parse-octal-integer
                           string tar-size-offset tar-time-offset))
                    ;; -1 so as to strip the terminating 0 byte.
-                  (name (decode-coding-string 
+                  (name (decode-coding-string
                          (buffer-substring pos (+ pos size -1)) coding))
                    (descriptor (tar-header-block-tokenize
                                 (+ pos (tar-roundup-512 size))
@@ -298,7 +298,7 @@
               (setf (tar-header-header-start descriptor)
                     (copy-marker (- pos 512) t))
               descriptor)
-        
+
           (make-tar-header
            (copy-marker pos nil)
            name
@@ -501,7 +501,7 @@
         ;;(tar-header-block-check-checksum
         ;;  hblock (tar-header-block-checksum hblock)
         ;;  (tar-header-name descriptor))
-        
+
         (push descriptor result)
         (setq pos (tar-header-data-end descriptor))
         (progress-reporter-update progress-reporter pos)))
@@ -520,86 +520,7 @@
     (goto-char (point-min))
     (restore-buffer-modified-p modified)))
 
-(defvar tar-mode-map
-  (let ((map (make-keymap)))
-    (suppress-keymap map)
-    (define-key map " " 'tar-next-line)
-    (define-key map "C" 'tar-copy)
-    (define-key map "d" 'tar-flag-deleted)
-    (define-key map "\^D" 'tar-flag-deleted)
-    (define-key map "e" 'tar-extract)
-    (define-key map "f" 'tar-extract)
-    (define-key map "\C-m" 'tar-extract)
-    (define-key map [mouse-2] 'tar-mouse-extract)
-    (define-key map "g" 'revert-buffer)
-    (define-key map "h" 'describe-mode)
-    (define-key map "n" 'tar-next-line)
-    (define-key map "\^N" 'tar-next-line)
-    (define-key map [down] 'tar-next-line)
-    (define-key map "o" 'tar-extract-other-window)
-    (define-key map "p" 'tar-previous-line)
-    (define-key map "q" 'quit-window)
-    (define-key map "\^P" 'tar-previous-line)
-    (define-key map [up] 'tar-previous-line)
-    (define-key map "R" 'tar-rename-entry)
-    (define-key map "u" 'tar-unflag)
-    (define-key map "v" 'tar-view)
-    (define-key map "x" 'tar-expunge)
-    (define-key map "\177" 'tar-unflag-backwards)
-    (define-key map "E" 'tar-extract-other-window)
-    (define-key map "M" 'tar-chmod-entry)
-    (define-key map "G" 'tar-chgrp-entry)
-    (define-key map "O" 'tar-chown-entry)
-    ;; Let mouse-1 follow the link.
-    (define-key map [follow-link] 'mouse-face)
-
-    ;; Make menu bar items.
-
-    ;; Get rid of the Edit menu bar item to save space.
-    (define-key map [menu-bar edit] 'undefined)
-
-    (define-key map [menu-bar immediate]
-      (cons "Immediate" (make-sparse-keymap "Immediate")))
-
-    (define-key map [menu-bar immediate view]
-      '("View This File" . tar-view))
-    (define-key map [menu-bar immediate display]
-      '("Display in Other Window" . tar-display-other-window))
-    (define-key map [menu-bar immediate find-file-other-window]
-      '("Find in Other Window" . tar-extract-other-window))
-    (define-key map [menu-bar immediate find-file]
-      '("Find This File" . tar-extract))
-
-    (define-key map [menu-bar mark]
-      (cons "Mark" (make-sparse-keymap "Mark")))
-
-    (define-key map [menu-bar mark unmark-all]
-      '("Unmark All" . tar-clear-modification-flags))
-    (define-key map [menu-bar mark deletion]
-      '("Flag" . tar-flag-deleted))
-    (define-key map [menu-bar mark unmark]
-      '("Unflag" . tar-unflag))
-
-    (define-key map [menu-bar operate]
-      (cons "Operate" (make-sparse-keymap "Operate")))
-
-    (define-key map [menu-bar operate chown]
-      '("Change Owner..." . tar-chown-entry))
-    (define-key map [menu-bar operate chgrp]
-      '("Change Group..." . tar-chgrp-entry))
-    (define-key map [menu-bar operate chmod]
-      '("Change Mode..." . tar-chmod-entry))
-    (define-key map [menu-bar operate rename]
-      '("Rename to..." . tar-rename-entry))
-    (define-key map [menu-bar operate copy]
-      '("Copy to..." . tar-copy))
-    (define-key map [menu-bar operate expunge]
-      '("Expunge Marked Files" . tar-expunge))
-    
-    map)
-  "Local keymap for Tar mode listings.")
-
-
+
 ;; tar mode is suitable only for specially formatted data.
 (put 'tar-mode 'mode-class 'special)
 (put 'tar-subfile-mode 'mode-class 'special)
@@ -614,7 +535,7 @@
   (if (buffer-live-p tar-data-buffer) (kill-buffer tar-data-buffer)))
 
 ;;;###autoload
-(define-derived-mode tar-mode nil "Tar"
+(define-derived-mode tar-mode special-mode "Tar"
   "Major mode for viewing a tar file as a dired-like listing of its contents.
 You can move around using the usual cursor motion commands.
 Letters no longer insert themselves.
@@ -669,6 +590,77 @@
      (fundamental-mode)
      (signal (car err) (cdr err)))))
 
+(define-key tar-mode-map " " 'tar-next-line)
+(define-key tar-mode-map "C" 'tar-copy)
+(define-key tar-mode-map "d" 'tar-flag-deleted)
+(define-key tar-mode-map "\^D" 'tar-flag-deleted)
+(define-key tar-mode-map "e" 'tar-extract)
+(define-key tar-mode-map "f" 'tar-extract)
+(define-key tar-mode-map "\C-m" 'tar-extract)
+(define-key tar-mode-map [mouse-2] 'tar-mouse-extract)
+(define-key tar-mode-map "g" 'revert-buffer)
+(define-key tar-mode-map "h" 'describe-mode)
+(define-key tar-mode-map "n" 'tar-next-line)
+(define-key tar-mode-map "\^N" 'tar-next-line)
+(define-key tar-mode-map [down] 'tar-next-line)
+(define-key tar-mode-map "o" 'tar-extract-other-window)
+(define-key tar-mode-map "p" 'tar-previous-line)
+(define-key tar-mode-map "\^P" 'tar-previous-line)
+(define-key tar-mode-map [up] 'tar-previous-line)
+(define-key tar-mode-map "R" 'tar-rename-entry)
+(define-key tar-mode-map "u" 'tar-unflag)
+(define-key tar-mode-map "v" 'tar-view)
+(define-key tar-mode-map "x" 'tar-expunge)
+(define-key tar-mode-map "\177" 'tar-unflag-backwards)
+(define-key tar-mode-map "E" 'tar-extract-other-window)
+(define-key tar-mode-map "M" 'tar-chmod-entry)
+(define-key tar-mode-map "G" 'tar-chgrp-entry)
+(define-key tar-mode-map "O" 'tar-chown-entry)
+;; Let mouse-1 follow the link.
+(define-key tar-mode-map [follow-link] 'mouse-face)
+
+;; Make menu bar items.
+
+;; Get rid of the Edit menu bar item to save space.
+(define-key tar-mode-map [menu-bar edit] 'undefined)
+
+(define-key tar-mode-map [menu-bar immediate]
+  (cons "Immediate" (make-sparse-keymap "Immediate")))
+
+(define-key tar-mode-map [menu-bar immediate view]
+  '("View This File" . tar-view))
+(define-key tar-mode-map [menu-bar immediate display]
+  '("Display in Other Window" . tar-display-other-window))
+(define-key tar-mode-map [menu-bar immediate find-file-other-window]
+  '("Find in Other Window" . tar-extract-other-window))
+(define-key tar-mode-map [menu-bar immediate find-file]
+  '("Find This File" . tar-extract))
+
+(define-key tar-mode-map [menu-bar mark]
+  (cons "Mark" (make-sparse-keymap "Mark")))
+
+(define-key tar-mode-map [menu-bar mark unmark-all]
+  '("Unmark All" . tar-clear-modification-flags))
+(define-key tar-mode-map [menu-bar mark deletion]
+  '("Flag" . tar-flag-deleted))
+(define-key tar-mode-map [menu-bar mark unmark]
+  '("Unflag" . tar-unflag))
+
+(define-key tar-mode-map [menu-bar operate]
+  (cons "Operate" (make-sparse-keymap "Operate")))
+
+(define-key tar-mode-map [menu-bar operate chown]
+  '("Change Owner..." . tar-chown-entry))
+(define-key tar-mode-map [menu-bar operate chgrp]
+  '("Change Group..." . tar-chgrp-entry))
+(define-key tar-mode-map [menu-bar operate chmod]
+  '("Change Mode..." . tar-chmod-entry))
+(define-key tar-mode-map [menu-bar operate rename]
+  '("Rename to..." . tar-rename-entry))
+(define-key tar-mode-map [menu-bar operate copy]
+  '("Copy to..." . tar-copy))
+(define-key tar-mode-map [menu-bar operate expunge]
+  '("Expunge Marked Files" . tar-expunge))
 
 (define-minor-mode tar-subfile-mode
   "Minor mode for editing an element of a tar-file.

=== modified file 'lisp/vc/diff-mode.el'
--- a/lisp/vc/diff-mode.el      2011-01-25 04:08:28 +0000
+++ b/lisp/vc/diff-mode.el      2011-02-01 21:22:21 +0000
@@ -140,9 +140,9 @@
     ;; Standard M-r is useful, so don't change M-r or M-R.
     ;;("r" . diff-restrict-view)
     ;;("R" . diff-reverse-direction)
-    ("g" . revert-buffer)
-    ("q" . quit-window))
-  "Basic keymap for `diff-mode', bound to various prefix keys.")
+    )
+  "Basic keymap for `diff-mode', bound to various prefix keys."
+  :inherit special-mode-map)
 
 (easy-mmode-defmap diff-mode-map
   `(("\e" . ,diff-mode-shared-map)

=== modified file 'lisp/vc/log-view.el'
--- a/lisp/vc/log-view.el       2011-01-25 04:08:28 +0000
+++ b/lisp/vc/log-view.el       2011-02-01 21:22:21 +0000
@@ -125,9 +125,12 @@
 (require 'wid-edit)
 
 (easy-mmode-defmap log-view-mode-map
-  '(("z" . kill-this-buffer)
+  '(
+    ;; FIXME: (copy-keymap special-mode-map) instead
+    ("z" . kill-this-buffer)
     ("q" . quit-window)
     ("g" . revert-buffer)
+
     ("m" . log-view-toggle-mark-entry)
     ("e" . log-view-modify-change-comment)
     ("d" . log-view-diff)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]