aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggert2011-02-10 10:37:27 -0800
committerPaul Eggert2011-02-10 10:37:27 -0800
commit2098fd549f4c8a00246324a35de6af8144f5b628 (patch)
tree922d8e9f57dcf00a9be5e9144ee76f372e7aac57
parent90e04ea245917ca1d9856f1354c074991e99db7f (diff)
parentb016851cb127f91a7ffa5d8295e5f3d4fdd3222a (diff)
downloademacs-2098fd549f4c8a00246324a35de6af8144f5b628.tar.gz
emacs-2098fd549f4c8a00246324a35de6af8144f5b628.zip
Merge from mainline.
-rw-r--r--lisp/ChangeLog67
-rw-r--r--lisp/bookmark.el70
-rw-r--r--lisp/emacs-lisp/re-builder.el12
-rw-r--r--lisp/emulation/vip.el253
-rw-r--r--lisp/erc/ChangeLog5
-rw-r--r--lisp/erc/erc-list.el17
-rw-r--r--lisp/help-mode.el21
-rw-r--r--lisp/hi-lock.el72
-rw-r--r--lisp/ibuffer.el292
-rw-r--r--lisp/kmacro.el47
-rw-r--r--lisp/mail/rmail.el2
-rw-r--r--lisp/mail/rmailsum.el392
-rw-r--r--lisp/menu-bar.el2493
-rw-r--r--lisp/net/net-utils.el16
-rw-r--r--lisp/net/newst-plainview.el215
-rw-r--r--lisp/net/rcirc.el139
-rw-r--r--lisp/org/ChangeLog5
-rw-r--r--lisp/org/org-remember.el8
-rw-r--r--lisp/org/org-src.el6
-rw-r--r--lisp/play/gametree.el26
-rw-r--r--lisp/play/handwrite.el105
-rw-r--r--lisp/play/pong.el24
-rw-r--r--lisp/play/snake.el23
-rw-r--r--lisp/play/solitaire.el78
-rw-r--r--lisp/progmodes/gdb-mi.el65
-rw-r--r--lisp/progmodes/idlw-help.el31
-rw-r--r--lisp/progmodes/idlwave.el34
-rw-r--r--lisp/replace.el102
-rw-r--r--lisp/tar-mode.el148
-rw-r--r--lisp/term/lk201.el130
-rw-r--r--lisp/textmodes/bib-mode.el13
-rw-r--r--lisp/textmodes/enriched.el48
32 files changed, 2545 insertions, 2414 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 1a69d98f17e..c942f9c52ca 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,51 @@
12011-02-10 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 Move keymap initialization into declaration.
4 * textmodes/enriched.el (enriched-mode-map):
5 * textmodes/bib-mode.el (bib-mode-map):
6 * term/lk201.el (lk201-function-map):
7 * tar-mode.el (tar-mode-map):
8 * replace.el (occur-mode-map):
9 * progmodes/idlwave.el (idlwave-rinfo-mouse-map, idlwave-rinfo-map):
10 * progmodes/idlw-help.el (idlwave-help-mode-map):
11 * progmodes/gdb-mi.el (gdb-memory-format-menu, gdb-memory-unit-menu):
12 * play/solitaire.el (solitaire-mode-map):
13 * play/snake.el (snake-mode-map, snake-null-map):
14 * play/pong.el (pong-mode-map):
15 * play/handwrite.el (menu-bar-handwrite-map):
16 * play/gametree.el (gametree-mode-map):
17 * net/rcirc.el (rcirc-mode-map, rcirc-browse-url-map
18 (rcirc-multiline-minor-mode-map, rcirc-track-minor-mode-map):
19 * net/newst-plainview.el (newsticker-menu, newsticker-mode-map)
20 (newsticker--url-keymap):
21 * net/net-utils.el (nslookup-mode-map, ftp-mode-map):
22 * menu-bar.el (menu-bar-file-menu, menu-bar-i-search-menu)
23 (menu-bar-search-menu, menu-bar-replace-menu, menu-bar-goto-menu)
24 (menu-bar-edit-menu, menu-bar-custom-menu)
25 (menu-bar-showhide-fringe-ind-menu, menu-bar-showhide-fringe-menu)
26 (menu-bar-showhide-scroll-bar-menu, menu-bar-showhide-menu)
27 (menu-bar-line-wrapping-menu, menu-bar-options-menu)
28 (menu-bar-games-menu, menu-bar-encryption-decryption-menu)
29 (menu-bar-tools-menu, menu-bar-describe-menu)
30 (menu-bar-search-documentation-menu, menu-bar-manuals-menu)
31 (menu-bar-help-menu):
32 * mail/rmailsum.el (rmail-summary-mode-map):
33 * kmacro.el (kmacro-step-edit-map):
34 * ibuffer.el (ibuffer-mode-groups-popup, ibuffer-mode-map)
35 (ibuffer-mode-operate-map):
36 * hi-lock.el (hi-lock-menu, hi-lock-map):
37 * emulation/vip.el (vip-mode-map):
38 * emacs-lisp/re-builder.el (reb-lisp-mode-map):
39 * bookmark.el (bookmark-bmenu-mode-map):
40 * help-mode.el (help-mode-map): Move initialization into declaration.
41
422011-02-10 Deniz Dogan <deniz.a.m.dogan@gmail.com>
43
44 * net/rcirc.el: Add PRIVMSG and CTCP functions.
45 (rcirc-send-privmsg, rcirc-send-ctcp): New functions.
46 (rcirc-keepalive, rcirc-cmd-ctcp, rcirc-ctcp-sender-PING)
47 (rcirc-cmd-me, rcirc-authenticate): Use them.
48
12011-02-10 Ken Manheimer <ken.manheimer@gmail.com> 492011-02-10 Ken Manheimer <ken.manheimer@gmail.com>
2 50
3 * allout.el: Synopsis: Change allout user configuration so 51 * allout.el: Synopsis: Change allout user configuration so
@@ -63,8 +111,7 @@
63 111
642011-02-07 Michael Albinus <michael.albinus@gmx.de> 1122011-02-07 Michael Albinus <michael.albinus@gmx.de>
65 113
66 * net/dbus.el (dbus-list-activatable-names): Add optional argument 114 * net/dbus.el (dbus-list-activatable-names): Add optional argument BUS.
67 BUS.
68 115
692011-02-07 Deniz Dogan <deniz.a.m.dogan@gmail.com> 1162011-02-07 Deniz Dogan <deniz.a.m.dogan@gmail.com>
70 117
@@ -72,21 +119,21 @@
72 119
732011-02-06 Jay Belanger <jay.p.belanger@gmail.com> 1202011-02-06 Jay Belanger <jay.p.belanger@gmail.com>
74 121
75 * calc/calc.el (calc-logunits-field-reference) Renamed from 122 * calc/calc.el (calc-logunits-field-reference): Rename from
76 `calc-default-field-reference-level'. 123 `calc-default-field-reference-level'.
77 (calc-logunits-power-reference): Renamed from 124 (calc-logunits-power-reference): Rename from
78 `calc-default-power-reference-level' 125 `calc-default-power-reference-level'
79 126
80 * calc/calc-units.el (math-logunits-quant): Renamed from 127 * calc/calc-units.el (math-logunits-quant): Rename from
81 `math-logunits-level' 128 `math-logunits-level'
82 (math-logunits-plus): Renamed from math-logcombine. 129 (math-logunits-plus): Rename from math-logcombine.
83 (calcFunc-luplus, calcFunc-luminus calc-luplus, calc-luminus): Remove. 130 (calcFunc-luplus, calcFunc-luminus calc-luplus, calc-luminus): Remove.
84 (calcFunc-lufieldadd, calcFunc-lupoweradd, calcFunc-lufieldsub) 131 (calcFunc-lufieldadd, calcFunc-lupoweradd, calcFunc-lufieldsub)
85 (calcFunc-lufieldsub,calc-logunits-add calc-logunits-sub): 132 (calcFunc-lufieldsub,calc-logunits-add calc-logunits-sub):
86 New functions. 133 New functions.
87 (calcFunc-fieldquant): Renamed from `calcFunc-fieldlevel'. 134 (calcFunc-fieldquant): Rename from `calcFunc-fieldlevel'.
88 (calcFunc-powerquant): Renamed from `calcFunc-powerlevel'. 135 (calcFunc-powerquant): Rename from `calcFunc-powerlevel'.
89 (calc-logunits-quantity): Renamed from `calc-level'. 136 (calc-logunits-quantity): Rename from `calc-level'.
90 (calcFunc-dbfieldlevel, calcFunc-dbpowerlevel, calcFunc-npfieldlevel) 137 (calcFunc-dbfieldlevel, calcFunc-dbpowerlevel, calcFunc-npfieldlevel)
91 (calcFunc-nppowerlevel,calc-logunits-dblevel, calc-logunits-nplevel) 138 (calcFunc-nppowerlevel,calc-logunits-dblevel, calc-logunits-nplevel)
92 (math-logunits-mul, calcFunc-lufieldmul, calcFunc-lupowermul) 139 (math-logunits-mul, calcFunc-lufieldmul, calcFunc-lupowermul)
@@ -94,7 +141,7 @@
94 (calcFunc-lupowerdiv,calc-logunits-divide,math-logunits-level): 141 (calcFunc-lupowerdiv,calc-logunits-divide,math-logunits-level):
95 New functions. 142 New functions.
96 143
97 * calc/calc-help.el (calc-u-prefix-help): Removed "L" reference. 144 * calc/calc-help.el (calc-u-prefix-help): Remove "L" reference.
98 (calc-ul-prefix-help): Remove. 145 (calc-ul-prefix-help): Remove.
99 (calc-l-prefix-help): New function. 146 (calc-l-prefix-help): New function.
100 (calc-full-help): Add reference to `calc-l-prefix-help'. 147 (calc-full-help): Add reference to `calc-l-prefix-help'.
diff --git a/lisp/bookmark.el b/lisp/bookmark.el
index 503264f4b32..cd946e46be9 100644
--- a/lisp/bookmark.el
+++ b/lisp/bookmark.el
@@ -1473,6 +1473,43 @@ method buffers use to resolve name collisions."
1473(defvar bookmark-bmenu-hidden-bookmarks ()) 1473(defvar bookmark-bmenu-hidden-bookmarks ())
1474 1474
1475 1475
1476(defvar bookmark-bmenu-mode-map
1477 (let ((map (make-keymap)))
1478 (set-keymap-parent map special-mode-map)
1479 (define-key map "v" 'bookmark-bmenu-select)
1480 (define-key map "w" 'bookmark-bmenu-locate)
1481 (define-key map "2" 'bookmark-bmenu-2-window)
1482 (define-key map "1" 'bookmark-bmenu-1-window)
1483 (define-key map "j" 'bookmark-bmenu-this-window)
1484 (define-key map "\C-c\C-c" 'bookmark-bmenu-this-window)
1485 (define-key map "f" 'bookmark-bmenu-this-window)
1486 (define-key map "\C-m" 'bookmark-bmenu-this-window)
1487 (define-key map "o" 'bookmark-bmenu-other-window)
1488 (define-key map "\C-o" 'bookmark-bmenu-switch-other-window)
1489 (define-key map "s" 'bookmark-bmenu-save)
1490 (define-key map "k" 'bookmark-bmenu-delete)
1491 (define-key map "\C-d" 'bookmark-bmenu-delete-backwards)
1492 (define-key map "x" 'bookmark-bmenu-execute-deletions)
1493 (define-key map "d" 'bookmark-bmenu-delete)
1494 (define-key map " " 'next-line)
1495 (define-key map "n" 'next-line)
1496 (define-key map "p" 'previous-line)
1497 (define-key map "\177" 'bookmark-bmenu-backup-unmark)
1498 (define-key map "u" 'bookmark-bmenu-unmark)
1499 (define-key map "m" 'bookmark-bmenu-mark)
1500 (define-key map "l" 'bookmark-bmenu-load)
1501 (define-key map "r" 'bookmark-bmenu-rename)
1502 (define-key map "R" 'bookmark-bmenu-relocate)
1503 (define-key map "t" 'bookmark-bmenu-toggle-filenames)
1504 (define-key map "a" 'bookmark-bmenu-show-annotation)
1505 (define-key map "A" 'bookmark-bmenu-show-all-annotations)
1506 (define-key map "e" 'bookmark-bmenu-edit-annotation)
1507 ;; The original binding of M-g hides the M-g prefix map.
1508 ;; If someone has a better idea than M-g s, I'm open to suggestions.
1509 (define-key map [?\M-g ?s] 'bookmark-bmenu-search)
1510 (define-key map [mouse-2] 'bookmark-bmenu-other-window-with-mouse)
1511 map))
1512
1476;; Bookmark Buffer Menu mode is suitable only for specially formatted 1513;; Bookmark Buffer Menu mode is suitable only for specially formatted
1477;; data. 1514;; data.
1478(put 'bookmark-bmenu-mode 'mode-class 'special) 1515(put 'bookmark-bmenu-mode 'mode-class 'special)
@@ -1583,39 +1620,6 @@ Bookmark names preceded by a \"*\" have annotations.
1583 (setq truncate-lines t) 1620 (setq truncate-lines t)
1584 (setq buffer-read-only t)) 1621 (setq buffer-read-only t))
1585 1622
1586(define-key bookmark-bmenu-mode-map "q" 'quit-window)
1587(define-key bookmark-bmenu-mode-map "v" 'bookmark-bmenu-select)
1588(define-key bookmark-bmenu-mode-map "w" 'bookmark-bmenu-locate)
1589(define-key bookmark-bmenu-mode-map "2" 'bookmark-bmenu-2-window)
1590(define-key bookmark-bmenu-mode-map "1" 'bookmark-bmenu-1-window)
1591(define-key bookmark-bmenu-mode-map "j" 'bookmark-bmenu-this-window)
1592(define-key bookmark-bmenu-mode-map "\C-c\C-c" 'bookmark-bmenu-this-window)
1593(define-key bookmark-bmenu-mode-map "f" 'bookmark-bmenu-this-window)
1594(define-key bookmark-bmenu-mode-map "\C-m" 'bookmark-bmenu-this-window)
1595(define-key bookmark-bmenu-mode-map "o" 'bookmark-bmenu-other-window)
1596(define-key bookmark-bmenu-mode-map "\C-o" 'bookmark-bmenu-switch-other-window)
1597(define-key bookmark-bmenu-mode-map "s" 'bookmark-bmenu-save)
1598(define-key bookmark-bmenu-mode-map "k" 'bookmark-bmenu-delete)
1599(define-key bookmark-bmenu-mode-map "\C-d" 'bookmark-bmenu-delete-backwards)
1600(define-key bookmark-bmenu-mode-map "x" 'bookmark-bmenu-execute-deletions)
1601(define-key bookmark-bmenu-mode-map "d" 'bookmark-bmenu-delete)
1602(define-key bookmark-bmenu-mode-map " " 'next-line)
1603(define-key bookmark-bmenu-mode-map "n" 'next-line)
1604(define-key bookmark-bmenu-mode-map "p" 'previous-line)
1605(define-key bookmark-bmenu-mode-map "\177" 'bookmark-bmenu-backup-unmark)
1606(define-key bookmark-bmenu-mode-map "?" 'describe-mode)
1607(define-key bookmark-bmenu-mode-map "u" 'bookmark-bmenu-unmark)
1608(define-key bookmark-bmenu-mode-map "m" 'bookmark-bmenu-mark)
1609(define-key bookmark-bmenu-mode-map "l" 'bookmark-bmenu-load)
1610(define-key bookmark-bmenu-mode-map "r" 'bookmark-bmenu-rename)
1611(define-key bookmark-bmenu-mode-map "R" 'bookmark-bmenu-relocate)
1612(define-key bookmark-bmenu-mode-map "t" 'bookmark-bmenu-toggle-filenames)
1613(define-key bookmark-bmenu-mode-map "a" 'bookmark-bmenu-show-annotation)
1614(define-key bookmark-bmenu-mode-map "A" 'bookmark-bmenu-show-all-annotations)
1615(define-key bookmark-bmenu-mode-map "e" 'bookmark-bmenu-edit-annotation)
1616;; The original binding of M-g hides the M-g prefix map.
1617;; If someone has a better idea than M-g s, I'm open to suggestions.
1618(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)
1619 1623
1620(defun bookmark-bmenu-toggle-filenames (&optional show) 1624(defun bookmark-bmenu-toggle-filenames (&optional show)
1621 "Toggle whether filenames are shown in the bookmark list. 1625 "Toggle whether filenames are shown in the bookmark list.
diff --git a/lisp/emacs-lisp/re-builder.el b/lisp/emacs-lisp/re-builder.el
index e3c030b3c60..59a30d62b02 100644
--- a/lisp/emacs-lisp/re-builder.el
+++ b/lisp/emacs-lisp/re-builder.el
@@ -275,6 +275,13 @@ Except for Lisp syntax this is the same as `reb-regexp'.")
275 (set (make-local-variable 'blink-matching-paren) nil) 275 (set (make-local-variable 'blink-matching-paren) nil)
276 (reb-mode-common)) 276 (reb-mode-common))
277 277
278(defvar reb-lisp-mode-map
279 (let ((map (make-sparse-keymap)))
280 ;; Use the same "\C-c" keymap as `reb-mode' and use font-locking from
281 ;; `emacs-lisp-mode'
282 (define-key map "\C-c" (lookup-key reb-mode-map "\C-c"))
283 map))
284
278(define-derived-mode reb-lisp-mode 285(define-derived-mode reb-lisp-mode
279 emacs-lisp-mode "RE Builder Lisp" 286 emacs-lisp-mode "RE Builder Lisp"
280 "Major mode for interactively building symbolic Regular Expressions." 287 "Major mode for interactively building symbolic Regular Expressions."
@@ -283,11 +290,6 @@ Except for Lisp syntax this is the same as `reb-regexp'.")
283 (require 'rx))) ; require rx anyway 290 (require 'rx))) ; require rx anyway
284 (reb-mode-common)) 291 (reb-mode-common))
285 292
286;; Use the same "\C-c" keymap as `reb-mode' and use font-locking from
287;; `emacs-lisp-mode'
288(define-key reb-lisp-mode-map "\C-c"
289 (lookup-key reb-mode-map "\C-c"))
290
291(defvar reb-subexp-mode-map 293(defvar reb-subexp-mode-map
292 (let ((m (make-keymap))) 294 (let ((m (make-keymap)))
293 (suppress-keymap m) 295 (suppress-keymap m)
diff --git a/lisp/emulation/vip.el b/lisp/emulation/vip.el
index 328fbac9033..6f4f0ce80ec 100644
--- a/lisp/emulation/vip.el
+++ b/lisp/emulation/vip.el
@@ -164,132 +164,133 @@ If nil then it is bound to `delete-backward-char'."
164 164
165;; key bindings 165;; key bindings
166 166
167(defvar vip-mode-map (make-keymap)) 167(defvar vip-mode-map
168 168 (let ((map (make-keymap)))
169(define-key vip-mode-map "\C-a" 'beginning-of-line) 169 (define-key map "\C-a" 'beginning-of-line)
170(define-key vip-mode-map "\C-b" 'vip-scroll-back) 170 (define-key map "\C-b" 'vip-scroll-back)
171(define-key vip-mode-map "\C-c" 'vip-ctl-c) 171 (define-key map "\C-c" 'vip-ctl-c)
172(define-key vip-mode-map "\C-d" 'vip-scroll-up) 172 (define-key map "\C-d" 'vip-scroll-up)
173(define-key vip-mode-map "\C-e" 'vip-scroll-up-one) 173 (define-key map "\C-e" 'vip-scroll-up-one)
174(define-key vip-mode-map "\C-f" 'vip-scroll) 174 (define-key map "\C-f" 'vip-scroll)
175(define-key vip-mode-map "\C-g" 'vip-keyboard-quit) 175 (define-key map "\C-g" 'vip-keyboard-quit)
176(define-key vip-mode-map "\C-h" 'help-command) 176 (define-key map "\C-h" 'help-command)
177(define-key vip-mode-map "\C-m" 'vip-scroll-back) 177 (define-key map "\C-m" 'vip-scroll-back)
178(define-key vip-mode-map "\C-n" 'vip-other-window) 178 (define-key map "\C-n" 'vip-other-window)
179(define-key vip-mode-map "\C-o" 'vip-open-line-at-point) 179 (define-key map "\C-o" 'vip-open-line-at-point)
180(define-key vip-mode-map "\C-u" 'vip-scroll-down) 180 (define-key map "\C-u" 'vip-scroll-down)
181(define-key vip-mode-map "\C-x" 'vip-ctl-x) 181 (define-key map "\C-x" 'vip-ctl-x)
182(define-key vip-mode-map "\C-y" 'vip-scroll-down-one) 182 (define-key map "\C-y" 'vip-scroll-down-one)
183(define-key vip-mode-map "\C-z" 'vip-change-mode-to-emacs) 183 (define-key map "\C-z" 'vip-change-mode-to-emacs)
184(define-key vip-mode-map "\e" 'vip-ESC) 184 (define-key map "\e" 'vip-ESC)
185 185
186(define-key vip-mode-map " " 'vip-scroll) 186 (define-key map " " 'vip-scroll)
187(define-key vip-mode-map "!" 'vip-command-argument) 187 (define-key map "!" 'vip-command-argument)
188(define-key vip-mode-map "\"" 'vip-command-argument) 188 (define-key map "\"" 'vip-command-argument)
189(define-key vip-mode-map "#" 'vip-command-argument) 189 (define-key map "#" 'vip-command-argument)
190(define-key vip-mode-map "$" 'vip-goto-eol) 190 (define-key map "$" 'vip-goto-eol)
191(define-key vip-mode-map "%" 'vip-paren-match) 191 (define-key map "%" 'vip-paren-match)
192(define-key vip-mode-map "&" 'vip-nil) 192 (define-key map "&" 'vip-nil)
193(define-key vip-mode-map "'" 'vip-goto-mark-and-skip-white) 193 (define-key map "'" 'vip-goto-mark-and-skip-white)
194(define-key vip-mode-map "(" 'vip-backward-sentence) 194 (define-key map "(" 'vip-backward-sentence)
195(define-key vip-mode-map ")" 'vip-forward-sentence) 195 (define-key map ")" 'vip-forward-sentence)
196(define-key vip-mode-map "*" 'call-last-kbd-macro) 196 (define-key map "*" 'call-last-kbd-macro)
197(define-key vip-mode-map "+" 'vip-next-line-at-bol) 197 (define-key map "+" 'vip-next-line-at-bol)
198(define-key vip-mode-map "," 'vip-repeat-find-opposite) 198 (define-key map "," 'vip-repeat-find-opposite)
199(define-key vip-mode-map "-" 'vip-previous-line-at-bol) 199 (define-key map "-" 'vip-previous-line-at-bol)
200(define-key vip-mode-map "." 'vip-repeat) 200 (define-key map "." 'vip-repeat)
201(define-key vip-mode-map "/" 'vip-search-forward) 201 (define-key map "/" 'vip-search-forward)
202 202
203(define-key vip-mode-map "0" 'vip-beginning-of-line) 203 (define-key map "0" 'vip-beginning-of-line)
204(define-key vip-mode-map "1" 'vip-digit-argument) 204 (define-key map "1" 'vip-digit-argument)
205(define-key vip-mode-map "2" 'vip-digit-argument) 205 (define-key map "2" 'vip-digit-argument)
206(define-key vip-mode-map "3" 'vip-digit-argument) 206 (define-key map "3" 'vip-digit-argument)
207(define-key vip-mode-map "4" 'vip-digit-argument) 207 (define-key map "4" 'vip-digit-argument)
208(define-key vip-mode-map "5" 'vip-digit-argument) 208 (define-key map "5" 'vip-digit-argument)
209(define-key vip-mode-map "6" 'vip-digit-argument) 209 (define-key map "6" 'vip-digit-argument)
210(define-key vip-mode-map "7" 'vip-digit-argument) 210 (define-key map "7" 'vip-digit-argument)
211(define-key vip-mode-map "8" 'vip-digit-argument) 211 (define-key map "8" 'vip-digit-argument)
212(define-key vip-mode-map "9" 'vip-digit-argument) 212 (define-key map "9" 'vip-digit-argument)
213 213
214(define-key vip-mode-map ":" 'vip-ex) 214 (define-key map ":" 'vip-ex)
215(define-key vip-mode-map ";" 'vip-repeat-find) 215 (define-key map ";" 'vip-repeat-find)
216(define-key vip-mode-map "<" 'vip-command-argument) 216 (define-key map "<" 'vip-command-argument)
217(define-key vip-mode-map "=" 'vip-command-argument) 217 (define-key map "=" 'vip-command-argument)
218(define-key vip-mode-map ">" 'vip-command-argument) 218 (define-key map ">" 'vip-command-argument)
219(define-key vip-mode-map "?" 'vip-search-backward) 219 (define-key map "?" 'vip-search-backward)
220(define-key vip-mode-map "@" 'vip-nil) 220 (define-key map "@" 'vip-nil)
221 221
222(define-key vip-mode-map "A" 'vip-Append) 222 (define-key map "A" 'vip-Append)
223(define-key vip-mode-map "B" 'vip-backward-Word) 223 (define-key map "B" 'vip-backward-Word)
224(define-key vip-mode-map "C" 'vip-ctl-c-equivalent) 224 (define-key map "C" 'vip-ctl-c-equivalent)
225(define-key vip-mode-map "D" 'vip-kill-line) 225 (define-key map "D" 'vip-kill-line)
226(define-key vip-mode-map "E" 'vip-end-of-Word) 226 (define-key map "E" 'vip-end-of-Word)
227(define-key vip-mode-map "F" 'vip-find-char-backward) 227 (define-key map "F" 'vip-find-char-backward)
228(define-key vip-mode-map "G" 'vip-goto-line) 228 (define-key map "G" 'vip-goto-line)
229(define-key vip-mode-map "H" 'vip-window-top) 229 (define-key map "H" 'vip-window-top)
230(define-key vip-mode-map "I" 'vip-Insert) 230 (define-key map "I" 'vip-Insert)
231(define-key vip-mode-map "J" 'vip-join-lines) 231 (define-key map "J" 'vip-join-lines)
232(define-key vip-mode-map "K" 'vip-kill-buffer) 232 (define-key map "K" 'vip-kill-buffer)
233(define-key vip-mode-map "L" 'vip-window-bottom) 233 (define-key map "L" 'vip-window-bottom)
234(define-key vip-mode-map "M" 'vip-window-middle) 234 (define-key map "M" 'vip-window-middle)
235(define-key vip-mode-map "N" 'vip-search-Next) 235 (define-key map "N" 'vip-search-Next)
236(define-key vip-mode-map "O" 'vip-Open-line) 236 (define-key map "O" 'vip-Open-line)
237(define-key vip-mode-map "P" 'vip-Put-back) 237 (define-key map "P" 'vip-Put-back)
238(define-key vip-mode-map "Q" 'vip-query-replace) 238 (define-key map "Q" 'vip-query-replace)
239(define-key vip-mode-map "R" 'vip-replace-string) 239 (define-key map "R" 'vip-replace-string)
240(define-key vip-mode-map "S" 'vip-switch-to-buffer-other-window) 240 (define-key map "S" 'vip-switch-to-buffer-other-window)
241(define-key vip-mode-map "T" 'vip-goto-char-backward) 241 (define-key map "T" 'vip-goto-char-backward)
242(define-key vip-mode-map "U" 'vip-nil) 242 (define-key map "U" 'vip-nil)
243(define-key vip-mode-map "V" 'vip-find-file-other-window) 243 (define-key map "V" 'vip-find-file-other-window)
244(define-key vip-mode-map "W" 'vip-forward-Word) 244 (define-key map "W" 'vip-forward-Word)
245(define-key vip-mode-map "X" 'vip-ctl-x-equivalent) 245 (define-key map "X" 'vip-ctl-x-equivalent)
246(define-key vip-mode-map "Y" 'vip-yank-line) 246 (define-key map "Y" 'vip-yank-line)
247(define-key vip-mode-map "ZZ" 'save-buffers-kill-emacs) 247 (define-key map "ZZ" 'save-buffers-kill-emacs)
248 248
249(define-key vip-mode-map "[" 'vip-nil) 249 (define-key map "[" 'vip-nil)
250(define-key vip-mode-map "\\" 'vip-escape-to-emacs) 250 (define-key map "\\" 'vip-escape-to-emacs)
251(define-key vip-mode-map "]" 'vip-nil) 251 (define-key map "]" 'vip-nil)
252(define-key vip-mode-map "^" 'vip-bol-and-skip-white) 252 (define-key map "^" 'vip-bol-and-skip-white)
253(define-key vip-mode-map "_" 'vip-nil) 253 (define-key map "_" 'vip-nil)
254(define-key vip-mode-map "`" 'vip-goto-mark) 254 (define-key map "`" 'vip-goto-mark)
255 255
256(define-key vip-mode-map "a" 'vip-append) 256 (define-key map "a" 'vip-append)
257(define-key vip-mode-map "b" 'vip-backward-word) 257 (define-key map "b" 'vip-backward-word)
258(define-key vip-mode-map "c" 'vip-command-argument) 258 (define-key map "c" 'vip-command-argument)
259(define-key vip-mode-map "d" 'vip-command-argument) 259 (define-key map "d" 'vip-command-argument)
260(define-key vip-mode-map "e" 'vip-end-of-word) 260 (define-key map "e" 'vip-end-of-word)
261(define-key vip-mode-map "f" 'vip-find-char-forward) 261 (define-key map "f" 'vip-find-char-forward)
262(define-key vip-mode-map "g" 'vip-info-on-file) 262 (define-key map "g" 'vip-info-on-file)
263(define-key vip-mode-map "h" 'vip-backward-char) 263 (define-key map "h" 'vip-backward-char)
264(define-key vip-mode-map "i" 'vip-insert) 264 (define-key map "i" 'vip-insert)
265(define-key vip-mode-map "j" 'vip-next-line) 265 (define-key map "j" 'vip-next-line)
266(define-key vip-mode-map "k" 'vip-previous-line) 266 (define-key map "k" 'vip-previous-line)
267(define-key vip-mode-map "l" 'vip-forward-char) 267 (define-key map "l" 'vip-forward-char)
268(define-key vip-mode-map "m" 'vip-mark-point) 268 (define-key map "m" 'vip-mark-point)
269(define-key vip-mode-map "n" 'vip-search-next) 269 (define-key map "n" 'vip-search-next)
270(define-key vip-mode-map "o" 'vip-open-line) 270 (define-key map "o" 'vip-open-line)
271(define-key vip-mode-map "p" 'vip-put-back) 271 (define-key map "p" 'vip-put-back)
272(define-key vip-mode-map "q" 'vip-nil) 272 (define-key map "q" 'vip-nil)
273(define-key vip-mode-map "r" 'vip-replace-char) 273 (define-key map "r" 'vip-replace-char)
274(define-key vip-mode-map "s" 'vip-switch-to-buffer) 274 (define-key map "s" 'vip-switch-to-buffer)
275(define-key vip-mode-map "t" 'vip-goto-char-forward) 275 (define-key map "t" 'vip-goto-char-forward)
276(define-key vip-mode-map "u" 'vip-undo) 276 (define-key map "u" 'vip-undo)
277(define-key vip-mode-map "v" 'vip-find-file) 277 (define-key map "v" 'vip-find-file)
278(define-key vip-mode-map "w" 'vip-forward-word) 278 (define-key map "w" 'vip-forward-word)
279(define-key vip-mode-map "x" 'vip-delete-char) 279 (define-key map "x" 'vip-delete-char)
280(define-key vip-mode-map "y" 'vip-command-argument) 280 (define-key map "y" 'vip-command-argument)
281(define-key vip-mode-map "zH" 'vip-line-to-top) 281 (define-key map "zH" 'vip-line-to-top)
282(define-key vip-mode-map "zM" 'vip-line-to-middle) 282 (define-key map "zM" 'vip-line-to-middle)
283(define-key vip-mode-map "zL" 'vip-line-to-bottom) 283 (define-key map "zL" 'vip-line-to-bottom)
284(define-key vip-mode-map "z\C-m" 'vip-line-to-top) 284 (define-key map "z\C-m" 'vip-line-to-top)
285(define-key vip-mode-map "z." 'vip-line-to-middle) 285 (define-key map "z." 'vip-line-to-middle)
286(define-key vip-mode-map "z-" 'vip-line-to-bottom) 286 (define-key map "z-" 'vip-line-to-bottom)
287 287
288(define-key vip-mode-map "{" 'vip-backward-paragraph) 288 (define-key map "{" 'vip-backward-paragraph)
289(define-key vip-mode-map "|" 'vip-goto-col) 289 (define-key map "|" 'vip-goto-col)
290(define-key vip-mode-map "}" 'vip-forward-paragraph) 290 (define-key map "}" 'vip-forward-paragraph)
291(define-key vip-mode-map "~" 'vip-nil) 291 (define-key map "~" 'vip-nil)
292(define-key vip-mode-map "\177" 'vip-delete-backward-char) 292 (define-key map "\177" 'vip-delete-backward-char)
293 map))
293 294
294(defun vip-version () 295(defun vip-version ()
295 (interactive) 296 (interactive)
diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog
index b7cf79cc3cb..2996fee9bcb 100644
--- a/lisp/erc/ChangeLog
+++ b/lisp/erc/ChangeLog
@@ -1,3 +1,8 @@
12011-02-10 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * erc-list.el (erc-list-menu-mode-map): Move initialization
4 into declaration.
5
12011-02-07 Julien Danjou <julien@danjou.info> 62011-02-07 Julien Danjou <julien@danjou.info>
2 7
3 * erc-track.el (erc-window-configuration-change): New function. 8 * erc-track.el (erc-window-configuration-change): New function.
diff --git a/lisp/erc/erc-list.el b/lisp/erc/erc-list.el
index ae579dba3bd..b8eb5a4aa19 100644
--- a/lisp/erc/erc-list.el
+++ b/lisp/erc/erc-list.el
@@ -117,6 +117,17 @@
117 (sort-fields col (point-min) (point-max)) 117 (sort-fields col (point-min) (point-max))
118 (sort-numeric-fields col (point-min) (point-max)))))) 118 (sort-numeric-fields col (point-min) (point-max))))))
119 119
120(defvar erc-list-menu-mode-map
121 (let ((map (make-keymap)))
122 (set-keymap-parent map special-mode-map)
123 (define-key map "k" 'erc-list-kill)
124 (define-key map "j" 'erc-list-join)
125 (define-key map "g" 'erc-list-revert)
126 (define-key map "n" 'next-line)
127 (define-key map "p" 'previous-line)
128 map)
129 "Local keymap for `erc-list-mode' buffers.")
130
120(defvar erc-list-menu-sort-button-map 131(defvar erc-list-menu-sort-button-map
121 (let ((map (make-sparse-keymap))) 132 (let ((map (make-sparse-keymap)))
122 (define-key map [header-line mouse-1] 'erc-list-menu-sort-by-column) 133 (define-key map [header-line mouse-1] 'erc-list-menu-sort-by-column)
@@ -146,12 +157,6 @@
146 157
147(put 'erc-list-menu-mode 'mode-class 'special) 158(put 'erc-list-menu-mode 'mode-class 'special)
148 159
149(define-key erc-list-menu-mode-map "k" 'erc-list-kill)
150(define-key erc-list-menu-mode-map "j" 'erc-list-join)
151(define-key erc-list-menu-mode-map "g" 'erc-list-revert)
152(define-key erc-list-menu-mode-map "n" 'next-line)
153(define-key erc-list-menu-mode-map "p" 'previous-line)
154
155;; Handle a "322" response. This response tells us about a single 160;; Handle a "322" response. This response tells us about a single
156;; channel. 161;; channel.
157(defun erc-list-handle-322 (proc parsed) 162(defun erc-list-handle-322 (proc parsed)
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index 826145d7af0..724b0186679 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -33,18 +33,19 @@
33(require 'view) 33(require 'view)
34(eval-when-compile (require 'easymenu)) 34(eval-when-compile (require 'easymenu))
35 35
36(defvar help-mode-map (make-sparse-keymap) 36(defvar help-mode-map
37 (let ((map (make-sparse-keymap)))
38 (set-keymap-parent map button-buffer-map)
39
40 (define-key map [mouse-2] 'help-follow-mouse)
41 (define-key map "\C-c\C-b" 'help-go-back)
42 (define-key map "\C-c\C-f" 'help-go-forward)
43 (define-key map "\C-c\C-c" 'help-follow-symbol)
44 ;; Documentation only, since we use minor-mode-overriding-map-alist.
45 (define-key map "\r" 'help-follow)
46 map)
37 "Keymap for help mode.") 47 "Keymap for help mode.")
38 48
39(set-keymap-parent help-mode-map button-buffer-map)
40
41(define-key help-mode-map [mouse-2] 'help-follow-mouse)
42(define-key help-mode-map "\C-c\C-b" 'help-go-back)
43(define-key help-mode-map "\C-c\C-f" 'help-go-forward)
44(define-key help-mode-map "\C-c\C-c" 'help-follow-symbol)
45;; Documentation only, since we use minor-mode-overriding-map-alist.
46(define-key help-mode-map "\r" 'help-follow)
47
48(easy-menu-define help-mode-menu help-mode-map 49(easy-menu-define help-mode-menu help-mode-map
49 "Menu for Help Mode." 50 "Menu for Help Mode."
50 '("Help-Mode" 51 '("Help-Mode"
diff --git a/lisp/hi-lock.el b/lisp/hi-lock.el
index d97e6cf4b08..a0b5844582b 100644
--- a/lisp/hi-lock.el
+++ b/lisp/hi-lock.el
@@ -238,45 +238,47 @@ a library is being loaded.")
238(make-variable-buffer-local 'hi-lock-file-patterns) 238(make-variable-buffer-local 'hi-lock-file-patterns)
239(put 'hi-lock-file-patterns 'permanent-local t) 239(put 'hi-lock-file-patterns 'permanent-local t)
240 240
241(defvar hi-lock-menu (make-sparse-keymap "Hi Lock") 241(defvar hi-lock-menu
242 (let ((map (make-sparse-keymap "Hi Lock")))
243 (define-key-after map [highlight-regexp]
244 '(menu-item "Highlight Regexp..." highlight-regexp
245 :help "Highlight text matching PATTERN (a regexp)."))
246
247 (define-key-after map [highlight-phrase]
248 '(menu-item "Highlight Phrase..." highlight-phrase
249 :help "Highlight text matching PATTERN (a regexp processed to match phrases)."))
250
251 (define-key-after map [highlight-lines-matching-regexp]
252 '(menu-item "Highlight Lines..." highlight-lines-matching-regexp
253 :help "Highlight lines containing match of PATTERN (a regexp)."))
254
255 (define-key-after map [unhighlight-regexp]
256 '(menu-item "Remove Highlighting..." unhighlight-regexp
257 :help "Remove previously entered highlighting pattern."
258 :enable hi-lock-interactive-patterns))
259
260 (define-key-after map [hi-lock-write-interactive-patterns]
261 '(menu-item "Patterns to Buffer" hi-lock-write-interactive-patterns
262 :help "Insert interactively added REGEXPs into buffer at point."
263 :enable hi-lock-interactive-patterns))
264
265 (define-key-after map [hi-lock-find-patterns]
266 '(menu-item "Patterns from Buffer" hi-lock-find-patterns
267 :help "Use patterns (if any) near top of buffer."))
268 map)
242 "Menu for hi-lock mode.") 269 "Menu for hi-lock mode.")
243 270
244(define-key-after hi-lock-menu [highlight-regexp] 271(defvar hi-lock-map
245 '(menu-item "Highlight Regexp..." highlight-regexp 272 (let ((map (make-sparse-keymap "Hi Lock")))
246 :help "Highlight text matching PATTERN (a regexp).")) 273 (define-key map "\C-xwi" 'hi-lock-find-patterns)
247 274 (define-key map "\C-xwl" 'highlight-lines-matching-regexp)
248(define-key-after hi-lock-menu [highlight-phrase] 275 (define-key map "\C-xwp" 'highlight-phrase)
249 '(menu-item "Highlight Phrase..." highlight-phrase 276 (define-key map "\C-xwh" 'highlight-regexp)
250 :help "Highlight text matching PATTERN (a regexp processed to match phrases).")) 277 (define-key map "\C-xwr" 'unhighlight-regexp)
251 278 (define-key map "\C-xwb" 'hi-lock-write-interactive-patterns)
252(define-key-after hi-lock-menu [highlight-lines-matching-regexp] 279 map)
253 '(menu-item "Highlight Lines..." highlight-lines-matching-regexp
254 :help "Highlight lines containing match of PATTERN (a regexp)."))
255
256(define-key-after hi-lock-menu [unhighlight-regexp]
257 '(menu-item "Remove Highlighting..." unhighlight-regexp
258 :help "Remove previously entered highlighting pattern."
259 :enable hi-lock-interactive-patterns))
260
261(define-key-after hi-lock-menu [hi-lock-write-interactive-patterns]
262 '(menu-item "Patterns to Buffer" hi-lock-write-interactive-patterns
263 :help "Insert interactively added REGEXPs into buffer at point."
264 :enable hi-lock-interactive-patterns))
265
266(define-key-after hi-lock-menu [hi-lock-find-patterns]
267 '(menu-item "Patterns from Buffer" hi-lock-find-patterns
268 :help "Use patterns (if any) near top of buffer."))
269
270(defvar hi-lock-map (make-sparse-keymap "Hi Lock")
271 "Key map for hi-lock.") 280 "Key map for hi-lock.")
272 281
273(define-key hi-lock-map "\C-xwi" 'hi-lock-find-patterns)
274(define-key hi-lock-map "\C-xwl" 'highlight-lines-matching-regexp)
275(define-key hi-lock-map "\C-xwp" 'highlight-phrase)
276(define-key hi-lock-map "\C-xwh" 'highlight-regexp)
277(define-key hi-lock-map "\C-xwr" 'unhighlight-regexp)
278(define-key hi-lock-map "\C-xwb" 'hi-lock-write-interactive-patterns)
279
280;; Visible Functions 282;; Visible Functions
281 283
282;;;###autoload 284;;;###autoload
diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el
index 04048e0e572..f7ac24fa2e3 100644
--- a/lisp/ibuffer.el
+++ b/lisp/ibuffer.el
@@ -384,14 +384,66 @@ directory, like `default-directory'."
384 (regexp :tag "To"))) 384 (regexp :tag "To")))
385 :group 'ibuffer) 385 :group 'ibuffer)
386 386
387(defvar ibuffer-mode-groups-popup
388 (let ((groups-map (make-sparse-keymap "Filter Groups")))
389 ;; Filter groups
390
391 (define-key-after groups-map [filters-to-filter-group]
392 '(menu-item "Create filter group from current filters..."
393 ibuffer-filters-to-filter-group
394 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
395 (define-key-after groups-map [forward-filter-group]
396 '(menu-item "Move point to the next filter group"
397 ibuffer-forward-filter-group))
398 (define-key-after groups-map [backward-filter-group]
399 '(menu-item "Move point to the previous filter group"
400 ibuffer-backward-filter-group))
401 (define-key-after groups-map [jump-to-filter-group]
402 '(menu-item "Move point to a specific filter group..."
403 ibuffer-jump-to-filter-group))
404 (define-key-after groups-map [kill-filter-group]
405 '(menu-item "Kill filter group named..."
406 ibuffer-kill-filter-group
407 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
408 (define-key-after groups-map [yank-filter-group]
409 '(menu-item "Yank last killed filter group before..."
410 ibuffer-yank-filter-group
411 :enable (and (featurep 'ibuf-ext) ibuffer-filter-group-kill-ring)))
412 (define-key-after groups-map [pop-filter-group]
413 '(menu-item "Remove top filter group"
414 ibuffer-pop-filter-group
415 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
416 (define-key-after groups-map [clear-filter-groups]
417 '(menu-item "Remove all filter groups"
418 ibuffer-clear-filter-groups
419 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
420 (define-key-after groups-map [pop-filter-group]
421 '(menu-item "Decompose filter group..."
422 ibuffer-pop-filter-group
423 :help "\"Unmake\" a filter group"
424 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
425 (define-key-after groups-map [save-filter-groups]
426 '(menu-item "Save current filter groups permanently..."
427 ibuffer-save-filter-groups
428 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)
429 :help "Use a mnemnonic name to store current filter groups"))
430 (define-key-after groups-map [switch-to-saved-filter-groups]
431 '(menu-item "Restore permanently saved filters..."
432 ibuffer-switch-to-saved-filter-groups
433 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filter-groups)
434 :help "Replace current filters with a saved stack"))
435 (define-key-after groups-map [delete-saved-filter-groups]
436 '(menu-item "Delete permanently saved filter groups..."
437 ibuffer-delete-saved-filter-groups
438 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filter-groups)))
439 (define-key-after groups-map [set-filter-groups-by-mode]
440 '(menu-item "Set current filter groups to filter by mode"
441 ibuffer-set-filter-groups-by-mode))
442
443 groups-map))
387 444
388(defvar ibuffer-mode-map nil) 445(defvar ibuffer-mode-map
389(defvar ibuffer-mode-operate-map nil) 446 (let ((map (make-keymap)))
390(defvar ibuffer-mode-groups-popup nil)
391(unless ibuffer-mode-map
392 (let ((map (make-sparse-keymap))
393 (operate-map (make-sparse-keymap "Operate"))
394 (groups-map (make-sparse-keymap "Filter Groups")))
395 (define-key map (kbd "0") 'digit-argument) 447 (define-key map (kbd "0") 'digit-argument)
396 (define-key map (kbd "1") 'digit-argument) 448 (define-key map (kbd "1") 'digit-argument)
397 (define-key map (kbd "2") 'digit-argument) 449 (define-key map (kbd "2") 'digit-argument)
@@ -545,10 +597,10 @@ directory, like `default-directory'."
545 '(menu-item "View (other frame)" ibuffer-visit-buffer-other-frame)) 597 '(menu-item "View (other frame)" ibuffer-visit-buffer-other-frame))
546 (define-key-after map [menu-bar view ibuffer-update] 598 (define-key-after map [menu-bar view ibuffer-update]
547 '(menu-item "Update" ibuffer-update 599 '(menu-item "Update" ibuffer-update
548 :help "Regenerate the list of buffers")) 600 :help "Regenerate the list of buffers"))
549 (define-key-after map [menu-bar view switch-format] 601 (define-key-after map [menu-bar view switch-format]
550 '(menu-item "Switch display format" ibuffer-switch-format 602 '(menu-item "Switch display format" ibuffer-switch-format
551 :help "Toggle between available values of `ibuffer-formats'")) 603 :help "Toggle between available values of `ibuffer-formats'"))
552 604
553 (define-key-after map [menu-bar view dashes] 605 (define-key-after map [menu-bar view dashes]
554 '("--")) 606 '("--"))
@@ -562,28 +614,29 @@ directory, like `default-directory'."
562 '(menu-item "Sort by buffer size" ibuffer-do-sort-by-size)) 614 '(menu-item "Sort by buffer size" ibuffer-do-sort-by-size))
563 (define-key-after map [menu-bar view sort do-sort-by-alphabetic] 615 (define-key-after map [menu-bar view sort do-sort-by-alphabetic]
564 '(menu-item "Sort lexicographically" ibuffer-do-sort-by-alphabetic 616 '(menu-item "Sort lexicographically" ibuffer-do-sort-by-alphabetic
565 :help "Sort by the alphabetic order of buffer name")) 617 :help "Sort by the alphabetic order of buffer name"))
566 (define-key-after map [menu-bar view sort do-sort-by-recency] 618 (define-key-after map [menu-bar view sort do-sort-by-recency]
567 '(menu-item "Sort by view time" ibuffer-do-sort-by-recency 619 '(menu-item "Sort by view time" ibuffer-do-sort-by-recency
568 :help "Sort by the last time the buffer was displayed")) 620 :help "Sort by the last time the buffer was displayed"))
569 (define-key-after map [menu-bar view sort dashes] 621 (define-key-after map [menu-bar view sort dashes]
570 '("--")) 622 '("--"))
571 (define-key-after map [menu-bar view sort invert-sorting] 623 (define-key-after map [menu-bar view sort invert-sorting]
572 '(menu-item "Reverse sorting order" ibuffer-invert-sorting)) 624 '(menu-item "Reverse sorting order" ibuffer-invert-sorting))
573 (define-key-after map [menu-bar view sort toggle-sorting-mode] 625 (define-key-after map [menu-bar view sort toggle-sorting-mode]
574 '(menu-item "Switch sorting mode" ibuffer-toggle-sorting-mode 626 '(menu-item "Switch sorting mode" ibuffer-toggle-sorting-mode
575 :help "Switch between the various sorting criteria")) 627 :help "Switch between the various sorting criteria"))
576 628
577 (define-key-after map [menu-bar view filter] 629 (define-key-after map [menu-bar view filter]
578 (cons "Filter" (make-sparse-keymap "Filter"))) 630 (cons "Filter" (make-sparse-keymap "Filter")))
579 631
580 (define-key-after map [menu-bar view filter filter-disable] 632 (define-key-after map [menu-bar view filter filter-disable]
581 '(menu-item "Disable all filtering" ibuffer-filter-disable 633 '(menu-item "Disable all filtering" ibuffer-filter-disable
582 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers))) 634 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
583 (define-key-after map [menu-bar view filter filter-by-mode] 635 (define-key-after map [menu-bar view filter filter-by-mode]
584 '(menu-item "Add filter by major mode..." ibuffer-filter-by-mode)) 636 '(menu-item "Add filter by major mode..." ibuffer-filter-by-mode))
585 (define-key-after map [menu-bar view filter filter-by-mode] 637 (define-key-after map [menu-bar view filter filter-by-mode]
586 '(menu-item "Add filter by major mode in use..." ibuffer-filter-by-used-mode)) 638 '(menu-item "Add filter by major mode in use..."
639 ibuffer-filter-by-used-mode))
587 (define-key-after map [menu-bar view filter filter-by-name] 640 (define-key-after map [menu-bar view filter filter-by-name]
588 '(menu-item "Add filter by buffer name..." ibuffer-filter-by-name)) 641 '(menu-item "Add filter by buffer name..." ibuffer-filter-by-name))
589 (define-key-after map [menu-bar view filter filter-by-filename] 642 (define-key-after map [menu-bar view filter filter-by-filename]
@@ -591,158 +644,112 @@ directory, like `default-directory'."
591 (define-key-after map [menu-bar view filter filter-by-size-lt] 644 (define-key-after map [menu-bar view filter filter-by-size-lt]
592 '(menu-item "Add filter by size less than..." ibuffer-filter-by-size-lt)) 645 '(menu-item "Add filter by size less than..." ibuffer-filter-by-size-lt))
593 (define-key-after map [menu-bar view filter filter-by-size-gt] 646 (define-key-after map [menu-bar view filter filter-by-size-gt]
594 '(menu-item "Add filter by size greater than..." ibuffer-filter-by-size-gt)) 647 '(menu-item "Add filter by size greater than..."
648 ibuffer-filter-by-size-gt))
595 (define-key-after map [menu-bar view filter filter-by-content] 649 (define-key-after map [menu-bar view filter filter-by-content]
596 '(menu-item "Add filter by content (regexp)..." ibuffer-filter-by-content)) 650 '(menu-item "Add filter by content (regexp)..."
651 ibuffer-filter-by-content))
597 (define-key-after map [menu-bar view filter filter-by-predicate] 652 (define-key-after map [menu-bar view filter filter-by-predicate]
598 '(menu-item "Add filter by Lisp predicate..." ibuffer-filter-by-predicate)) 653 '(menu-item "Add filter by Lisp predicate..."
654 ibuffer-filter-by-predicate))
599 (define-key-after map [menu-bar view filter pop-filter] 655 (define-key-after map [menu-bar view filter pop-filter]
600 '(menu-item "Remove top filter" ibuffer-pop-filter 656 '(menu-item "Remove top filter" ibuffer-pop-filter
601 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers))) 657 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
602 (define-key-after map [menu-bar view filter or-filter] 658 (define-key-after map [menu-bar view filter or-filter]
603 '(menu-item "OR top two filters" ibuffer-or-filter 659 '(menu-item "OR top two filters" ibuffer-or-filter
604 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers 660 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers
605 (cdr ibuffer-filtering-qualifiers)) 661 (cdr ibuffer-filtering-qualifiers))
606 :help "Create a new filter which is the logical OR of the top two filters")) 662 :help
663 "Create a new filter which is the logical OR of the top two filters"))
607 (define-key-after map [menu-bar view filter negate-filter] 664 (define-key-after map [menu-bar view filter negate-filter]
608 '(menu-item "Negate top filter" ibuffer-negate-filter 665 '(menu-item "Negate top filter" ibuffer-negate-filter
609 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers))) 666 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
610 (define-key-after map [menu-bar view filter decompose-filter] 667 (define-key-after map [menu-bar view filter decompose-filter]
611 '(menu-item "Decompose top filter" ibuffer-decompose-filter 668 '(menu-item "Decompose top filter" ibuffer-decompose-filter
612 :enable (and (featurep 'ibuf-ext) (memq (car ibuffer-filtering-qualifiers) '(or saved not))) 669 :enable (and (featurep 'ibuf-ext)
613 :help "Break down a complex filter like OR or NOT")) 670 (memq (car ibuffer-filtering-qualifiers) '(or saved not)))
671 :help "Break down a complex filter like OR or NOT"))
614 (define-key-after map [menu-bar view filter exchange-filters] 672 (define-key-after map [menu-bar view filter exchange-filters]
615 '(menu-item "Swap top two filters" ibuffer-exchange-filters 673 '(menu-item "Swap top two filters" ibuffer-exchange-filters
616 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers 674 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers
617 (cdr ibuffer-filtering-qualifiers)))) 675 (cdr ibuffer-filtering-qualifiers))))
618 (define-key-after map [menu-bar view filter save-filters] 676 (define-key-after map [menu-bar view filter save-filters]
619 '(menu-item "Save current filters permanently..." ibuffer-save-filters 677 '(menu-item "Save current filters permanently..." ibuffer-save-filters
620 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers) 678 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)
621 :help "Use a mnemnonic name to store current filter stack")) 679 :help "Use a mnemnonic name to store current filter stack"))
622 (define-key-after map [menu-bar view filter switch-to-saved-filters] 680 (define-key-after map [menu-bar view filter switch-to-saved-filters]
623 '(menu-item "Restore permanently saved filters..." ibuffer-switch-to-saved-filters 681 '(menu-item "Restore permanently saved filters..."
624 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filters) 682 ibuffer-switch-to-saved-filters
625 :help "Replace current filters with a saved stack")) 683 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filters)
684 :help "Replace current filters with a saved stack"))
626 (define-key-after map [menu-bar view filter add-saved-filters] 685 (define-key-after map [menu-bar view filter add-saved-filters]
627 '(menu-item "Add to permanently saved filters..." ibuffer-add-saved-filters 686 '(menu-item "Add to permanently saved filters..."
628 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers) 687 ibuffer-add-saved-filters
629 :help "Include already saved stack with current filters")) 688 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)
689 :help "Include already saved stack with current filters"))
630 (define-key-after map [menu-bar view filter delete-saved-filters] 690 (define-key-after map [menu-bar view filter delete-saved-filters]
631 '(menu-item "Delete permanently saved filters..." 691 '(menu-item "Delete permanently saved filters..."
632 ibuffer-delete-saved-filters 692 ibuffer-delete-saved-filters
633 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filters))) 693 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filters)))
634
635 ;; Filter groups
636
637 (define-key-after groups-map [filters-to-filter-group]
638 '(menu-item "Create filter group from current filters..."
639 ibuffer-filters-to-filter-group
640 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
641 (define-key-after groups-map [forward-filter-group]
642 '(menu-item "Move point to the next filter group"
643 ibuffer-forward-filter-group))
644 (define-key-after groups-map [backward-filter-group]
645 '(menu-item "Move point to the previous filter group"
646 ibuffer-backward-filter-group))
647 (define-key-after groups-map [jump-to-filter-group]
648 '(menu-item "Move point to a specific filter group..."
649 ibuffer-jump-to-filter-group))
650 (define-key-after groups-map [kill-filter-group]
651 '(menu-item "Kill filter group named..."
652 ibuffer-kill-filter-group
653 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
654 (define-key-after groups-map [yank-filter-group]
655 '(menu-item "Yank last killed filter group before..."
656 ibuffer-yank-filter-group
657 :enable (and (featurep 'ibuf-ext) ibuffer-filter-group-kill-ring)))
658 (define-key-after groups-map [pop-filter-group]
659 '(menu-item "Remove top filter group"
660 ibuffer-pop-filter-group
661 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
662 (define-key-after groups-map [clear-filter-groups]
663 '(menu-item "Remove all filter groups"
664 ibuffer-clear-filter-groups
665 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
666 (define-key-after groups-map [pop-filter-group]
667 '(menu-item "Decompose filter group..."
668 ibuffer-pop-filter-group
669 :help "\"Unmake\" a filter group"
670 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
671 (define-key-after groups-map [save-filter-groups]
672 '(menu-item "Save current filter groups permanently..."
673 ibuffer-save-filter-groups
674 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)
675 :help "Use a mnemnonic name to store current filter groups"))
676 (define-key-after groups-map [switch-to-saved-filter-groups]
677 '(menu-item "Restore permanently saved filters..."
678 ibuffer-switch-to-saved-filter-groups
679 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filter-groups)
680 :help "Replace current filters with a saved stack"))
681 (define-key-after groups-map [delete-saved-filter-groups]
682 '(menu-item "Delete permanently saved filter groups..."
683 ibuffer-delete-saved-filter-groups
684 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filter-groups)))
685 (define-key-after groups-map [set-filter-groups-by-mode]
686 '(menu-item "Set current filter groups to filter by mode"
687 ibuffer-set-filter-groups-by-mode))
688 694
689 (define-key-after map [menu-bar view filter-groups] 695 (define-key-after map [menu-bar view filter-groups]
690 (cons "Filter Groups" groups-map)) 696 (cons "Filter Groups" ibuffer-mode-groups-popup))
691 697
692 (define-key-after map [menu-bar view dashes2] 698 (define-key-after map [menu-bar view dashes2]
693 '("--")) 699 '("--"))
694 (define-key-after map [menu-bar view diff-with-file] 700 (define-key-after map [menu-bar view diff-with-file]
695 '(menu-item "Diff with file" ibuffer-diff-with-file 701 '(menu-item "Diff with file" ibuffer-diff-with-file
696 :help "View the differences between this buffer and its file")) 702 :help "View the differences between this buffer and its file"))
697 (define-key-after map [menu-bar view auto-mode] 703 (define-key-after map [menu-bar view auto-mode]
698 '(menu-item "Toggle Auto Mode" ibuffer-auto-mode 704 '(menu-item "Toggle Auto Mode" ibuffer-auto-mode
699 :help "Attempt to automatically update the Ibuffer buffer")) 705 :help "Attempt to automatically update the Ibuffer buffer"))
700 (define-key-after map [menu-bar view customize] 706 (define-key-after map [menu-bar view customize]
701 '(menu-item "Customize Ibuffer" ibuffer-customize 707 '(menu-item "Customize Ibuffer" ibuffer-customize
702 :help "Use Custom to customize Ibuffer")) 708 :help "Use Custom to customize Ibuffer"))
703 709
704 (define-key-after map [menu-bar mark] 710 (define-key-after map [menu-bar mark]
705 (cons "Mark" (make-sparse-keymap "Mark"))) 711 (cons "Mark" (make-sparse-keymap "Mark")))
706 712
707 (define-key-after map [menu-bar mark toggle-marks] 713 (define-key-after map [menu-bar mark toggle-marks]
708 '(menu-item "Toggle marks" ibuffer-toggle-marks 714 '(menu-item "Toggle marks" ibuffer-toggle-marks
709 :help "Unmark marked buffers, and mark unmarked buffers")) 715 :help "Unmark marked buffers, and mark unmarked buffers"))
710 (define-key-after map [menu-bar mark mark-forward] 716 (define-key-after map [menu-bar mark mark-forward]
711 '(menu-item "Mark" ibuffer-mark-forward 717 '(menu-item "Mark" ibuffer-mark-forward
712 :help "Mark the buffer at point")) 718 :help "Mark the buffer at point"))
713 (define-key-after map [menu-bar mark unmark-forward] 719 (define-key-after map [menu-bar mark unmark-forward]
714 '(menu-item "Unmark" ibuffer-unmark-forward 720 '(menu-item "Unmark" ibuffer-unmark-forward
715 :help "Unmark the buffer at point")) 721 :help "Unmark the buffer at point"))
716 (define-key-after map [menu-bar mark mark-by-mode] 722 (define-key-after map [menu-bar mark mark-by-mode]
717 '(menu-item "Mark by mode..." ibuffer-mark-by-mode 723 '(menu-item "Mark by mode..." ibuffer-mark-by-mode
718 :help "Mark all buffers in a particular major mode")) 724 :help "Mark all buffers in a particular major mode"))
719 (define-key-after map [menu-bar mark mark-modified-buffers] 725 (define-key-after map [menu-bar mark mark-modified-buffers]
720 '(menu-item "Mark modified buffers" ibuffer-mark-modified-buffers 726 '(menu-item "Mark modified buffers" ibuffer-mark-modified-buffers
721 :help "Mark all buffers which have been modified")) 727 :help "Mark all buffers which have been modified"))
722 (define-key-after map [menu-bar mark mark-unsaved-buffers] 728 (define-key-after map [menu-bar mark mark-unsaved-buffers]
723 '(menu-item "Mark unsaved buffers" ibuffer-mark-unsaved-buffers 729 '(menu-item "Mark unsaved buffers" ibuffer-mark-unsaved-buffers
724 :help "Mark all buffers which have a file and are modified")) 730 :help "Mark all buffers which have a file and are modified"))
725 (define-key-after map [menu-bar mark mark-read-only-buffers] 731 (define-key-after map [menu-bar mark mark-read-only-buffers]
726 '(menu-item "Mark read-only buffers" ibuffer-mark-read-only-buffers 732 '(menu-item "Mark read-only buffers" ibuffer-mark-read-only-buffers
727 :help "Mark all buffers which are read-only")) 733 :help "Mark all buffers which are read-only"))
728 (define-key-after map [menu-bar mark mark-special-buffers] 734 (define-key-after map [menu-bar mark mark-special-buffers]
729 '(menu-item "Mark special buffers" ibuffer-mark-special-buffers 735 '(menu-item "Mark special buffers" ibuffer-mark-special-buffers
730 :help "Mark all buffers whose name begins with a *")) 736 :help "Mark all buffers whose name begins with a *"))
731 (define-key-after map [menu-bar mark mark-dired-buffers] 737 (define-key-after map [menu-bar mark mark-dired-buffers]
732 '(menu-item "Mark dired buffers" ibuffer-mark-dired-buffers 738 '(menu-item "Mark dired buffers" ibuffer-mark-dired-buffers
733 :help "Mark buffers in dired-mode")) 739 :help "Mark buffers in dired-mode"))
734 (define-key-after map [menu-bar mark mark-dissociated-buffers] 740 (define-key-after map [menu-bar mark mark-dissociated-buffers]
735 '(menu-item "Mark dissociated buffers" ibuffer-mark-dissociated-buffers 741 '(menu-item "Mark dissociated buffers" ibuffer-mark-dissociated-buffers
736 :help "Mark buffers with a non-existent associated file")) 742 :help "Mark buffers with a non-existent associated file"))
737 (define-key-after map [menu-bar mark mark-help-buffers] 743 (define-key-after map [menu-bar mark mark-help-buffers]
738 '(menu-item "Mark help buffers" ibuffer-mark-help-buffers 744 '(menu-item "Mark help buffers" ibuffer-mark-help-buffers
739 :help "Mark buffers in help-mode")) 745 :help "Mark buffers in help-mode"))
740 (define-key-after map [menu-bar mark mark-compressed-file-buffers] 746 (define-key-after map [menu-bar mark mark-compressed-file-buffers]
741 '(menu-item "Mark compressed file buffers" ibuffer-mark-compressed-file-buffers 747 '(menu-item "Mark compressed file buffers"
742 :help "Mark buffers which have a file that is compressed")) 748 ibuffer-mark-compressed-file-buffers
749 :help "Mark buffers which have a file that is compressed"))
743 (define-key-after map [menu-bar mark mark-old-buffers] 750 (define-key-after map [menu-bar mark mark-old-buffers]
744 '(menu-item "Mark old buffers" ibuffer-mark-old-buffers 751 '(menu-item "Mark old buffers" ibuffer-mark-old-buffers
745 :help "Mark buffers which have not been viewed recently")) 752 :help "Mark buffers which have not been viewed recently"))
746 (define-key-after map [menu-bar mark unmark-all] 753 (define-key-after map [menu-bar mark unmark-all]
747 '(menu-item "Unmark All" ibuffer-unmark-all)) 754 '(menu-item "Unmark All" ibuffer-unmark-all))
748 755
@@ -751,16 +758,19 @@ directory, like `default-directory'."
751 758
752 (define-key-after map [menu-bar mark mark-by-name-regexp] 759 (define-key-after map [menu-bar mark mark-by-name-regexp]
753 '(menu-item "Mark by buffer name (regexp)..." ibuffer-mark-by-name-regexp 760 '(menu-item "Mark by buffer name (regexp)..." ibuffer-mark-by-name-regexp
754 :help "Mark buffers whose name matches a regexp")) 761 :help "Mark buffers whose name matches a regexp"))
755 (define-key-after map [menu-bar mark mark-by-mode-regexp] 762 (define-key-after map [menu-bar mark mark-by-mode-regexp]
756 '(menu-item "Mark by major mode (regexp)..." ibuffer-mark-by-mode-regexp 763 '(menu-item "Mark by major mode (regexp)..." ibuffer-mark-by-mode-regexp
757 :help "Mark buffers whose major mode name matches a regexp")) 764 :help "Mark buffers whose major mode name matches a regexp"))
758 (define-key-after map [menu-bar mark mark-by-file-name-regexp] 765 (define-key-after map [menu-bar mark mark-by-file-name-regexp]
759 '(menu-item "Mark by file name (regexp)..." ibuffer-mark-by-file-name-regexp 766 '(menu-item "Mark by file name (regexp)..."
760 :help "Mark buffers whose file name matches a regexp")) 767 ibuffer-mark-by-file-name-regexp
768 :help "Mark buffers whose file name matches a regexp"))
761 769
762 ;; Operate map is added later 770 map))
763 771
772(defvar ibuffer-mode-operate-map
773 (let ((operate-map (make-sparse-keymap "Operate")))
764 (define-key-after operate-map [do-view] 774 (define-key-after operate-map [do-view]
765 '(menu-item "View" ibuffer-do-view)) 775 '(menu-item "View" ibuffer-do-view))
766 (define-key-after operate-map [do-view-other-frame] 776 (define-key-after operate-map [do-view-other-frame]
@@ -769,47 +779,45 @@ directory, like `default-directory'."
769 '(menu-item "Save" ibuffer-do-save)) 779 '(menu-item "Save" ibuffer-do-save))
770 (define-key-after operate-map [do-replace-regexp] 780 (define-key-after operate-map [do-replace-regexp]
771 '(menu-item "Replace (regexp)..." ibuffer-do-replace-regexp 781 '(menu-item "Replace (regexp)..." ibuffer-do-replace-regexp
772 :help "Replace text inside marked buffers")) 782 :help "Replace text inside marked buffers"))
773 (define-key-after operate-map [do-query-replace] 783 (define-key-after operate-map [do-query-replace]
774 '(menu-item "Query Replace..." ibuffer-do-query-replace 784 '(menu-item "Query Replace..." ibuffer-do-query-replace
775 :help "Replace text in marked buffers, asking each time")) 785 :help "Replace text in marked buffers, asking each time"))
776 (define-key-after operate-map [do-query-replace-regexp] 786 (define-key-after operate-map [do-query-replace-regexp]
777 '(menu-item "Query Replace (regexp)..." ibuffer-do-query-replace-regexp 787 '(menu-item "Query Replace (regexp)..." ibuffer-do-query-replace-regexp
778 :help "Replace text in marked buffers by regexp, asking each time")) 788 :help "Replace text in marked buffers by regexp, asking each time"))
779 (define-key-after operate-map [do-print] 789 (define-key-after operate-map [do-print]
780 '(menu-item "Print" ibuffer-do-print)) 790 '(menu-item "Print" ibuffer-do-print))
781 (define-key-after operate-map [do-toggle-modified] 791 (define-key-after operate-map [do-toggle-modified]
782 '(menu-item "Toggle modification flag" ibuffer-do-toggle-modified)) 792 '(menu-item "Toggle modification flag" ibuffer-do-toggle-modified))
783 (define-key-after operate-map [do-revert] 793 (define-key-after operate-map [do-revert]
784 '(menu-item "Revert" ibuffer-do-revert 794 '(menu-item "Revert" ibuffer-do-revert
785 :help "Revert marked buffers to their associated file")) 795 :help "Revert marked buffers to their associated file"))
786 (define-key-after operate-map [do-rename-uniquely] 796 (define-key-after operate-map [do-rename-uniquely]
787 '(menu-item "Rename Uniquely" ibuffer-do-rename-uniquely 797 '(menu-item "Rename Uniquely" ibuffer-do-rename-uniquely
788 :help "Rename marked buffers to a new, unique name")) 798 :help "Rename marked buffers to a new, unique name"))
789 (define-key-after operate-map [do-delete] 799 (define-key-after operate-map [do-delete]
790 '(menu-item "Kill" ibuffer-do-delete)) 800 '(menu-item "Kill" ibuffer-do-delete))
791 (define-key-after operate-map [do-occur] 801 (define-key-after operate-map [do-occur]
792 '(menu-item "List lines matching..." ibuffer-do-occur 802 '(menu-item "List lines matching..." ibuffer-do-occur
793 :help "View all lines in marked buffers matching a regexp")) 803 :help "View all lines in marked buffers matching a regexp"))
794 (define-key-after operate-map [do-shell-command-pipe] 804 (define-key-after operate-map [do-shell-command-pipe]
795 '(menu-item "Pipe to shell command..." ibuffer-do-shell-command-pipe 805 '(menu-item "Pipe to shell command..." ibuffer-do-shell-command-pipe
796 :help "For each marked buffer, send its contents to a shell command")) 806 :help "For each marked buffer, send its contents to a shell command"))
797 (define-key-after operate-map [do-shell-command-pipe-replace] 807 (define-key-after operate-map [do-shell-command-pipe-replace]
798 '(menu-item "Pipe to shell command (replace)..." ibuffer-do-shell-command-pipe-replace 808 '(menu-item "Pipe to shell command (replace)..." ibuffer-do-shell-command-pipe-replace
799 :help "For each marked buffer, replace its contents with output of shell command")) 809 :help "For each marked buffer, replace its contents with output of shell command"))
800 (define-key-after operate-map [do-shell-command-file] 810 (define-key-after operate-map [do-shell-command-file]
801 '(menu-item "Shell command on buffer's file..." ibuffer-do-shell-command-file 811 '(menu-item "Shell command on buffer's file..." ibuffer-do-shell-command-file
802 :help "For each marked buffer, run a shell command with its file as argument")) 812 :help "For each marked buffer, run a shell command with its file as argument"))
803 (define-key-after operate-map [do-eval] 813 (define-key-after operate-map [do-eval]
804 '(menu-item "Eval..." ibuffer-do-eval 814 '(menu-item "Eval..." ibuffer-do-eval
805 :help "Evaluate a Lisp form in each marked buffer")) 815 :help "Evaluate a Lisp form in each marked buffer"))
806 (define-key-after operate-map [do-view-and-eval] 816 (define-key-after operate-map [do-view-and-eval]
807 '(menu-item "Eval (viewing buffer)..." ibuffer-do-view-and-eval 817 '(menu-item "Eval (viewing buffer)..." ibuffer-do-view-and-eval
808 :help "Evaluate a Lisp form in each marked buffer while viewing it")) 818 :help "Evaluate a Lisp form in each marked buffer while viewing it"))
809 819
810 (setq ibuffer-mode-map map 820 operate-map))
811 ibuffer-mode-operate-map operate-map
812 ibuffer-mode-groups-popup (copy-keymap groups-map))))
813 821
814(define-key ibuffer-mode-groups-popup [kill-filter-group] 822(define-key ibuffer-mode-groups-popup [kill-filter-group]
815 '(menu-item "Kill filter group" 823 '(menu-item "Kill filter group"
@@ -1559,9 +1567,8 @@ If point is on a group name, this function operates on that group."
1559 from-end-p)) 1567 from-end-p))
1560 (setq strlen (length str)) 1568 (setq strlen (length str))
1561 (setq str 1569 (setq str
1562 ,(ibuffer-compile-make-eliding-form 'str 1570 ,(ibuffer-compile-make-eliding-form
1563 elide 1571 'str elide from-end-p)))))
1564 from-end-p)))))
1565 ;; Now, put these forms together with the rest of the code. 1572 ;; Now, put these forms together with the rest of the code.
1566 (let ((callform 1573 (let ((callform
1567 ;; Is this an "inline" column? This means we have 1574 ;; Is this an "inline" column? This means we have
@@ -1575,16 +1582,18 @@ If point is on a group name, this function operates on that group."
1575 ;; You're not expected to understand this. Hell, I 1582 ;; You're not expected to understand this. Hell, I
1576 ;; don't even understand it, and I wrote it five 1583 ;; don't even understand it, and I wrote it five
1577 ;; minutes ago. 1584 ;; minutes ago.
1578 (insertgenfn (ibuffer-aif (get sym 'ibuffer-column-summarizer) 1585 (insertgenfn
1579 ;; I really, really wish Emacs Lisp had closures. 1586 (ibuffer-aif (get sym 'ibuffer-column-summarizer)
1580 (lambda (arg sym) 1587 ;; I really, really wish Emacs Lisp had closures.
1581 `(insert 1588 (lambda (arg sym)
1582 (let ((ret ,arg)) 1589 `(insert
1583 (put ',sym 'ibuffer-column-summary 1590 (let ((ret ,arg))
1584 (cons ret (get ',sym 'ibuffer-column-summary))) 1591 (put ',sym 'ibuffer-column-summary
1585 ret))) 1592 (cons ret (get ',sym
1586 (lambda (arg sym) 1593 'ibuffer-column-summary)))
1587 `(insert ,arg)))) 1594 ret)))
1595 (lambda (arg sym)
1596 `(insert ,arg))))
1588 (mincompform `(< strlen ,(if (integerp min) 1597 (mincompform `(< strlen ,(if (integerp min)
1589 min 1598 min
1590 'min))) 1599 'min)))
@@ -1617,7 +1626,8 @@ If point is on a group name, this function operates on that group."
1617 `(strlen (length str)))) 1626 `(strlen (length str))))
1618 outforms) 1627 outforms)
1619 (setq outforms 1628 (setq outforms
1620 (append outforms (list (funcall insertgenfn 'str sym))))) 1629 (append outforms
1630 (list (funcall insertgenfn 'str sym)))))
1621 ;; The simple case; just insert the string. 1631 ;; The simple case; just insert the string.
1622 (push (funcall insertgenfn callform sym) outforms)) 1632 (push (funcall insertgenfn callform sym) outforms))
1623 ;; Finally, return a `let' form which binds the 1633 ;; Finally, return a `let' form which binds the
diff --git a/lisp/kmacro.el b/lisp/kmacro.el
index 689120c0f8f..6f4bed3ec5b 100644
--- a/lisp/kmacro.el
+++ b/lisp/kmacro.el
@@ -916,34 +916,35 @@ without repeating the prefix."
916(defvar kmacro-step-edit-help) ;; kmacro step edit help enabled 916(defvar kmacro-step-edit-help) ;; kmacro step edit help enabled
917(defvar kmacro-step-edit-num-input-keys) ;; to ignore duplicate pre-command hook 917(defvar kmacro-step-edit-num-input-keys) ;; to ignore duplicate pre-command hook
918 918
919(defvar kmacro-step-edit-map (make-sparse-keymap) 919(defvar kmacro-step-edit-map
920 (let ((map (make-sparse-keymap)))
921 ;; query-replace-map answers include: `act', `skip', `act-and-show',
922 ;; `exit', `act-and-exit', `edit', `delete-and-edit', `recenter',
923 ;; `automatic', `backup', `exit-prefix', and `help'.")
924 ;; Also: `quit', `edit-replacement'
925
926 (set-keymap-parent map query-replace-map)
927
928 (define-key map "\t" 'act-repeat)
929 (define-key map [tab] 'act-repeat)
930 (define-key map "\C-k" 'skip-rest)
931 (define-key map "c" 'automatic)
932 (define-key map "f" 'skip-keep)
933 (define-key map "q" 'quit)
934 (define-key map "d" 'skip)
935 (define-key map "\C-d" 'skip)
936 (define-key map "i" 'insert)
937 (define-key map "I" 'insert-1)
938 (define-key map "r" 'replace)
939 (define-key map "R" 'replace-1)
940 (define-key map "a" 'append)
941 (define-key map "A" 'append-end)
942 map)
920 "Keymap that defines the responses to questions in `kmacro-step-edit-macro'. 943 "Keymap that defines the responses to questions in `kmacro-step-edit-macro'.
921This keymap is an extension to the `query-replace-map', allowing the 944This keymap is an extension to the `query-replace-map', allowing the
922following additional answers: `insert', `insert-1', `replace', `replace-1', 945following additional answers: `insert', `insert-1', `replace', `replace-1',
923`append', `append-end', `act-repeat', `skip-end', `skip-keep'.") 946`append', `append-end', `act-repeat', `skip-end', `skip-keep'.")
924 947
925;; query-replace-map answers include: `act', `skip', `act-and-show',
926;; `exit', `act-and-exit', `edit', `delete-and-edit', `recenter',
927;; `automatic', `backup', `exit-prefix', and `help'.")
928;; Also: `quit', `edit-replacement'
929
930(set-keymap-parent kmacro-step-edit-map query-replace-map)
931
932(define-key kmacro-step-edit-map "\t" 'act-repeat)
933(define-key kmacro-step-edit-map [tab] 'act-repeat)
934(define-key kmacro-step-edit-map "\C-k" 'skip-rest)
935(define-key kmacro-step-edit-map "c" 'automatic)
936(define-key kmacro-step-edit-map "f" 'skip-keep)
937(define-key kmacro-step-edit-map "q" 'quit)
938(define-key kmacro-step-edit-map "d" 'skip)
939(define-key kmacro-step-edit-map "\C-d" 'skip)
940(define-key kmacro-step-edit-map "i" 'insert)
941(define-key kmacro-step-edit-map "I" 'insert-1)
942(define-key kmacro-step-edit-map "r" 'replace)
943(define-key kmacro-step-edit-map "R" 'replace-1)
944(define-key kmacro-step-edit-map "a" 'append)
945(define-key kmacro-step-edit-map "A" 'append-end)
946
947(defvar kmacro-step-edit-prefix-commands 948(defvar kmacro-step-edit-prefix-commands
948 '(universal-argument universal-argument-more universal-argument-minus 949 '(universal-argument universal-argument-more universal-argument-minus
949 digit-argument negative-argument) 950 digit-argument negative-argument)
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 7e1cbe4ea8d..7e44ae22e1e 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -4418,7 +4418,7 @@ If prefix argument REVERSE is non-nil, sorts in reverse order.
4418 4418
4419;;;### (autoloads (rmail-summary-by-senders rmail-summary-by-topic 4419;;;### (autoloads (rmail-summary-by-senders rmail-summary-by-topic
4420;;;;;; rmail-summary-by-regexp rmail-summary-by-recipients rmail-summary-by-labels 4420;;;;;; rmail-summary-by-regexp rmail-summary-by-recipients rmail-summary-by-labels
4421;;;;;; rmail-summary) "rmailsum" "rmailsum.el" "76a7ae570a4fa96a9233d0276f52f515") 4421;;;;;; rmail-summary) "rmailsum" "rmailsum.el" "adad96c9eb13cae4bae0769f731d8784")
4422;;; Generated autoloads from rmailsum.el 4422;;; Generated autoloads from rmailsum.el
4423 4423
4424(autoload 'rmail-summary "rmailsum" "\ 4424(autoload 'rmail-summary "rmailsum" "\
diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el
index e0f40afc0d1..1d5e062fe27 100644
--- a/lisp/mail/rmailsum.el
+++ b/lisp/mail/rmailsum.el
@@ -64,7 +64,196 @@ Setting this option to nil might speed up the generation of summaries."
64 "Overlay used to highlight the current message in the Rmail summary.") 64 "Overlay used to highlight the current message in the Rmail summary.")
65(put 'rmail-summary-overlay 'permanent-local t) 65(put 'rmail-summary-overlay 'permanent-local t)
66 66
67(defvar rmail-summary-mode-map nil 67(defvar rmail-summary-mode-map
68 (let ((map (make-keymap)))
69 (suppress-keymap map)
70 (define-key map [mouse-2] 'rmail-summary-mouse-goto-message)
71 (define-key map "a" 'rmail-summary-add-label)
72 (define-key map "b" 'rmail-summary-bury)
73 (define-key map "c" 'rmail-summary-continue)
74 (define-key map "d" 'rmail-summary-delete-forward)
75 (define-key map "\C-d" 'rmail-summary-delete-backward)
76 (define-key map "e" 'rmail-summary-edit-current-message)
77 (define-key map "f" 'rmail-summary-forward)
78 (define-key map "g" 'rmail-summary-get-new-mail)
79 (define-key map "h" 'rmail-summary)
80 (define-key map "i" 'rmail-summary-input)
81 (define-key map "j" 'rmail-summary-goto-msg)
82 (define-key map "\C-m" 'rmail-summary-goto-msg)
83 (define-key map "k" 'rmail-summary-kill-label)
84 (define-key map "l" 'rmail-summary-by-labels)
85 (define-key map "\e\C-h" 'rmail-summary)
86 (define-key map "\e\C-l" 'rmail-summary-by-labels)
87 (define-key map "\e\C-r" 'rmail-summary-by-recipients)
88 (define-key map "\e\C-s" 'rmail-summary-by-regexp)
89 ;; `f' for "from".
90 (define-key map "\e\C-f" 'rmail-summary-by-senders)
91 (define-key map "\e\C-t" 'rmail-summary-by-topic)
92 (define-key map "m" 'rmail-summary-mail)
93 (define-key map "\M-m" 'rmail-summary-retry-failure)
94 (define-key map "n" 'rmail-summary-next-msg)
95 (define-key map "\en" 'rmail-summary-next-all)
96 (define-key map "\e\C-n" 'rmail-summary-next-labeled-message)
97 (define-key map "o" 'rmail-summary-output)
98 (define-key map "\C-o" 'rmail-summary-output-as-seen)
99 (define-key map "p" 'rmail-summary-previous-msg)
100 (define-key map "\ep" 'rmail-summary-previous-all)
101 (define-key map "\e\C-p" 'rmail-summary-previous-labeled-message)
102 (define-key map "q" 'rmail-summary-quit)
103 (define-key map "Q" 'rmail-summary-wipe)
104 (define-key map "r" 'rmail-summary-reply)
105 (define-key map "s" 'rmail-summary-expunge-and-save)
106 ;; See rms's comment in rmail.el
107 ;; (define-key map "\er" 'rmail-summary-search-backward)
108 (define-key map "\es" 'rmail-summary-search)
109 (define-key map "t" 'rmail-summary-toggle-header)
110 (define-key map "u" 'rmail-summary-undelete)
111 (define-key map "\M-u" 'rmail-summary-undelete-many)
112 (define-key map "x" 'rmail-summary-expunge)
113 (define-key map "w" 'rmail-summary-output-body)
114 (define-key map "v" 'rmail-mime)
115 (define-key map "." 'rmail-summary-beginning-of-message)
116 (define-key map "/" 'rmail-summary-end-of-message)
117 (define-key map "<" 'rmail-summary-first-message)
118 (define-key map ">" 'rmail-summary-last-message)
119 (define-key map " " 'rmail-summary-scroll-msg-up)
120 (define-key map "\177" 'rmail-summary-scroll-msg-down)
121 (define-key map "?" 'describe-mode)
122 (define-key map "\C-c\C-n" 'rmail-summary-next-same-subject)
123 (define-key map "\C-c\C-p" 'rmail-summary-previous-same-subject)
124 (define-key map "\C-c\C-s\C-d" 'rmail-summary-sort-by-date)
125 (define-key map "\C-c\C-s\C-s" 'rmail-summary-sort-by-subject)
126 (define-key map "\C-c\C-s\C-a" 'rmail-summary-sort-by-author)
127 (define-key map "\C-c\C-s\C-r" 'rmail-summary-sort-by-recipient)
128 (define-key map "\C-c\C-s\C-c" 'rmail-summary-sort-by-correspondent)
129 (define-key map "\C-c\C-s\C-l" 'rmail-summary-sort-by-lines)
130 (define-key map "\C-c\C-s\C-k" 'rmail-summary-sort-by-labels)
131 (define-key map "\C-x\C-s" 'rmail-summary-save-buffer)
132
133 ;; Menu bar bindings.
134
135 (define-key map [menu-bar] (make-sparse-keymap))
136
137 (define-key map [menu-bar classify]
138 (cons "Classify" (make-sparse-keymap "Classify")))
139
140 (define-key map [menu-bar classify output-menu]
141 '("Output (Rmail Menu)..." . rmail-summary-output-menu))
142
143 (define-key map [menu-bar classify input-menu]
144 '("Input Rmail File (menu)..." . rmail-input-menu))
145
146 (define-key map [menu-bar classify input-menu]
147 '(nil))
148
149 (define-key map [menu-bar classify output-menu]
150 '(nil))
151
152 (define-key map [menu-bar classify output-body]
153 '("Output body..." . rmail-summary-output-body))
154
155 (define-key map [menu-bar classify output-inbox]
156 '("Output..." . rmail-summary-output))
157
158 (define-key map [menu-bar classify output]
159 '("Output as seen..." . rmail-summary-output-as-seen))
160
161 (define-key map [menu-bar classify kill-label]
162 '("Kill Label..." . rmail-summary-kill-label))
163
164 (define-key map [menu-bar classify add-label]
165 '("Add Label..." . rmail-summary-add-label))
166
167 (define-key map [menu-bar summary]
168 (cons "Summary" (make-sparse-keymap "Summary")))
169
170 (define-key map [menu-bar summary senders]
171 '("By Senders..." . rmail-summary-by-senders))
172
173 (define-key map [menu-bar summary labels]
174 '("By Labels..." . rmail-summary-by-labels))
175
176 (define-key map [menu-bar summary recipients]
177 '("By Recipients..." . rmail-summary-by-recipients))
178
179 (define-key map [menu-bar summary topic]
180 '("By Topic..." . rmail-summary-by-topic))
181
182 (define-key map [menu-bar summary regexp]
183 '("By Regexp..." . rmail-summary-by-regexp))
184
185 (define-key map [menu-bar summary all]
186 '("All" . rmail-summary))
187
188 (define-key map [menu-bar mail]
189 (cons "Mail" (make-sparse-keymap "Mail")))
190
191 (define-key map [menu-bar mail rmail-summary-get-new-mail]
192 '("Get New Mail" . rmail-summary-get-new-mail))
193
194 (define-key map [menu-bar mail lambda]
195 '("----"))
196
197 (define-key map [menu-bar mail continue]
198 '("Continue" . rmail-summary-continue))
199
200 (define-key map [menu-bar mail resend]
201 '("Re-send..." . rmail-summary-resend))
202
203 (define-key map [menu-bar mail forward]
204 '("Forward" . rmail-summary-forward))
205
206 (define-key map [menu-bar mail retry]
207 '("Retry" . rmail-summary-retry-failure))
208
209 (define-key map [menu-bar mail reply]
210 '("Reply" . rmail-summary-reply))
211
212 (define-key map [menu-bar mail mail]
213 '("Mail" . rmail-summary-mail))
214
215 (define-key map [menu-bar delete]
216 (cons "Delete" (make-sparse-keymap "Delete")))
217
218 (define-key map [menu-bar delete expunge/save]
219 '("Expunge/Save" . rmail-summary-expunge-and-save))
220
221 (define-key map [menu-bar delete expunge]
222 '("Expunge" . rmail-summary-expunge))
223
224 (define-key map [menu-bar delete undelete]
225 '("Undelete" . rmail-summary-undelete))
226
227 (define-key map [menu-bar delete delete]
228 '("Delete" . rmail-summary-delete-forward))
229
230 (define-key map [menu-bar move]
231 (cons "Move" (make-sparse-keymap "Move")))
232
233 (define-key map [menu-bar move search-back]
234 '("Search Back..." . rmail-summary-search-backward))
235
236 (define-key map [menu-bar move search]
237 '("Search..." . rmail-summary-search))
238
239 (define-key map [menu-bar move previous]
240 '("Previous Nondeleted" . rmail-summary-previous-msg))
241
242 (define-key map [menu-bar move next]
243 '("Next Nondeleted" . rmail-summary-next-msg))
244
245 (define-key map [menu-bar move last]
246 '("Last" . rmail-summary-last-message))
247
248 (define-key map [menu-bar move first]
249 '("First" . rmail-summary-first-message))
250
251 (define-key map [menu-bar move previous]
252 '("Previous" . rmail-summary-previous-all))
253
254 (define-key map [menu-bar move next]
255 '("Next" . rmail-summary-next-all))
256 map)
68 "Keymap used in Rmail summary mode.") 257 "Keymap used in Rmail summary mode.")
69 258
70;; Entry points for making a summary buffer. 259;; Entry points for making a summary buffer.
@@ -990,207 +1179,6 @@ Search, the `unseen' attribute is restored.")
990 (save-excursion 1179 (save-excursion
991 (switch-to-buffer rmail-buffer) 1180 (switch-to-buffer rmail-buffer)
992 (save-buffer)))) 1181 (save-buffer))))
993
994
995(if rmail-summary-mode-map
996 nil
997 (setq rmail-summary-mode-map (make-keymap))
998 (suppress-keymap rmail-summary-mode-map)
999
1000 (define-key rmail-summary-mode-map [mouse-2] 'rmail-summary-mouse-goto-message)
1001 (define-key rmail-summary-mode-map "a" 'rmail-summary-add-label)
1002 (define-key rmail-summary-mode-map "b" 'rmail-summary-bury)
1003 (define-key rmail-summary-mode-map "c" 'rmail-summary-continue)
1004 (define-key rmail-summary-mode-map "d" 'rmail-summary-delete-forward)
1005 (define-key rmail-summary-mode-map "\C-d" 'rmail-summary-delete-backward)
1006 (define-key rmail-summary-mode-map "e" 'rmail-summary-edit-current-message)
1007 (define-key rmail-summary-mode-map "f" 'rmail-summary-forward)
1008 (define-key rmail-summary-mode-map "g" 'rmail-summary-get-new-mail)
1009 (define-key rmail-summary-mode-map "h" 'rmail-summary)
1010 (define-key rmail-summary-mode-map "i" 'rmail-summary-input)
1011 (define-key rmail-summary-mode-map "j" 'rmail-summary-goto-msg)
1012 (define-key rmail-summary-mode-map "\C-m" 'rmail-summary-goto-msg)
1013 (define-key rmail-summary-mode-map "k" 'rmail-summary-kill-label)
1014 (define-key rmail-summary-mode-map "l" 'rmail-summary-by-labels)
1015 (define-key rmail-summary-mode-map "\e\C-h" 'rmail-summary)
1016 (define-key rmail-summary-mode-map "\e\C-l" 'rmail-summary-by-labels)
1017 (define-key rmail-summary-mode-map "\e\C-r" 'rmail-summary-by-recipients)
1018 (define-key rmail-summary-mode-map "\e\C-s" 'rmail-summary-by-regexp)
1019 ;; `f' for "from".
1020 (define-key rmail-summary-mode-map "\e\C-f" 'rmail-summary-by-senders)
1021 (define-key rmail-summary-mode-map "\e\C-t" 'rmail-summary-by-topic)
1022 (define-key rmail-summary-mode-map "m" 'rmail-summary-mail)
1023 (define-key rmail-summary-mode-map "\M-m" 'rmail-summary-retry-failure)
1024 (define-key rmail-summary-mode-map "n" 'rmail-summary-next-msg)
1025 (define-key rmail-summary-mode-map "\en" 'rmail-summary-next-all)
1026 (define-key rmail-summary-mode-map "\e\C-n" 'rmail-summary-next-labeled-message)
1027 (define-key rmail-summary-mode-map "o" 'rmail-summary-output)
1028 (define-key rmail-summary-mode-map "\C-o" 'rmail-summary-output-as-seen)
1029 (define-key rmail-summary-mode-map "p" 'rmail-summary-previous-msg)
1030 (define-key rmail-summary-mode-map "\ep" 'rmail-summary-previous-all)
1031 (define-key rmail-summary-mode-map "\e\C-p" 'rmail-summary-previous-labeled-message)
1032 (define-key rmail-summary-mode-map "q" 'rmail-summary-quit)
1033 (define-key rmail-summary-mode-map "Q" 'rmail-summary-wipe)
1034 (define-key rmail-summary-mode-map "r" 'rmail-summary-reply)
1035 (define-key rmail-summary-mode-map "s" 'rmail-summary-expunge-and-save)
1036 ;; See rms's comment in rmail.el
1037;;; (define-key rmail-summary-mode-map "\er" 'rmail-summary-search-backward)
1038 (define-key rmail-summary-mode-map "\es" 'rmail-summary-search)
1039 (define-key rmail-summary-mode-map "t" 'rmail-summary-toggle-header)
1040 (define-key rmail-summary-mode-map "u" 'rmail-summary-undelete)
1041 (define-key rmail-summary-mode-map "\M-u" 'rmail-summary-undelete-many)
1042 (define-key rmail-summary-mode-map "x" 'rmail-summary-expunge)
1043 (define-key rmail-summary-mode-map "w" 'rmail-summary-output-body)
1044 (define-key rmail-summary-mode-map "v" 'rmail-mime)
1045 (define-key rmail-summary-mode-map "." 'rmail-summary-beginning-of-message)
1046 (define-key rmail-summary-mode-map "/" 'rmail-summary-end-of-message)
1047 (define-key rmail-summary-mode-map "<" 'rmail-summary-first-message)
1048 (define-key rmail-summary-mode-map ">" 'rmail-summary-last-message)
1049 (define-key rmail-summary-mode-map " " 'rmail-summary-scroll-msg-up)
1050 (define-key rmail-summary-mode-map "\177" 'rmail-summary-scroll-msg-down)
1051 (define-key rmail-summary-mode-map "?" 'describe-mode)
1052 (define-key rmail-summary-mode-map "\C-c\C-n" 'rmail-summary-next-same-subject)
1053 (define-key rmail-summary-mode-map "\C-c\C-p" 'rmail-summary-previous-same-subject)
1054 (define-key rmail-summary-mode-map "\C-c\C-s\C-d"
1055 'rmail-summary-sort-by-date)
1056 (define-key rmail-summary-mode-map "\C-c\C-s\C-s"
1057 'rmail-summary-sort-by-subject)
1058 (define-key rmail-summary-mode-map "\C-c\C-s\C-a"
1059 'rmail-summary-sort-by-author)
1060 (define-key rmail-summary-mode-map "\C-c\C-s\C-r"
1061 'rmail-summary-sort-by-recipient)
1062 (define-key rmail-summary-mode-map "\C-c\C-s\C-c"
1063 'rmail-summary-sort-by-correspondent)
1064 (define-key rmail-summary-mode-map "\C-c\C-s\C-l"
1065 'rmail-summary-sort-by-lines)
1066 (define-key rmail-summary-mode-map "\C-c\C-s\C-k"
1067 'rmail-summary-sort-by-labels)
1068 (define-key rmail-summary-mode-map "\C-x\C-s" 'rmail-summary-save-buffer)
1069 )
1070
1071;;; Menu bar bindings.
1072
1073(define-key rmail-summary-mode-map [menu-bar] (make-sparse-keymap))
1074
1075(define-key rmail-summary-mode-map [menu-bar classify]
1076 (cons "Classify" (make-sparse-keymap "Classify")))
1077
1078(define-key rmail-summary-mode-map [menu-bar classify output-menu]
1079 '("Output (Rmail Menu)..." . rmail-summary-output-menu))
1080
1081(define-key rmail-summary-mode-map [menu-bar classify input-menu]
1082 '("Input Rmail File (menu)..." . rmail-input-menu))
1083
1084(define-key rmail-summary-mode-map [menu-bar classify input-menu]
1085 '(nil))
1086
1087(define-key rmail-summary-mode-map [menu-bar classify output-menu]
1088 '(nil))
1089
1090(define-key rmail-summary-mode-map [menu-bar classify output-body]
1091 '("Output body..." . rmail-summary-output-body))
1092
1093(define-key rmail-summary-mode-map [menu-bar classify output-inbox]
1094 '("Output..." . rmail-summary-output))
1095
1096(define-key rmail-summary-mode-map [menu-bar classify output]
1097 '("Output as seen..." . rmail-summary-output-as-seen))
1098
1099(define-key rmail-summary-mode-map [menu-bar classify kill-label]
1100 '("Kill Label..." . rmail-summary-kill-label))
1101
1102(define-key rmail-summary-mode-map [menu-bar classify add-label]
1103 '("Add Label..." . rmail-summary-add-label))
1104
1105(define-key rmail-summary-mode-map [menu-bar summary]
1106 (cons "Summary" (make-sparse-keymap "Summary")))
1107
1108(define-key rmail-summary-mode-map [menu-bar summary senders]
1109 '("By Senders..." . rmail-summary-by-senders))
1110
1111(define-key rmail-summary-mode-map [menu-bar summary labels]
1112 '("By Labels..." . rmail-summary-by-labels))
1113
1114(define-key rmail-summary-mode-map [menu-bar summary recipients]
1115 '("By Recipients..." . rmail-summary-by-recipients))
1116
1117(define-key rmail-summary-mode-map [menu-bar summary topic]
1118 '("By Topic..." . rmail-summary-by-topic))
1119
1120(define-key rmail-summary-mode-map [menu-bar summary regexp]
1121 '("By Regexp..." . rmail-summary-by-regexp))
1122
1123(define-key rmail-summary-mode-map [menu-bar summary all]
1124 '("All" . rmail-summary))
1125
1126(define-key rmail-summary-mode-map [menu-bar mail]
1127 (cons "Mail" (make-sparse-keymap "Mail")))
1128
1129(define-key rmail-summary-mode-map [menu-bar mail rmail-summary-get-new-mail]
1130 '("Get New Mail" . rmail-summary-get-new-mail))
1131
1132(define-key rmail-summary-mode-map [menu-bar mail lambda]
1133 '("----"))
1134
1135(define-key rmail-summary-mode-map [menu-bar mail continue]
1136 '("Continue" . rmail-summary-continue))
1137
1138(define-key rmail-summary-mode-map [menu-bar mail resend]
1139 '("Re-send..." . rmail-summary-resend))
1140
1141(define-key rmail-summary-mode-map [menu-bar mail forward]
1142 '("Forward" . rmail-summary-forward))
1143
1144(define-key rmail-summary-mode-map [menu-bar mail retry]
1145 '("Retry" . rmail-summary-retry-failure))
1146
1147(define-key rmail-summary-mode-map [menu-bar mail reply]
1148 '("Reply" . rmail-summary-reply))
1149
1150(define-key rmail-summary-mode-map [menu-bar mail mail]
1151 '("Mail" . rmail-summary-mail))
1152
1153(define-key rmail-summary-mode-map [menu-bar delete]
1154 (cons "Delete" (make-sparse-keymap "Delete")))
1155
1156(define-key rmail-summary-mode-map [menu-bar delete expunge/save]
1157 '("Expunge/Save" . rmail-summary-expunge-and-save))
1158
1159(define-key rmail-summary-mode-map [menu-bar delete expunge]
1160 '("Expunge" . rmail-summary-expunge))
1161
1162(define-key rmail-summary-mode-map [menu-bar delete undelete]
1163 '("Undelete" . rmail-summary-undelete))
1164
1165(define-key rmail-summary-mode-map [menu-bar delete delete]
1166 '("Delete" . rmail-summary-delete-forward))
1167
1168(define-key rmail-summary-mode-map [menu-bar move]
1169 (cons "Move" (make-sparse-keymap "Move")))
1170
1171(define-key rmail-summary-mode-map [menu-bar move search-back]
1172 '("Search Back..." . rmail-summary-search-backward))
1173
1174(define-key rmail-summary-mode-map [menu-bar move search]
1175 '("Search..." . rmail-summary-search))
1176
1177(define-key rmail-summary-mode-map [menu-bar move previous]
1178 '("Previous Nondeleted" . rmail-summary-previous-msg))
1179
1180(define-key rmail-summary-mode-map [menu-bar move next]
1181 '("Next Nondeleted" . rmail-summary-next-msg))
1182
1183(define-key rmail-summary-mode-map [menu-bar move last]
1184 '("Last" . rmail-summary-last-message))
1185
1186(define-key rmail-summary-mode-map [menu-bar move first]
1187 '("First" . rmail-summary-first-message))
1188
1189(define-key rmail-summary-mode-map [menu-bar move previous]
1190 '("Previous" . rmail-summary-previous-all))
1191
1192(define-key rmail-summary-mode-map [menu-bar move next]
1193 '("Next" . rmail-summary-next-all))
1194 1182
1195(defun rmail-summary-mouse-goto-message (event) 1183(defun rmail-summary-mouse-goto-message (event)
1196 "Select the message whose summary line you click on." 1184 "Select the message whose summary line you click on."
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index 42caeee447c..8a33381b618 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -28,11 +28,17 @@
28 28
29;;; Code: 29;;; Code:
30 30
31;; This is referenced by some code below; it is defined in uniquify.el
32(defvar uniquify-buffer-name-style)
33
34;; From emulation/cua-base.el; used below
35(defvar cua-enable-cua-keys)
36
37
31;; Don't clobber an existing menu-bar keymap, to preserve any menu-bar key 38;; Don't clobber an existing menu-bar keymap, to preserve any menu-bar key
32;; definitions made in loaddefs.el. 39;; definitions made in loaddefs.el.
33(or (lookup-key global-map [menu-bar]) 40(or (lookup-key global-map [menu-bar])
34 (define-key global-map [menu-bar] (make-sparse-keymap "menu-bar"))) 41 (define-key global-map [menu-bar] (make-sparse-keymap "menu-bar")))
35(defvar menu-bar-help-menu (make-sparse-keymap "Help"))
36 42
37(if (not (featurep 'ns)) 43(if (not (featurep 'ns))
38 ;; Force Help item to come last, after the major mode's own items. 44 ;; Force Help item to come last, after the major mode's own items.
@@ -52,149 +58,151 @@
52 (define-key global-map [menu-bar services] ; set-up in ns-win 58 (define-key global-map [menu-bar services] ; set-up in ns-win
53 (cons (purecopy "Services") (make-sparse-keymap "Services")))) 59 (cons (purecopy "Services") (make-sparse-keymap "Services"))))
54 60
55;; If running under GNUstep, "Help" is moved and renamed "Info" (see below).
56(or (and (featurep 'ns)
57 (not (eq system-type 'darwin)))
58 (define-key global-map [menu-bar help-menu]
59 (cons (purecopy "Help") menu-bar-help-menu)))
60
61(defvar menu-bar-tools-menu (make-sparse-keymap "Tools"))
62(define-key global-map [menu-bar tools]
63 (cons (purecopy "Tools") menu-bar-tools-menu))
64;; This definition is just to show what this looks like. 61;; This definition is just to show what this looks like.
65;; It gets modified in place when menu-bar-update-buffers is called. 62;; It gets modified in place when menu-bar-update-buffers is called.
66(defvar global-buffers-menu-map (make-sparse-keymap "Buffers")) 63(defvar global-buffers-menu-map (make-sparse-keymap "Buffers"))
67(define-key global-map [menu-bar buffer]
68 (cons (purecopy "Buffers") global-buffers-menu-map))
69(defvar menu-bar-options-menu (make-sparse-keymap "Options"))
70(define-key global-map [menu-bar options]
71 (cons (purecopy "Options") menu-bar-options-menu))
72(defvar menu-bar-edit-menu (make-sparse-keymap "Edit"))
73(define-key global-map [menu-bar edit]
74 (cons (purecopy "Edit") menu-bar-edit-menu))
75(defvar menu-bar-file-menu (make-sparse-keymap "File"))
76(define-key global-map [menu-bar file]
77 (cons (purecopy "File") menu-bar-file-menu))
78
79;; Put "Help" menu at the front, called "Info".
80(and (featurep 'ns)
81 (not (eq system-type 'darwin))
82 (define-key global-map [menu-bar help-menu]
83 (cons (purecopy "Info") menu-bar-help-menu)))
84 64
85;; Only declared obsolete (and only made a proper alias) in 23.3. 65;; Only declared obsolete (and only made a proper alias) in 23.3.
86(define-obsolete-variable-alias 'menu-bar-files-menu 'menu-bar-file-menu "22.1") 66(define-obsolete-variable-alias
87 67 'menu-bar-files-menu 'menu-bar-file-menu "22.1")
88;; This is referenced by some code below; it is defined in uniquify.el 68(defvar menu-bar-file-menu
89(defvar uniquify-buffer-name-style) 69 (let ((menu (make-sparse-keymap "File")))
90 70
91;; From emulation/cua-base.el; used below 71 ;; The "File" menu items
92(defvar cua-enable-cua-keys) 72 (define-key menu [exit-emacs]
73 `(menu-item ,(purecopy "Quit") save-buffers-kill-terminal
74 :help ,(purecopy "Save unsaved buffers, then exit")))
93 75
94 76 (define-key menu [separator-exit]
95;; The "File" menu items 77 menu-bar-separator)
96(define-key menu-bar-file-menu [exit-emacs] 78
97 `(menu-item ,(purecopy "Quit") save-buffers-kill-terminal 79 ;; Don't use delete-frame as event name because that is a special
98 :help ,(purecopy "Save unsaved buffers, then exit"))) 80 ;; event.
99 81 (define-key menu [delete-this-frame]
100(define-key menu-bar-file-menu [separator-exit] 82 `(menu-item ,(purecopy "Delete Frame") delete-frame
101 menu-bar-separator) 83 :visible (fboundp 'delete-frame)
102 84 :enable (delete-frame-enabled-p)
103;; Don't use delete-frame as event name because that is a special 85 :help ,(purecopy "Delete currently selected frame")))
104;; event. 86 (define-key menu [make-frame-on-display]
105(define-key menu-bar-file-menu [delete-this-frame] 87 `(menu-item ,(purecopy "New Frame on Display...") make-frame-on-display
106 `(menu-item ,(purecopy "Delete Frame") delete-frame 88 :visible (fboundp 'make-frame-on-display)
107 :visible (fboundp 'delete-frame) 89 :help ,(purecopy "Open a new frame on another display")))
108 :enable (delete-frame-enabled-p) 90 (define-key menu [make-frame]
109 :help ,(purecopy "Delete currently selected frame"))) 91 `(menu-item ,(purecopy "New Frame") make-frame-command
110(define-key menu-bar-file-menu [make-frame-on-display] 92 :visible (fboundp 'make-frame-command)
111 `(menu-item ,(purecopy "New Frame on Display...") make-frame-on-display 93 :help ,(purecopy "Open a new frame")))
112 :visible (fboundp 'make-frame-on-display) 94
113 :help ,(purecopy "Open a new frame on another display"))) 95 (define-key menu [one-window]
114(define-key menu-bar-file-menu [make-frame] 96 `(menu-item ,(purecopy "Remove Splits") delete-other-windows
115 `(menu-item ,(purecopy "New Frame") make-frame-command 97 :enable (not (one-window-p t nil))
116 :visible (fboundp 'make-frame-command) 98 :help ,(purecopy
117 :help ,(purecopy "Open a new frame"))) 99 "Selected window grows to fill the whole frame")))
118 100
119(define-key menu-bar-file-menu [one-window] 101 (define-key menu [split-window]
120 `(menu-item ,(purecopy "Remove Splits") delete-other-windows 102 `(menu-item ,(purecopy "Split Window") split-window-vertically
121 :enable (not (one-window-p t nil)) 103 :enable (and (menu-bar-menu-frame-live-and-visible-p)
122 :help ,(purecopy "Selected window grows to fill the whole frame"))) 104 (menu-bar-non-minibuffer-window-p))
123 105 :help ,(purecopy "Split selected window in two windows")))
124(define-key menu-bar-file-menu [split-window] 106
125 `(menu-item ,(purecopy "Split Window") split-window-vertically 107 (define-key menu [separator-window]
126 :enable (and (menu-bar-menu-frame-live-and-visible-p) 108 menu-bar-separator)
127 (menu-bar-non-minibuffer-window-p)) 109
128 :help ,(purecopy "Split selected window in two windows"))) 110 (define-key menu [ps-print-region]
129 111 `(menu-item ,(purecopy "Postscript Print Region (B+W)") ps-print-region
130(define-key menu-bar-file-menu [separator-window] 112 :enable mark-active
131 menu-bar-separator) 113 :help ,(purecopy "Pretty-print marked region in black and white to PostScript printer")))
132 114 (define-key menu [ps-print-buffer]
133(define-key menu-bar-file-menu [ps-print-region] 115 `(menu-item ,(purecopy "Postscript Print Buffer (B+W)") ps-print-buffer
134 `(menu-item ,(purecopy "Postscript Print Region (B+W)") ps-print-region 116 :enable (menu-bar-menu-frame-live-and-visible-p)
135 :enable mark-active 117 :help ,(purecopy "Pretty-print current buffer in black and white to PostScript printer")))
136 :help ,(purecopy "Pretty-print marked region in black and white to PostScript printer"))) 118 (define-key menu [ps-print-region-faces]
137(define-key menu-bar-file-menu [ps-print-buffer] 119 `(menu-item ,(purecopy "Postscript Print Region")
138 `(menu-item ,(purecopy "Postscript Print Buffer (B+W)") ps-print-buffer 120 ps-print-region-with-faces
139 :enable (menu-bar-menu-frame-live-and-visible-p) 121 :enable mark-active
140 :help ,(purecopy "Pretty-print current buffer in black and white to PostScript printer"))) 122 :help ,(purecopy
141(define-key menu-bar-file-menu [ps-print-region-faces] 123 "Pretty-print marked region to PostScript printer")))
142 `(menu-item ,(purecopy "Postscript Print Region") ps-print-region-with-faces 124 (define-key menu [ps-print-buffer-faces]
143 :enable mark-active 125 `(menu-item ,(purecopy "Postscript Print Buffer")
144 :help ,(purecopy "Pretty-print marked region to PostScript printer"))) 126 ps-print-buffer-with-faces
145(define-key menu-bar-file-menu [ps-print-buffer-faces] 127 :enable (menu-bar-menu-frame-live-and-visible-p)
146 `(menu-item ,(purecopy "Postscript Print Buffer") ps-print-buffer-with-faces 128 :help ,(purecopy "Pretty-print current buffer to PostScript printer")))
147 :enable (menu-bar-menu-frame-live-and-visible-p) 129 (define-key menu [print-region]
148 :help ,(purecopy "Pretty-print current buffer to PostScript printer"))) 130 `(menu-item ,(purecopy "Print Region") print-region
149(define-key menu-bar-file-menu [print-region] 131 :enable mark-active
150 `(menu-item ,(purecopy "Print Region") print-region 132 :help ,(purecopy "Print region between mark and current position")))
151 :enable mark-active 133 (define-key menu [print-buffer]
152 :help ,(purecopy "Print region between mark and current position"))) 134 `(menu-item ,(purecopy "Print Buffer") print-buffer
153(define-key menu-bar-file-menu [print-buffer] 135 :enable (menu-bar-menu-frame-live-and-visible-p)
154 `(menu-item ,(purecopy "Print Buffer") print-buffer 136 :help ,(purecopy "Print current buffer with page headings")))
155 :enable (menu-bar-menu-frame-live-and-visible-p) 137
156 :help ,(purecopy "Print current buffer with page headings"))) 138 (define-key menu [separator-print]
157 139 menu-bar-separator)
158(define-key menu-bar-file-menu [separator-print] 140
159 menu-bar-separator) 141 (define-key menu [recover-session]
160 142 `(menu-item ,(purecopy "Recover Crashed Session") recover-session
161(define-key menu-bar-file-menu [recover-session] 143 :enable
162 `(menu-item ,(purecopy "Recover Crashed Session") recover-session 144 (and auto-save-list-file-prefix
163 :enable (and auto-save-list-file-prefix 145 (file-directory-p
164 (file-directory-p 146 (file-name-directory auto-save-list-file-prefix))
165 (file-name-directory auto-save-list-file-prefix)) 147 (directory-files
166 (directory-files 148 (file-name-directory auto-save-list-file-prefix)
167 (file-name-directory auto-save-list-file-prefix) 149 nil
168 nil 150 (concat "\\`"
169 (concat "\\`" 151 (regexp-quote
170 (regexp-quote 152 (file-name-nondirectory
171 (file-name-nondirectory 153 auto-save-list-file-prefix)))
172 auto-save-list-file-prefix))) 154 t))
173 t)) 155 :help ,(purecopy "Recover edits from a crashed session")))
174 :help ,(purecopy "Recover edits from a crashed session"))) 156 (define-key menu [revert-buffer]
175(define-key menu-bar-file-menu [revert-buffer] 157 `(menu-item ,(purecopy "Revert Buffer") revert-buffer
176 `(menu-item ,(purecopy "Revert Buffer") revert-buffer 158 :enable (or revert-buffer-function
177 :enable (or revert-buffer-function 159 revert-buffer-insert-file-contents-function
178 revert-buffer-insert-file-contents-function 160 (and buffer-file-number
179 (and buffer-file-number 161 (or (buffer-modified-p)
180 (or (buffer-modified-p) 162 (not (verify-visited-file-modtime
181 (not (verify-visited-file-modtime 163 (current-buffer))))))
182 (current-buffer)))))) 164 :help ,(purecopy "Re-read current buffer from its file")))
183 :help ,(purecopy "Re-read current buffer from its file"))) 165 (define-key menu [write-file]
184(define-key menu-bar-file-menu [write-file] 166 `(menu-item ,(purecopy "Save As...") write-file
185 `(menu-item ,(purecopy "Save As...") write-file 167 :enable (and (menu-bar-menu-frame-live-and-visible-p)
186 :enable (and (menu-bar-menu-frame-live-and-visible-p) 168 (menu-bar-non-minibuffer-window-p))
187 (menu-bar-non-minibuffer-window-p)) 169 :help ,(purecopy "Write current buffer to another file")))
188 :help ,(purecopy "Write current buffer to another file"))) 170 (define-key menu [save-buffer]
189(define-key menu-bar-file-menu [save-buffer] 171 `(menu-item ,(purecopy "Save") save-buffer
190 `(menu-item ,(purecopy "Save") save-buffer 172 :enable (and (buffer-modified-p)
191 :enable (and (buffer-modified-p) 173 (buffer-file-name)
192 (buffer-file-name) 174 (menu-bar-non-minibuffer-window-p))
193 (menu-bar-non-minibuffer-window-p)) 175 :help ,(purecopy "Save current buffer to its file")))
194 :help ,(purecopy "Save current buffer to its file"))) 176
195 177 (define-key menu [separator-save]
196(define-key menu-bar-file-menu [separator-save] 178 menu-bar-separator)
197 menu-bar-separator) 179
180
181 (define-key menu [kill-buffer]
182 `(menu-item ,(purecopy "Close") kill-this-buffer
183 :enable (kill-this-buffer-enabled-p)
184 :help ,(purecopy "Discard (kill) current buffer")))
185 (define-key menu [insert-file]
186 `(menu-item ,(purecopy "Insert File...") insert-file
187 :enable (menu-bar-non-minibuffer-window-p)
188 :help ,(purecopy "Insert another file into current buffer")))
189 (define-key menu [dired]
190 `(menu-item ,(purecopy "Open Directory...") dired
191 :enable (menu-bar-non-minibuffer-window-p)
192 :help ,(purecopy
193 "Read a directory, to operate on its files")))
194 (define-key menu [open-file]
195 `(menu-item ,(purecopy "Open File...") menu-find-file-existing
196 :enable (menu-bar-non-minibuffer-window-p)
197 :help ,(purecopy
198 "Read an existing file into an Emacs buffer")))
199 (define-key menu [new-file]
200 `(menu-item ,(purecopy "Visit New File...") find-file
201 :enable (menu-bar-non-minibuffer-window-p)
202 :help ,(purecopy
203 "Specify a new file's name, to edit the file")))
204
205 menu))
198 206
199(defun menu-find-file-existing () 207(defun menu-find-file-existing ()
200 "Edit the existing file FILENAME." 208 "Edit the existing file FILENAME."
@@ -206,31 +214,6 @@
206 (find-file-existing filename) 214 (find-file-existing filename)
207 (find-file filename)))) 215 (find-file filename))))
208 216
209
210(define-key menu-bar-file-menu [kill-buffer]
211 `(menu-item ,(purecopy "Close") kill-this-buffer
212 :enable (kill-this-buffer-enabled-p)
213 :help ,(purecopy "Discard (kill) current buffer")))
214(define-key menu-bar-file-menu [insert-file]
215 `(menu-item ,(purecopy "Insert File...") insert-file
216 :enable (menu-bar-non-minibuffer-window-p)
217 :help ,(purecopy "Insert another file into current buffer")))
218(define-key menu-bar-file-menu [dired]
219 `(menu-item ,(purecopy "Open Directory...") dired
220 :enable (menu-bar-non-minibuffer-window-p)
221 :help ,(purecopy "Read a directory, to operate on its files")))
222(define-key menu-bar-file-menu [open-file]
223 `(menu-item ,(purecopy "Open File...") menu-find-file-existing
224 :enable (menu-bar-non-minibuffer-window-p)
225 :help ,(purecopy "Read an existing file into an Emacs buffer")))
226(define-key menu-bar-file-menu [new-file]
227 `(menu-item ,(purecopy "Visit New File...") find-file
228 :enable (menu-bar-non-minibuffer-window-p)
229 :help ,(purecopy "Specify a new file's name, to edit the file")))
230
231
232;; The "Edit" menu items
233
234;; The "Edit->Search" submenu 217;; The "Edit->Search" submenu
235(defvar menu-bar-last-search-type nil 218(defvar menu-bar-last-search-type nil
236 "Type of last non-incremental search command called from the menu.") 219 "Type of last non-incremental search command called from the menu.")
@@ -297,131 +280,253 @@
297 (isearch-update-ring string t) 280 (isearch-update-ring string t)
298 (re-search-backward string))) 281 (re-search-backward string)))
299 282
300(defvar menu-bar-search-menu (make-sparse-keymap "Search"))
301
302;; The Edit->Search->Incremental Search menu 283;; The Edit->Search->Incremental Search menu
303(defvar menu-bar-i-search-menu 284(defvar menu-bar-i-search-menu
304 (make-sparse-keymap "Incremental Search")) 285 (let ((menu (make-sparse-keymap "Incremental Search")))
305 286 (define-key menu [isearch-backward-regexp]
306(define-key menu-bar-i-search-menu [isearch-backward-regexp] 287 `(menu-item ,(purecopy "Backward Regexp...") isearch-backward-regexp
307 `(menu-item ,(purecopy "Backward Regexp...") isearch-backward-regexp 288 :help ,(purecopy
308 :help ,(purecopy "Search backwards for a regular expression as you type it"))) 289 "Search backwards for a regular expression as you type it")))
309(define-key menu-bar-i-search-menu [isearch-forward-regexp] 290 (define-key menu [isearch-forward-regexp]
310 `(menu-item ,(purecopy "Forward Regexp...") isearch-forward-regexp 291 `(menu-item ,(purecopy "Forward Regexp...") isearch-forward-regexp
311 :help ,(purecopy "Search forward for a regular expression as you type it"))) 292 :help ,(purecopy
312(define-key menu-bar-i-search-menu [isearch-backward] 293 "Search forward for a regular expression as you type it")))
313 `(menu-item ,(purecopy "Backward String...") isearch-backward 294 (define-key menu [isearch-backward]
314 :help ,(purecopy "Search backwards for a string as you type it"))) 295 `(menu-item ,(purecopy "Backward String...") isearch-backward
315(define-key menu-bar-i-search-menu [isearch-forward] 296 :help ,(purecopy "Search backwards for a string as you type it")))
316 `(menu-item ,(purecopy "Forward String...") isearch-forward 297 (define-key menu [isearch-forward]
317 :help ,(purecopy "Search forward for a string as you type it"))) 298 `(menu-item ,(purecopy "Forward String...") isearch-forward
318 299 :help ,(purecopy "Search forward for a string as you type it")))
319(define-key menu-bar-search-menu [i-search] 300 menu))
320 `(menu-item ,(purecopy "Incremental Search") ,menu-bar-i-search-menu)) 301
321(define-key menu-bar-search-menu [separator-tag-isearch] 302(defvar menu-bar-search-menu
322 menu-bar-separator) 303 (let ((menu (make-sparse-keymap "Search")))
323 304
324(define-key menu-bar-search-menu [tags-continue] 305 (define-key menu [i-search]
325 `(menu-item ,(purecopy "Continue Tags Search") tags-loop-continue 306 `(menu-item ,(purecopy "Incremental Search") ,menu-bar-i-search-menu))
326 :help ,(purecopy "Continue last tags search operation"))) 307 (define-key menu [separator-tag-isearch]
327(define-key menu-bar-search-menu [tags-srch] 308 menu-bar-separator)
328 `(menu-item ,(purecopy "Search Tagged Files...") tags-search 309
329 :help ,(purecopy "Search for a regexp in all tagged files"))) 310 (define-key menu [tags-continue]
330(define-key menu-bar-search-menu [separator-tag-search] 311 `(menu-item ,(purecopy "Continue Tags Search") tags-loop-continue
331 menu-bar-separator) 312 :help ,(purecopy "Continue last tags search operation")))
332 313 (define-key menu [tags-srch]
333(define-key menu-bar-search-menu [repeat-search-back] 314 `(menu-item ,(purecopy "Search Tagged Files...") tags-search
334 `(menu-item ,(purecopy "Repeat Backwards") nonincremental-repeat-search-backward 315 :help ,(purecopy "Search for a regexp in all tagged files")))
335 :enable (or (and (eq menu-bar-last-search-type 'string) 316 (define-key menu [separator-tag-search] menu-bar-separator)
336 search-ring) 317
337 (and (eq menu-bar-last-search-type 'regexp) 318 (define-key menu [repeat-search-back]
338 regexp-search-ring)) 319 `(menu-item ,(purecopy "Repeat Backwards")
339 :help ,(purecopy "Repeat last search backwards"))) 320 nonincremental-repeat-search-backward
340(define-key menu-bar-search-menu [repeat-search-fwd] 321 :enable (or (and (eq menu-bar-last-search-type 'string)
341 `(menu-item ,(purecopy "Repeat Forward") nonincremental-repeat-search-forward 322 search-ring)
342 :enable (or (and (eq menu-bar-last-search-type 'string) 323 (and (eq menu-bar-last-search-type 'regexp)
343 search-ring) 324 regexp-search-ring))
344 (and (eq menu-bar-last-search-type 'regexp) 325 :help ,(purecopy "Repeat last search backwards")))
345 regexp-search-ring)) 326 (define-key menu [repeat-search-fwd]
346 :help ,(purecopy "Repeat last search forward"))) 327 `(menu-item ,(purecopy "Repeat Forward")
347(define-key menu-bar-search-menu [separator-repeat-search] 328 nonincremental-repeat-search-forward
348 menu-bar-separator) 329 :enable (or (and (eq menu-bar-last-search-type 'string)
349 330 search-ring)
350(define-key menu-bar-search-menu [re-search-backward] 331 (and (eq menu-bar-last-search-type 'regexp)
351 `(menu-item ,(purecopy "Regexp Backwards...") nonincremental-re-search-backward 332 regexp-search-ring))
352 :help ,(purecopy "Search backwards for a regular expression"))) 333 :help ,(purecopy "Repeat last search forward")))
353(define-key menu-bar-search-menu [re-search-forward] 334 (define-key menu [separator-repeat-search]
354 `(menu-item ,(purecopy "Regexp Forward...") nonincremental-re-search-forward 335 menu-bar-separator)
355 :help ,(purecopy "Search forward for a regular expression"))) 336
356 337 (define-key menu [re-search-backward]
357(define-key menu-bar-search-menu [search-backward] 338 `(menu-item ,(purecopy "Regexp Backwards...")
358 `(menu-item ,(purecopy "String Backwards...") nonincremental-search-backward 339 nonincremental-re-search-backward
359 :help ,(purecopy "Search backwards for a string"))) 340 :help ,(purecopy
360(define-key menu-bar-search-menu [search-forward] 341 "Search backwards for a regular expression")))
361 `(menu-item ,(purecopy "String Forward...") nonincremental-search-forward 342 (define-key menu [re-search-forward]
362 :help ,(purecopy "Search forward for a string"))) 343 `(menu-item ,(purecopy "Regexp Forward...")
344 nonincremental-re-search-forward
345 :help ,(purecopy "Search forward for a regular expression")))
346
347 (define-key menu [search-backward]
348 `(menu-item ,(purecopy "String Backwards...")
349 nonincremental-search-backward
350 :help ,(purecopy "Search backwards for a string")))
351 (define-key menu [search-forward]
352 `(menu-item ,(purecopy "String Forward...") nonincremental-search-forward
353 :help ,(purecopy "Search forward for a string")))
354 menu))
363 355
364;; The Edit->Replace submenu 356;; The Edit->Replace submenu
365 357
366(defvar menu-bar-replace-menu (make-sparse-keymap "Replace")) 358(defvar menu-bar-replace-menu
367 359 (let ((menu (make-sparse-keymap "Replace")))
368(define-key menu-bar-replace-menu [tags-repl-continue] 360 (define-key menu [tags-repl-continue]
369 `(menu-item ,(purecopy "Continue Replace") tags-loop-continue 361 `(menu-item ,(purecopy "Continue Replace") tags-loop-continue
370 :help ,(purecopy "Continue last tags replace operation"))) 362 :help ,(purecopy "Continue last tags replace operation")))
371(define-key menu-bar-replace-menu [tags-repl] 363 (define-key menu [tags-repl]
372 `(menu-item ,(purecopy "Replace in Tagged Files...") tags-query-replace 364 `(menu-item ,(purecopy "Replace in Tagged Files...") tags-query-replace
373 :help ,(purecopy "Interactively replace a regexp in all tagged files"))) 365 :help ,(purecopy
374(define-key menu-bar-replace-menu [separator-replace-tags] 366 "Interactively replace a regexp in all tagged files")))
375 menu-bar-separator) 367 (define-key menu [separator-replace-tags]
376 368 menu-bar-separator)
377(define-key menu-bar-replace-menu [query-replace-regexp] 369
378 `(menu-item ,(purecopy "Replace Regexp...") query-replace-regexp 370 (define-key menu [query-replace-regexp]
379 :enable (not buffer-read-only) 371 `(menu-item ,(purecopy "Replace Regexp...") query-replace-regexp
380 :help ,(purecopy "Replace regular expression interactively, ask about each occurrence"))) 372 :enable (not buffer-read-only)
381(define-key menu-bar-replace-menu [query-replace] 373 :help ,(purecopy "Replace regular expression interactively, ask about each occurrence")))
382 `(menu-item ,(purecopy "Replace String...") query-replace 374 (define-key menu [query-replace]
383 :enable (not buffer-read-only) 375 `(menu-item ,(purecopy "Replace String...") query-replace
384 :help ,(purecopy "Replace string interactively, ask about each occurrence"))) 376 :enable (not buffer-read-only)
377 :help ,(purecopy
378 "Replace string interactively, ask about each occurrence")))
379 menu))
385 380
386;;; Assemble the top-level Edit menu items. 381;;; Assemble the top-level Edit menu items.
387(define-key menu-bar-edit-menu [props] 382(defvar menu-bar-goto-menu
388 `(menu-item ,(purecopy "Text Properties") facemenu-menu)) 383 (let ((menu (make-sparse-keymap "Go To")))
389 384
390;; ns-win.el said: Add spell for platorm consistency. 385 (define-key menu [set-tags-name]
391(if (featurep 'ns) 386 `(menu-item ,(purecopy "Set Tags File Name...") visit-tags-table
392 (define-key menu-bar-edit-menu [spell] 387 :help ,(purecopy "Tell Tags commands which tag table file to use")))
393 `(menu-item ,(purecopy "Spell") ispell-menu-map))) 388
394 389 (define-key menu [separator-tag-file]
395(define-key menu-bar-edit-menu [fill] 390 menu-bar-separator)
396 `(menu-item ,(purecopy "Fill") fill-region 391
397 :enable (and mark-active (not buffer-read-only)) 392 (define-key menu [apropos-tags]
398 :help 393 `(menu-item ,(purecopy "Tags Apropos...") tags-apropos
399 ,(purecopy "Fill text in region to fit between left and right margin"))) 394 :help ,(purecopy "Find function/variables whose names match regexp")))
400 395 (define-key menu [next-tag-otherw]
401(define-key menu-bar-edit-menu [separator-bookmark] 396 `(menu-item ,(purecopy "Next Tag in Other Window")
402 menu-bar-separator) 397 menu-bar-next-tag-other-window
403 398 :enable (and (boundp 'tags-location-ring)
404(define-key menu-bar-edit-menu [bookmark] 399 (not (ring-empty-p tags-location-ring)))
405 `(menu-item ,(purecopy "Bookmarks") menu-bar-bookmark-map)) 400 :help ,(purecopy "Find next function/variable matching last tag name in another window")))
401
402 (define-key menu [next-tag]
403 `(menu-item ,(purecopy "Find Next Tag")
404 menu-bar-next-tag
405 :enable (and (boundp 'tags-location-ring)
406 (not (ring-empty-p tags-location-ring)))
407 :help ,(purecopy "Find next function/variable matching last tag name")))
408 (define-key menu [find-tag-otherw]
409 `(menu-item ,(purecopy "Find Tag in Other Window...") find-tag-other-window
410 :help ,(purecopy "Find function/variable definition in another window")))
411 (define-key menu [find-tag]
412 `(menu-item ,(purecopy "Find Tag...") find-tag
413 :help ,(purecopy "Find definition of function or variable")))
414
415 (define-key menu [separator-tags]
416 menu-bar-separator)
417
418 (define-key menu [end-of-buf]
419 `(menu-item ,(purecopy "Goto End of Buffer") end-of-buffer))
420 (define-key menu [beg-of-buf]
421 `(menu-item ,(purecopy "Goto Beginning of Buffer") beginning-of-buffer))
422 (define-key menu [go-to-pos]
423 `(menu-item ,(purecopy "Goto Buffer Position...") goto-char
424 :help ,(purecopy "Read a number N and go to buffer position N")))
425 (define-key menu [go-to-line]
426 `(menu-item ,(purecopy "Goto Line...") goto-line
427 :help ,(purecopy "Read a line number and go to that line")))
428 menu))
406 429
407(defvar menu-bar-goto-menu (make-sparse-keymap "Go To"))
408 430
409(define-key menu-bar-goto-menu [set-tags-name] 431(defvar yank-menu (cons (purecopy "Select Yank") nil))
410 `(menu-item ,(purecopy "Set Tags File Name...") visit-tags-table 432(fset 'yank-menu (cons 'keymap yank-menu))
411 :help ,(purecopy "Tell Tags commands which tag table file to use")))
412
413(define-key menu-bar-goto-menu [separator-tag-file]
414 menu-bar-separator)
415 433
416(define-key menu-bar-goto-menu [apropos-tags] 434(defvar menu-bar-edit-menu
417 `(menu-item ,(purecopy "Tags Apropos...") tags-apropos 435 (let ((menu (make-sparse-keymap "Edit")))
418 :help ,(purecopy "Find function/variables whose names match regexp"))) 436
419(define-key menu-bar-goto-menu [next-tag-otherw] 437 (define-key menu [props]
420 `(menu-item ,(purecopy "Next Tag in Other Window") 438 `(menu-item ,(purecopy "Text Properties") facemenu-menu))
421 menu-bar-next-tag-other-window 439
422 :enable (and (boundp 'tags-location-ring) 440 ;; ns-win.el said: Add spell for platorm consistency.
423 (not (ring-empty-p tags-location-ring))) 441 (if (featurep 'ns)
424 :help ,(purecopy "Find next function/variable matching last tag name in another window"))) 442 (define-key menu [spell]
443 `(menu-item ,(purecopy "Spell") ispell-menu-map)))
444
445 (define-key menu [fill]
446 `(menu-item ,(purecopy "Fill") fill-region
447 :enable (and mark-active (not buffer-read-only))
448 :help
449 ,(purecopy "Fill text in region to fit between left and right margin")))
450
451 (define-key menu [separator-bookmark]
452 menu-bar-separator)
453
454 (define-key menu [bookmark]
455 `(menu-item ,(purecopy "Bookmarks") menu-bar-bookmark-map))
456
457 (define-key menu [goto]
458 `(menu-item ,(purecopy "Go To") ,menu-bar-goto-menu))
459
460 (define-key menu [replace]
461 `(menu-item ,(purecopy "Replace") ,menu-bar-replace-menu))
462
463 (define-key menu [search]
464 `(menu-item ,(purecopy "Search") ,menu-bar-search-menu))
465
466 (define-key menu [separator-search]
467 menu-bar-separator)
468
469 (define-key menu [mark-whole-buffer]
470 `(menu-item ,(purecopy "Select All") mark-whole-buffer
471 :help ,(purecopy "Mark the whole buffer for a subsequent cut/copy")))
472 (define-key menu [clear]
473 `(menu-item ,(purecopy "Clear") delete-region
474 :enable (and mark-active
475 (not buffer-read-only))
476 :help
477 ,(purecopy "Delete the text in region between mark and current position")))
478
479
480 (define-key menu (if (featurep 'ns) [select-paste]
481 [paste-from-menu])
482 ;; ns-win.el said: Change text to be more consistent with
483 ;; surrounding menu items `paste', etc."
484 `(menu-item ,(purecopy (if (featurep 'ns) "Select and Paste"
485 "Paste from Kill Menu")) yank-menu
486 :enable (and (cdr yank-menu) (not buffer-read-only))
487 :help ,(purecopy "Choose a string from the kill ring and paste it")))
488 (define-key menu [paste]
489 `(menu-item ,(purecopy "Paste") yank
490 :enable (and (or
491 ;; Emacs compiled --without-x (or --with-ns)
492 ;; doesn't have x-selection-exists-p.
493 (and (fboundp 'x-selection-exists-p)
494 (x-selection-exists-p 'CLIPBOARD))
495 (if (featurep 'ns) ; like paste-from-menu
496 (cdr yank-menu)
497 kill-ring))
498 (not buffer-read-only))
499 :help ,(purecopy "Paste (yank) text most recently cut/copied")))
500 (define-key menu [copy]
501 ;; ns-win.el said: Substitute a Copy function that works better
502 ;; under X (for GNUstep).
503 `(menu-item ,(purecopy "Copy") ,(if (featurep 'ns)
504 'ns-copy-including-secondary
505 'kill-ring-save)
506 :enable mark-active
507 :help ,(purecopy "Copy text in region between mark and current position")
508 :keys ,(purecopy (if (featurep 'ns)
509 "\\[ns-copy-including-secondary]"
510 "\\[kill-ring-save]"))))
511 (define-key menu [cut]
512 `(menu-item ,(purecopy "Cut") kill-region
513 :enable (and mark-active (not buffer-read-only))
514 :help
515 ,(purecopy "Cut (kill) text in region between mark and current position")))
516 ;; ns-win.el said: Separate undo from cut/paste section.
517 (if (featurep 'ns)
518 (define-key menu [separator-undo] menu-bar-separator))
519
520 (define-key menu [undo]
521 `(menu-item ,(purecopy "Undo") undo
522 :enable (and (not buffer-read-only)
523 (not (eq t buffer-undo-list))
524 (if (eq last-command 'undo)
525 (listp pending-undo-list)
526 (consp buffer-undo-list)))
527 :help ,(purecopy "Undo last operation")))
528
529 menu))
425 530
426(defun menu-bar-next-tag-other-window () 531(defun menu-bar-next-tag-other-window ()
427 "Find the next definition of the tag already specified." 532 "Find the next definition of the tag already specified."
@@ -433,105 +538,6 @@
433 (interactive) 538 (interactive)
434 (find-tag nil t)) 539 (find-tag nil t))
435 540
436(define-key menu-bar-goto-menu [next-tag]
437 `(menu-item ,(purecopy "Find Next Tag")
438 menu-bar-next-tag
439 :enable (and (boundp 'tags-location-ring)
440 (not (ring-empty-p tags-location-ring)))
441 :help ,(purecopy "Find next function/variable matching last tag name")))
442(define-key menu-bar-goto-menu [find-tag-otherw]
443 `(menu-item ,(purecopy "Find Tag in Other Window...") find-tag-other-window
444 :help ,(purecopy "Find function/variable definition in another window")))
445(define-key menu-bar-goto-menu [find-tag]
446 `(menu-item ,(purecopy "Find Tag...") find-tag
447 :help ,(purecopy "Find definition of function or variable")))
448
449(define-key menu-bar-goto-menu [separator-tags]
450 menu-bar-separator)
451
452(define-key menu-bar-goto-menu [end-of-buf]
453 `(menu-item ,(purecopy "Goto End of Buffer") end-of-buffer))
454(define-key menu-bar-goto-menu [beg-of-buf]
455 `(menu-item ,(purecopy "Goto Beginning of Buffer") beginning-of-buffer))
456(define-key menu-bar-goto-menu [go-to-pos]
457 `(menu-item ,(purecopy "Goto Buffer Position...") goto-char
458 :help ,(purecopy "Read a number N and go to buffer position N")))
459(define-key menu-bar-goto-menu [go-to-line]
460 `(menu-item ,(purecopy "Goto Line...") goto-line
461 :help ,(purecopy "Read a line number and go to that line")))
462
463(define-key menu-bar-edit-menu [goto]
464 `(menu-item ,(purecopy "Go To") ,menu-bar-goto-menu))
465
466(define-key menu-bar-edit-menu [replace]
467 `(menu-item ,(purecopy "Replace") ,menu-bar-replace-menu))
468
469(define-key menu-bar-edit-menu [search]
470 `(menu-item ,(purecopy "Search") ,menu-bar-search-menu))
471
472(define-key menu-bar-edit-menu [separator-search]
473 menu-bar-separator)
474
475(define-key menu-bar-edit-menu [mark-whole-buffer]
476 `(menu-item ,(purecopy "Select All") mark-whole-buffer
477 :help ,(purecopy "Mark the whole buffer for a subsequent cut/copy")))
478(define-key menu-bar-edit-menu [clear]
479 `(menu-item ,(purecopy "Clear") delete-region
480 :enable (and mark-active
481 (not buffer-read-only))
482 :help
483 ,(purecopy "Delete the text in region between mark and current position")))
484(defvar yank-menu (cons (purecopy "Select Yank") nil))
485(fset 'yank-menu (cons 'keymap yank-menu))
486(define-key menu-bar-edit-menu (if (featurep 'ns) [select-paste]
487 [paste-from-menu])
488 ;; ns-win.el said: Change text to be more consistent with
489 ;; surrounding menu items `paste', etc."
490 `(menu-item ,(purecopy (if (featurep 'ns) "Select and Paste"
491 "Paste from Kill Menu")) yank-menu
492 :enable (and (cdr yank-menu) (not buffer-read-only))
493 :help ,(purecopy "Choose a string from the kill ring and paste it")))
494(define-key menu-bar-edit-menu [paste]
495 `(menu-item ,(purecopy "Paste") yank
496 :enable (and (or
497 ;; Emacs compiled --without-x (or --with-ns)
498 ;; doesn't have x-selection-exists-p.
499 (and (fboundp 'x-selection-exists-p)
500 (x-selection-exists-p 'CLIPBOARD))
501 (if (featurep 'ns) ; like paste-from-menu
502 (cdr yank-menu)
503 kill-ring))
504 (not buffer-read-only))
505 :help ,(purecopy "Paste (yank) text most recently cut/copied")))
506(define-key menu-bar-edit-menu [copy]
507 ;; ns-win.el said: Substitute a Copy function that works better
508 ;; under X (for GNUstep).
509 `(menu-item ,(purecopy "Copy") ,(if (featurep 'ns)
510 'ns-copy-including-secondary
511 'kill-ring-save)
512 :enable mark-active
513 :help ,(purecopy "Copy text in region between mark and current position")
514 :keys ,(purecopy (if (featurep 'ns)
515 "\\[ns-copy-including-secondary]"
516 "\\[kill-ring-save]"))))
517(define-key menu-bar-edit-menu [cut]
518 `(menu-item ,(purecopy "Cut") kill-region
519 :enable (and mark-active (not buffer-read-only))
520 :help
521 ,(purecopy "Cut (kill) text in region between mark and current position")))
522;; ns-win.el said: Separate undo from cut/paste section.
523(if (featurep 'ns)
524 (define-key menu-bar-edit-menu [separator-undo] menu-bar-separator))
525
526(define-key menu-bar-edit-menu [undo]
527 `(menu-item ,(purecopy "Undo") undo
528 :enable (and (not buffer-read-only)
529 (not (eq t buffer-undo-list))
530 (if (eq last-command 'undo)
531 (listp pending-undo-list)
532 (consp buffer-undo-list)))
533 :help ,(purecopy "Undo last operation")))
534
535(define-obsolete-function-alias 541(define-obsolete-function-alias
536 'menu-bar-kill-ring-save 'kill-ring-save "24.1") 542 'menu-bar-kill-ring-save 'kill-ring-save "24.1")
537 543
@@ -581,48 +587,49 @@ Do the same for the keys of the same name."
581 587
582;; The "Options" menu items 588;; The "Options" menu items
583 589
584(defvar menu-bar-custom-menu (make-sparse-keymap "Customize")) 590(defvar menu-bar-custom-menu
585 591 (let ((menu (make-sparse-keymap "Customize")))
586(define-key menu-bar-custom-menu [customize-apropos-faces] 592
587 `(menu-item ,(purecopy "Faces Matching...") customize-apropos-faces 593 (define-key menu [customize-apropos-faces]
588 :help ,(purecopy "Browse faces matching a regexp or word list"))) 594 `(menu-item ,(purecopy "Faces Matching...") customize-apropos-faces
589(define-key menu-bar-custom-menu [customize-apropos-options] 595 :help ,(purecopy "Browse faces matching a regexp or word list")))
590 `(menu-item ,(purecopy "Options Matching...") customize-apropos-options 596 (define-key menu [customize-apropos-options]
591 :help ,(purecopy "Browse options matching a regexp or word list"))) 597 `(menu-item ,(purecopy "Options Matching...") customize-apropos-options
592(define-key menu-bar-custom-menu [customize-apropos] 598 :help ,(purecopy "Browse options matching a regexp or word list")))
593 `(menu-item ,(purecopy "All Settings Matching...") customize-apropos 599 (define-key menu [customize-apropos]
594 :help ,(purecopy "Browse customizable settings matching a regexp or word list"))) 600 `(menu-item ,(purecopy "All Settings Matching...") customize-apropos
595(define-key menu-bar-custom-menu [separator-1] 601 :help ,(purecopy "Browse customizable settings matching a regexp or word list")))
596 menu-bar-separator) 602 (define-key menu [separator-1]
597(define-key menu-bar-custom-menu [customize-group] 603 menu-bar-separator)
598 `(menu-item ,(purecopy "Specific Group...") customize-group 604 (define-key menu [customize-group]
599 :help ,(purecopy "Customize settings of specific group"))) 605 `(menu-item ,(purecopy "Specific Group...") customize-group
600(define-key menu-bar-custom-menu [customize-face] 606 :help ,(purecopy "Customize settings of specific group")))
601 `(menu-item ,(purecopy "Specific Face...") customize-face 607 (define-key menu [customize-face]
602 :help ,(purecopy "Customize attributes of specific face"))) 608 `(menu-item ,(purecopy "Specific Face...") customize-face
603(define-key menu-bar-custom-menu [customize-option] 609 :help ,(purecopy "Customize attributes of specific face")))
604 `(menu-item ,(purecopy "Specific Option...") customize-option 610 (define-key menu [customize-option]
605 :help ,(purecopy "Customize value of specific option"))) 611 `(menu-item ,(purecopy "Specific Option...") customize-option
606(define-key menu-bar-custom-menu [separator-2] 612 :help ,(purecopy "Customize value of specific option")))
607 menu-bar-separator) 613 (define-key menu [separator-2]
608(define-key menu-bar-custom-menu [customize-changed-options] 614 menu-bar-separator)
609 `(menu-item ,(purecopy "New Options...") customize-changed-options 615 (define-key menu [customize-changed-options]
610 :help ,(purecopy "Options added or changed in recent Emacs versions"))) 616 `(menu-item ,(purecopy "New Options...") customize-changed-options
611(define-key menu-bar-custom-menu [customize-saved] 617 :help ,(purecopy "Options added or changed in recent Emacs versions")))
612 `(menu-item ,(purecopy "Saved Options") customize-saved 618 (define-key menu [customize-saved]
613 :help ,(purecopy "Customize previously saved options"))) 619 `(menu-item ,(purecopy "Saved Options") customize-saved
614(define-key menu-bar-custom-menu [separator-3] 620 :help ,(purecopy "Customize previously saved options")))
615 menu-bar-separator) 621 (define-key menu [separator-3]
616(define-key menu-bar-custom-menu [customize-browse] 622 menu-bar-separator)
617 `(menu-item ,(purecopy "Browse Customization Groups") customize-browse 623 (define-key menu [customize-browse]
618 :help ,(purecopy "Browse all customization groups"))) 624 `(menu-item ,(purecopy "Browse Customization Groups") customize-browse
619(define-key menu-bar-custom-menu [customize] 625 :help ,(purecopy "Browse all customization groups")))
620 `(menu-item ,(purecopy "Top-level Customization Group") customize 626 (define-key menu [customize]
621 :help ,(purecopy "The master group called `Emacs'"))) 627 `(menu-item ,(purecopy "Top-level Customization Group") customize
622(define-key menu-bar-custom-menu [customize-themes] 628 :help ,(purecopy "The master group called `Emacs'")))
623 `(menu-item ,(purecopy "Custom Themes") customize-themes 629 (define-key menu [customize-themes]
624 :help ,(purecopy "Choose a pre-defined customization theme"))) 630 `(menu-item ,(purecopy "Custom Themes") customize-themes
625 631 :help ,(purecopy "Choose a pre-defined customization theme")))
632 menu))
626;(defvar menu-bar-preferences-menu (make-sparse-keymap "Preferences")) 633;(defvar menu-bar-preferences-menu (make-sparse-keymap "Preferences"))
627 634
628(defmacro menu-bar-make-mm-toggle (fname doc help &optional props) 635(defmacro menu-bar-make-mm-toggle (fname doc help &optional props)
@@ -692,12 +699,6 @@ by \"Save Options\" in Custom buffers.")
692 (custom-push-theme 'theme-face 'default 'user 'set spec) 699 (custom-push-theme 'theme-face 'default 'user 'set spec)
693 (put 'default 'face-modified nil)))) 700 (put 'default 'face-modified nil))))
694 701
695
696
697;;; Assemble all the top-level items of the "Options" menu
698(define-key menu-bar-options-menu [customize]
699 `(menu-item ,(purecopy "Customize Emacs") ,menu-bar-custom-menu))
700
701(defun menu-bar-options-save () 702(defun menu-bar-options-save ()
702 "Save current values of Options menu items using Custom." 703 "Save current values of Options menu items using Custom."
703 (interactive) 704 (interactive)
@@ -745,276 +746,204 @@ by \"Save Options\" in Custom buffers.")
745 (when need-save 746 (when need-save
746 (custom-save-all)))) 747 (custom-save-all))))
747 748
748(define-key menu-bar-options-menu [package]
749 '(menu-item "Manage Emacs Packages" package-list-packages
750 :help "Install or uninstall additional Emacs packages"))
751
752(define-key menu-bar-options-menu [save]
753 `(menu-item ,(purecopy "Save Options") menu-bar-options-save
754 :help ,(purecopy "Save options set from the menu above")))
755
756(define-key menu-bar-options-menu [custom-separator]
757 menu-bar-separator)
758
759(define-key menu-bar-options-menu [menu-set-font]
760 `(menu-item ,(purecopy "Set Default Font...") menu-set-font
761 :visible (display-multi-font-p)
762 :help ,(purecopy "Select a default font")))
763
764(if (featurep 'system-font-setting)
765 (define-key menu-bar-options-menu [menu-system-font]
766 (menu-bar-make-toggle toggle-use-system-font font-use-system-font
767 "Use system font"
768 "Use system font: %s"
769 "Use the monospaced font defined by the system")))
770 749
750;;; Assemble all the top-level items of the "Options" menu
771 751
772;; The "Show/Hide" submenu of menu "Options" 752;; The "Show/Hide" submenu of menu "Options"
773 753
774(defvar menu-bar-showhide-menu (make-sparse-keymap "Show/Hide"))
775
776(define-key menu-bar-showhide-menu [column-number-mode]
777 (menu-bar-make-mm-toggle column-number-mode
778 "Column Numbers"
779 "Show the current column number in the mode line"))
780
781(define-key menu-bar-showhide-menu [line-number-mode]
782 (menu-bar-make-mm-toggle line-number-mode
783 "Line Numbers"
784 "Show the current line number in the mode line"))
785
786(define-key menu-bar-showhide-menu [size-indication-mode]
787 (menu-bar-make-mm-toggle size-indication-mode
788 "Size Indication"
789 "Show the size of the buffer in the mode line"))
790
791(define-key menu-bar-showhide-menu [linecolumn-separator]
792 menu-bar-separator)
793
794(define-key menu-bar-showhide-menu [showhide-battery]
795 (menu-bar-make-mm-toggle display-battery-mode
796 "Battery Status"
797 "Display battery status information in mode line"))
798
799(define-key menu-bar-showhide-menu [showhide-date-time]
800 (menu-bar-make-mm-toggle display-time-mode
801 "Time, Load and Mail"
802 "Display time, system load averages and \
803mail status in mode line"))
804
805(define-key menu-bar-showhide-menu [datetime-separator]
806 menu-bar-separator)
807
808(define-key menu-bar-showhide-menu [showhide-speedbar]
809 `(menu-item ,(purecopy "Speedbar") speedbar-frame-mode
810 :help ,(purecopy "Display a Speedbar quick-navigation frame")
811 :button (:toggle
812 . (and (boundp 'speedbar-frame)
813 (frame-live-p (symbol-value 'speedbar-frame))
814 (frame-visible-p
815 (symbol-value 'speedbar-frame))))))
816
817(defvar menu-bar-showhide-fringe-menu (make-sparse-keymap "Fringe"))
818
819(defvar menu-bar-showhide-fringe-ind-menu
820 (make-sparse-keymap "Buffer boundaries"))
821
822(defun menu-bar-showhide-fringe-ind-customize () 754(defun menu-bar-showhide-fringe-ind-customize ()
823 "Show customization buffer for `indicate-buffer-boundaries'." 755 "Show customization buffer for `indicate-buffer-boundaries'."
824 (interactive) 756 (interactive)
825 (customize-variable 'indicate-buffer-boundaries)) 757 (customize-variable 'indicate-buffer-boundaries))
826 758
827(define-key menu-bar-showhide-fringe-ind-menu [customize]
828 `(menu-item ,(purecopy "Other (Customize)")
829 menu-bar-showhide-fringe-ind-customize
830 :help ,(purecopy "Additional choices available through Custom buffer")
831 :visible (display-graphic-p)
832 :button (:radio . (not (member indicate-buffer-boundaries
833 '(nil left right
834 ((top . left) (bottom . right))
835 ((t . right) (top . left))))))))
836
837(defun menu-bar-showhide-fringe-ind-mixed () 759(defun menu-bar-showhide-fringe-ind-mixed ()
838 "Display top and bottom indicators in opposite fringes, arrows in right." 760 "Display top and bottom indicators in opposite fringes, arrows in right."
839 (interactive) 761 (interactive)
840 (customize-set-variable 'indicate-buffer-boundaries 762 (customize-set-variable 'indicate-buffer-boundaries
841 '((t . right) (top . left)))) 763 '((t . right) (top . left))))
842 764
843(define-key menu-bar-showhide-fringe-ind-menu [mixed]
844 `(menu-item ,(purecopy "Opposite, Arrows Right") menu-bar-showhide-fringe-ind-mixed
845 :help
846 ,(purecopy "Show top/bottom indicators in opposite fringes, arrows in right")
847 :visible (display-graphic-p)
848 :button (:radio . (equal indicate-buffer-boundaries
849 '((t . right) (top . left))))))
850
851(defun menu-bar-showhide-fringe-ind-box () 765(defun menu-bar-showhide-fringe-ind-box ()
852 "Display top and bottom indicators in opposite fringes." 766 "Display top and bottom indicators in opposite fringes."
853 (interactive) 767 (interactive)
854 (customize-set-variable 'indicate-buffer-boundaries 768 (customize-set-variable 'indicate-buffer-boundaries
855 '((top . left) (bottom . right)))) 769 '((top . left) (bottom . right))))
856 770
857(define-key menu-bar-showhide-fringe-ind-menu [box]
858 `(menu-item ,(purecopy "Opposite, No Arrows") menu-bar-showhide-fringe-ind-box
859 :help ,(purecopy "Show top/bottom indicators in opposite fringes, no arrows")
860 :visible (display-graphic-p)
861 :button (:radio . (equal indicate-buffer-boundaries
862 '((top . left) (bottom . right))))))
863
864(defun menu-bar-showhide-fringe-ind-right () 771(defun menu-bar-showhide-fringe-ind-right ()
865 "Display buffer boundaries and arrows in the right fringe." 772 "Display buffer boundaries and arrows in the right fringe."
866 (interactive) 773 (interactive)
867 (customize-set-variable 'indicate-buffer-boundaries 'right)) 774 (customize-set-variable 'indicate-buffer-boundaries 'right))
868 775
869(define-key menu-bar-showhide-fringe-ind-menu [right]
870 `(menu-item ,(purecopy "In Right Fringe") menu-bar-showhide-fringe-ind-right
871 :help ,(purecopy "Show buffer boundaries and arrows in right fringe")
872 :visible (display-graphic-p)
873 :button (:radio . (eq indicate-buffer-boundaries 'right))))
874
875(defun menu-bar-showhide-fringe-ind-left () 776(defun menu-bar-showhide-fringe-ind-left ()
876 "Display buffer boundaries and arrows in the left fringe." 777 "Display buffer boundaries and arrows in the left fringe."
877 (interactive) 778 (interactive)
878 (customize-set-variable 'indicate-buffer-boundaries 'left)) 779 (customize-set-variable 'indicate-buffer-boundaries 'left))
879 780
880(define-key menu-bar-showhide-fringe-ind-menu [left]
881 `(menu-item ,(purecopy "In Left Fringe") menu-bar-showhide-fringe-ind-left
882 :help ,(purecopy "Show buffer boundaries and arrows in left fringe")
883 :visible (display-graphic-p)
884 :button (:radio . (eq indicate-buffer-boundaries 'left))))
885
886(defun menu-bar-showhide-fringe-ind-none () 781(defun menu-bar-showhide-fringe-ind-none ()
887 "Do not display any buffer boundary indicators." 782 "Do not display any buffer boundary indicators."
888 (interactive) 783 (interactive)
889 (customize-set-variable 'indicate-buffer-boundaries nil)) 784 (customize-set-variable 'indicate-buffer-boundaries nil))
890 785
891(define-key menu-bar-showhide-fringe-ind-menu [none] 786(defvar menu-bar-showhide-fringe-ind-menu
892 `(menu-item ,(purecopy "No Indicators") menu-bar-showhide-fringe-ind-none 787 (let ((menu (make-sparse-keymap "Buffer boundaries")))
893 :help ,(purecopy "Hide all buffer boundary indicators and arrows") 788
894 :visible (display-graphic-p) 789 (define-key menu [customize]
895 :button (:radio . (eq indicate-buffer-boundaries nil)))) 790 `(menu-item ,(purecopy "Other (Customize)")
896 791 menu-bar-showhide-fringe-ind-customize
897(define-key menu-bar-showhide-fringe-menu [showhide-fringe-ind] 792 :help ,(purecopy "Additional choices available through Custom buffer")
898 `(menu-item ,(purecopy "Buffer Boundaries") ,menu-bar-showhide-fringe-ind-menu 793 :visible (display-graphic-p)
899 :visible (display-graphic-p) 794 :button (:radio . (not (member indicate-buffer-boundaries
900 :help ,(purecopy "Indicate buffer boundaries in fringe"))) 795 '(nil left right
901 796 ((top . left) (bottom . right))
902(define-key menu-bar-showhide-fringe-menu [indicate-empty-lines] 797 ((t . right) (top . left))))))))
903 (menu-bar-make-toggle toggle-indicate-empty-lines indicate-empty-lines 798
904 "Empty Line Indicators" 799 (define-key menu [mixed]
905 "Indicating of empty lines %s" 800 `(menu-item ,(purecopy "Opposite, Arrows Right") menu-bar-showhide-fringe-ind-mixed
906 "Indicate trailing empty lines in fringe, globally")) 801 :help
802 ,(purecopy "Show top/bottom indicators in opposite fringes, arrows in right")
803 :visible (display-graphic-p)
804 :button (:radio . (equal indicate-buffer-boundaries
805 '((t . right) (top . left))))))
806
807 (define-key menu [box]
808 `(menu-item ,(purecopy "Opposite, No Arrows") menu-bar-showhide-fringe-ind-box
809 :help ,(purecopy "Show top/bottom indicators in opposite fringes, no arrows")
810 :visible (display-graphic-p)
811 :button (:radio . (equal indicate-buffer-boundaries
812 '((top . left) (bottom . right))))))
813
814 (define-key menu [right]
815 `(menu-item ,(purecopy "In Right Fringe") menu-bar-showhide-fringe-ind-right
816 :help ,(purecopy "Show buffer boundaries and arrows in right fringe")
817 :visible (display-graphic-p)
818 :button (:radio . (eq indicate-buffer-boundaries 'right))))
819
820 (define-key menu [left]
821 `(menu-item ,(purecopy "In Left Fringe") menu-bar-showhide-fringe-ind-left
822 :help ,(purecopy "Show buffer boundaries and arrows in left fringe")
823 :visible (display-graphic-p)
824 :button (:radio . (eq indicate-buffer-boundaries 'left))))
825
826 (define-key menu [none]
827 `(menu-item ,(purecopy "No Indicators") menu-bar-showhide-fringe-ind-none
828 :help ,(purecopy "Hide all buffer boundary indicators and arrows")
829 :visible (display-graphic-p)
830 :button (:radio . (eq indicate-buffer-boundaries nil))))
831 menu))
907 832
908(defun menu-bar-showhide-fringe-menu-customize () 833(defun menu-bar-showhide-fringe-menu-customize ()
909 "Show customization buffer for `fringe-mode'." 834 "Show customization buffer for `fringe-mode'."
910 (interactive) 835 (interactive)
911 (customize-variable 'fringe-mode)) 836 (customize-variable 'fringe-mode))
912 837
913(define-key menu-bar-showhide-fringe-menu [customize]
914 `(menu-item ,(purecopy "Customize Fringe") menu-bar-showhide-fringe-menu-customize
915 :help ,(purecopy "Detailed customization of fringe")
916 :visible (display-graphic-p)))
917
918(defun menu-bar-showhide-fringe-menu-customize-reset () 838(defun menu-bar-showhide-fringe-menu-customize-reset ()
919 "Reset the fringe mode: display fringes on both sides of a window." 839 "Reset the fringe mode: display fringes on both sides of a window."
920 (interactive) 840 (interactive)
921 (customize-set-variable 'fringe-mode nil)) 841 (customize-set-variable 'fringe-mode nil))
922 842
923(define-key menu-bar-showhide-fringe-menu [default]
924 `(menu-item ,(purecopy "Default") menu-bar-showhide-fringe-menu-customize-reset
925 :help ,(purecopy "Default width fringe on both left and right side")
926 :visible (display-graphic-p)
927 :button (:radio . (eq fringe-mode nil))))
928
929(defun menu-bar-showhide-fringe-menu-customize-right () 843(defun menu-bar-showhide-fringe-menu-customize-right ()
930 "Display fringes only on the right of each window." 844 "Display fringes only on the right of each window."
931 (interactive) 845 (interactive)
932 (require 'fringe) 846 (require 'fringe)
933 (customize-set-variable 'fringe-mode '(0 . nil))) 847 (customize-set-variable 'fringe-mode '(0 . nil)))
934 848
935(define-key menu-bar-showhide-fringe-menu [right]
936 `(menu-item ,(purecopy "On the Right") menu-bar-showhide-fringe-menu-customize-right
937 :help ,(purecopy "Fringe only on the right side")
938 :visible (display-graphic-p)
939 :button (:radio . (equal fringe-mode '(0 . nil)))))
940
941(defun menu-bar-showhide-fringe-menu-customize-left () 849(defun menu-bar-showhide-fringe-menu-customize-left ()
942 "Display fringes only on the left of each window." 850 "Display fringes only on the left of each window."
943 (interactive) 851 (interactive)
944 (require 'fringe) 852 (require 'fringe)
945 (customize-set-variable 'fringe-mode '(nil . 0))) 853 (customize-set-variable 'fringe-mode '(nil . 0)))
946 854
947(define-key menu-bar-showhide-fringe-menu [left]
948 `(menu-item ,(purecopy "On the Left") menu-bar-showhide-fringe-menu-customize-left
949 :help ,(purecopy "Fringe only on the left side")
950 :visible (display-graphic-p)
951 :button (:radio . (equal fringe-mode '(nil . 0)))))
952
953(defun menu-bar-showhide-fringe-menu-customize-disable () 855(defun menu-bar-showhide-fringe-menu-customize-disable ()
954 "Do not display window fringes." 856 "Do not display window fringes."
955 (interactive) 857 (interactive)
956 (require 'fringe) 858 (require 'fringe)
957 (customize-set-variable 'fringe-mode 0)) 859 (customize-set-variable 'fringe-mode 0))
958 860
959(define-key menu-bar-showhide-fringe-menu [none] 861(defvar menu-bar-showhide-fringe-menu
960 `(menu-item ,(purecopy "None") menu-bar-showhide-fringe-menu-customize-disable 862 (let ((menu (make-sparse-keymap "Fringe")))
961 :help ,(purecopy "Turn off fringe") 863
962 :visible (display-graphic-p) 864 (define-key menu [showhide-fringe-ind]
963 :button (:radio . (eq fringe-mode 0)))) 865 `(menu-item ,(purecopy "Buffer Boundaries") ,menu-bar-showhide-fringe-ind-menu
964 866 :visible (display-graphic-p)
965(define-key menu-bar-showhide-menu [showhide-fringe] 867 :help ,(purecopy "Indicate buffer boundaries in fringe")))
966 `(menu-item ,(purecopy "Fringe") ,menu-bar-showhide-fringe-menu 868
967 :visible (display-graphic-p))) 869 (define-key menu [indicate-empty-lines]
968 870 (menu-bar-make-toggle toggle-indicate-empty-lines indicate-empty-lines
969(defvar menu-bar-showhide-scroll-bar-menu (make-sparse-keymap "Scroll-bar")) 871 "Empty Line Indicators"
970 872 "Indicating of empty lines %s"
971(define-key menu-bar-showhide-scroll-bar-menu [right] 873 "Indicate trailing empty lines in fringe, globally"))
972 `(menu-item ,(purecopy "On the Right") 874
973 menu-bar-right-scroll-bar 875 (define-key menu [customize]
974 :help ,(purecopy "Scroll-bar on the right side") 876 `(menu-item ,(purecopy "Customize Fringe") menu-bar-showhide-fringe-menu-customize
975 :visible (display-graphic-p) 877 :help ,(purecopy "Detailed customization of fringe")
976 :button (:radio . (eq (cdr (assq 'vertical-scroll-bars 878 :visible (display-graphic-p)))
977 (frame-parameters))) 'right)))) 879
880 (define-key menu [default]
881 `(menu-item ,(purecopy "Default") menu-bar-showhide-fringe-menu-customize-reset
882 :help ,(purecopy "Default width fringe on both left and right side")
883 :visible (display-graphic-p)
884 :button (:radio . (eq fringe-mode nil))))
885
886 (define-key menu [right]
887 `(menu-item ,(purecopy "On the Right") menu-bar-showhide-fringe-menu-customize-right
888 :help ,(purecopy "Fringe only on the right side")
889 :visible (display-graphic-p)
890 :button (:radio . (equal fringe-mode '(0 . nil)))))
891
892 (define-key menu [left]
893 `(menu-item ,(purecopy "On the Left") menu-bar-showhide-fringe-menu-customize-left
894 :help ,(purecopy "Fringe only on the left side")
895 :visible (display-graphic-p)
896 :button (:radio . (equal fringe-mode '(nil . 0)))))
897
898 (define-key menu [none]
899 `(menu-item ,(purecopy "None") menu-bar-showhide-fringe-menu-customize-disable
900 :help ,(purecopy "Turn off fringe")
901 :visible (display-graphic-p)
902 :button (:radio . (eq fringe-mode 0))))
903 menu))
904
978(defun menu-bar-right-scroll-bar () 905(defun menu-bar-right-scroll-bar ()
979 "Display scroll bars on the right of each window." 906 "Display scroll bars on the right of each window."
980 (interactive) 907 (interactive)
981 (customize-set-variable 'scroll-bar-mode 'right)) 908 (customize-set-variable 'scroll-bar-mode 'right))
982 909
983(define-key menu-bar-showhide-scroll-bar-menu [left]
984 `(menu-item ,(purecopy "On the Left")
985 menu-bar-left-scroll-bar
986 :help ,(purecopy "Scroll-bar on the left side")
987 :visible (display-graphic-p)
988 :button (:radio . (eq (cdr (assq 'vertical-scroll-bars
989 (frame-parameters))) 'left))))
990
991(defun menu-bar-left-scroll-bar () 910(defun menu-bar-left-scroll-bar ()
992 "Display scroll bars on the left of each window." 911 "Display scroll bars on the left of each window."
993 (interactive) 912 (interactive)
994 (customize-set-variable 'scroll-bar-mode 'left)) 913 (customize-set-variable 'scroll-bar-mode 'left))
995 914
996(define-key menu-bar-showhide-scroll-bar-menu [none]
997 `(menu-item ,(purecopy "None")
998 menu-bar-no-scroll-bar
999 :help ,(purecopy "Turn off scroll-bar")
1000 :visible (display-graphic-p)
1001 :button (:radio . (eq (cdr (assq 'vertical-scroll-bars
1002 (frame-parameters))) nil))))
1003
1004(defun menu-bar-no-scroll-bar () 915(defun menu-bar-no-scroll-bar ()
1005 "Turn off scroll bars." 916 "Turn off scroll bars."
1006 (interactive) 917 (interactive)
1007 (customize-set-variable 'scroll-bar-mode nil)) 918 (customize-set-variable 'scroll-bar-mode nil))
1008 919
1009(define-key menu-bar-showhide-menu [showhide-scroll-bar] 920(defvar menu-bar-showhide-scroll-bar-menu
1010 `(menu-item ,(purecopy "Scroll-bar") ,menu-bar-showhide-scroll-bar-menu 921 (let ((menu (make-sparse-keymap "Scroll-bar")))
1011 :visible (display-graphic-p))) 922
1012 923 (define-key menu [right]
1013(define-key menu-bar-showhide-menu [showhide-tooltip-mode] 924 `(menu-item ,(purecopy "On the Right")
1014 `(menu-item ,(purecopy "Tooltips") tooltip-mode 925 menu-bar-right-scroll-bar
1015 :help ,(purecopy "Turn tooltips on/off") 926 :help ,(purecopy "Scroll-bar on the right side")
1016 :visible (and (display-graphic-p) (fboundp 'x-show-tip)) 927 :visible (display-graphic-p)
1017 :button (:toggle . tooltip-mode))) 928 :button (:radio . (eq (cdr (assq 'vertical-scroll-bars
929 (frame-parameters))) 'right))))
930
931 (define-key menu [left]
932 `(menu-item ,(purecopy "On the Left")
933 menu-bar-left-scroll-bar
934 :help ,(purecopy "Scroll-bar on the left side")
935 :visible (display-graphic-p)
936 :button (:radio . (eq (cdr (assq 'vertical-scroll-bars
937 (frame-parameters))) 'left))))
938
939 (define-key menu [none]
940 `(menu-item ,(purecopy "None")
941 menu-bar-no-scroll-bar
942 :help ,(purecopy "Turn off scroll-bar")
943 :visible (display-graphic-p)
944 :button (:radio . (eq (cdr (assq 'vertical-scroll-bars
945 (frame-parameters))) nil))))
946 menu))
1018 947
1019(defun menu-bar-frame-for-menubar () 948(defun menu-bar-frame-for-menubar ()
1020 "Return the frame suitable for updating the menu bar." 949 "Return the frame suitable for updating the menu bar."
@@ -1027,14 +956,6 @@ mail status in mode line"))
1027 (and (numberp val) 956 (and (numberp val)
1028 (> val 0))) 957 (> val 0)))
1029 958
1030(define-key menu-bar-showhide-menu [menu-bar-mode]
1031 `(menu-item ,(purecopy "Menu-bar") toggle-menu-bar-mode-from-frame
1032 :help ,(purecopy "Turn menu-bar on/off")
1033 :button
1034 (:toggle . (menu-bar-positive-p
1035 (frame-parameter (menu-bar-frame-for-menubar)
1036 'menu-bar-lines)))))
1037
1038(defun menu-bar-set-tool-bar-position (position) 959(defun menu-bar-set-tool-bar-position (position)
1039 (customize-set-variable 'tool-bar-mode t) 960 (customize-set-variable 'tool-bar-mode t)
1040 (customize-set-variable 'tool-bar-position position)) 961 (customize-set-variable 'tool-bar-position position))
@@ -1059,163 +980,147 @@ mail status in mode line"))
1059 (interactive) 980 (interactive)
1060 (menu-bar-set-tool-bar-position 'bottom)) 981 (menu-bar-set-tool-bar-position 'bottom))
1061 982
1062(if (featurep 'move-toolbar) 983(when (featurep 'move-toolbar)
1063 (progn 984 (defvar menu-bar-showhide-tool-bar-menu
1064 (defvar menu-bar-showhide-tool-bar-menu (make-sparse-keymap "Tool-bar")) 985 (let ((menu (make-sparse-keymap "Tool-bar")))
1065 986
1066 (define-key menu-bar-showhide-tool-bar-menu [showhide-tool-bar-left] 987 (define-key menu [showhide-tool-bar-left]
1067 `(menu-item ,(purecopy "On the left") 988 `(menu-item ,(purecopy "On the left")
1068 menu-bar-showhide-tool-bar-menu-customize-enable-left 989 menu-bar-showhide-tool-bar-menu-customize-enable-left
1069 :help ,(purecopy "Tool-bar at the left side") 990 :help ,(purecopy "Tool-bar at the left side")
1070 :visible (display-graphic-p) 991 :visible (display-graphic-p)
1071 :button 992 :button
1072 (:radio . (and tool-bar-mode 993 (:radio . (and tool-bar-mode
1073 (eq (frame-parameter 994 (eq (frame-parameter
1074 (menu-bar-frame-for-menubar) 995 (menu-bar-frame-for-menubar)
1075 'tool-bar-position) 996 'tool-bar-position)
1076 'left))))) 997 'left)))))
1077 998
1078 (define-key menu-bar-showhide-tool-bar-menu [showhide-tool-bar-right] 999 (define-key menu [showhide-tool-bar-right]
1079 `(menu-item ,(purecopy "On the right") 1000 `(menu-item ,(purecopy "On the right")
1080 menu-bar-showhide-tool-bar-menu-customize-enable-right 1001 menu-bar-showhide-tool-bar-menu-customize-enable-right
1081 :help ,(purecopy "Tool-bar at the right side") 1002 :help ,(purecopy "Tool-bar at the right side")
1082 :visible (display-graphic-p) 1003 :visible (display-graphic-p)
1083 :button 1004 :button
1084 (:radio . (and tool-bar-mode 1005 (:radio . (and tool-bar-mode
1085 (eq (frame-parameter 1006 (eq (frame-parameter
1086 (menu-bar-frame-for-menubar) 1007 (menu-bar-frame-for-menubar)
1087 'tool-bar-position) 1008 'tool-bar-position)
1088 'right))))) 1009 'right)))))
1089 1010
1090 (define-key menu-bar-showhide-tool-bar-menu [showhide-tool-bar-bottom] 1011 (define-key menu [showhide-tool-bar-bottom]
1091 `(menu-item ,(purecopy "On the bottom") 1012 `(menu-item ,(purecopy "On the bottom")
1092 menu-bar-showhide-tool-bar-menu-customize-enable-bottom 1013 menu-bar-showhide-tool-bar-menu-customize-enable-bottom
1093 :help ,(purecopy "Tool-bar at the bottom") 1014 :help ,(purecopy "Tool-bar at the bottom")
1094 :visible (display-graphic-p) 1015 :visible (display-graphic-p)
1095 :button 1016 :button
1096 (:radio . (and tool-bar-mode 1017 (:radio . (and tool-bar-mode
1097 (eq (frame-parameter 1018 (eq (frame-parameter
1098 (menu-bar-frame-for-menubar) 1019 (menu-bar-frame-for-menubar)
1099 'tool-bar-position) 1020 'tool-bar-position)
1100 'bottom))))) 1021 'bottom)))))
1101 1022
1102 (define-key menu-bar-showhide-tool-bar-menu [showhide-tool-bar-top] 1023 (define-key menu [showhide-tool-bar-top]
1103 `(menu-item ,(purecopy "On the top") 1024 `(menu-item ,(purecopy "On the top")
1104 menu-bar-showhide-tool-bar-menu-customize-enable-top 1025 menu-bar-showhide-tool-bar-menu-customize-enable-top
1105 :help ,(purecopy "Tool-bar at the top") 1026 :help ,(purecopy "Tool-bar at the top")
1106 :visible (display-graphic-p) 1027 :visible (display-graphic-p)
1107 :button 1028 :button
1108 (:radio . (and tool-bar-mode 1029 (:radio . (and tool-bar-mode
1109 (eq (frame-parameter 1030 (eq (frame-parameter
1110 (menu-bar-frame-for-menubar) 1031 (menu-bar-frame-for-menubar)
1111 'tool-bar-position) 1032 'tool-bar-position)
1112 'top))))) 1033 'top)))))
1113 1034
1114 (define-key menu-bar-showhide-tool-bar-menu [showhide-tool-bar-none] 1035 (define-key menu [showhide-tool-bar-none]
1115 `(menu-item ,(purecopy "None") 1036 `(menu-item ,(purecopy "None")
1116 menu-bar-showhide-tool-bar-menu-customize-disable 1037 menu-bar-showhide-tool-bar-menu-customize-disable
1117 :help ,(purecopy "Turn tool-bar off") 1038 :help ,(purecopy "Turn tool-bar off")
1118 :visible (display-graphic-p) 1039 :visible (display-graphic-p)
1119 :button (:radio . (eq tool-bar-mode nil)))) 1040 :button (:radio . (eq tool-bar-mode nil))))
1120 1041 menu)))
1121 (define-key menu-bar-showhide-menu [showhide-tool-bar] 1042
1122 `(menu-item ,(purecopy "Tool-bar") ,menu-bar-showhide-tool-bar-menu 1043(defvar menu-bar-showhide-menu
1123 :visible (display-graphic-p))) 1044 (let ((menu (make-sparse-keymap "Show/Hide")))
1124 1045
1125 ) 1046 (define-key menu [column-number-mode]
1126 ;; else not tool bar that can move. 1047 (menu-bar-make-mm-toggle column-number-mode
1127 (define-key menu-bar-showhide-menu [showhide-tool-bar] 1048 "Column Numbers"
1128 `(menu-item ,(purecopy "Tool-bar") toggle-tool-bar-mode-from-frame 1049 "Show the current column number in the mode line"))
1129 :help ,(purecopy "Turn tool-bar on/off") 1050
1130 :visible (display-graphic-p) 1051 (define-key menu [line-number-mode]
1131 :button 1052 (menu-bar-make-mm-toggle line-number-mode
1132 (:toggle . (menu-bar-positive-p 1053 "Line Numbers"
1133 (frame-parameter (menu-bar-frame-for-menubar) 1054 "Show the current line number in the mode line"))
1134 'tool-bar-lines)))))) 1055
1135 1056 (define-key menu [size-indication-mode]
1136(define-key menu-bar-options-menu [showhide] 1057 (menu-bar-make-mm-toggle size-indication-mode
1137 `(menu-item ,(purecopy "Show/Hide") ,menu-bar-showhide-menu)) 1058 "Size Indication"
1138 1059 "Show the size of the buffer in the mode line"))
1139(define-key menu-bar-options-menu [showhide-separator] 1060
1140 menu-bar-separator) 1061 (define-key menu [linecolumn-separator]
1141 1062 menu-bar-separator)
1142(define-key menu-bar-options-menu [mule] 1063
1143 ;; It is better not to use backquote here, 1064 (define-key menu [showhide-battery]
1144 ;; because that makes a bootstrapping problem 1065 (menu-bar-make-mm-toggle display-battery-mode
1145 ;; if you need to recompile all the Lisp files using interpreted code. 1066 "Battery Status"
1146 `(menu-item ,(purecopy "Multilingual Environment") ,mule-menu-keymap 1067 "Display battery status information in mode line"))
1147;; Most of the MULE menu actually does make sense in unibyte mode, 1068
1148;; e.g. language selection. 1069 (define-key menu [showhide-date-time]
1149;;; :visible '(default-value 'enable-multibyte-characters) 1070 (menu-bar-make-mm-toggle display-time-mode
1150 )) 1071 "Time, Load and Mail"
1151;(setq menu-bar-final-items (cons 'mule menu-bar-final-items)) 1072 "Display time, system load averages and \
1152;(define-key menu-bar-options-menu [preferences] 1073mail status in mode line"))
1153; `(menu-item ,(purecopy "Preferences") ,menu-bar-preferences-menu 1074
1154; :help ,(purecopy "Toggle important global options"))) 1075 (define-key menu [datetime-separator]
1155 1076 menu-bar-separator)
1156(define-key menu-bar-options-menu [mule-separator] 1077
1157 menu-bar-separator) 1078 (define-key menu [showhide-speedbar]
1158 1079 `(menu-item ,(purecopy "Speedbar") speedbar-frame-mode
1159(define-key menu-bar-options-menu [debug-on-quit] 1080 :help ,(purecopy "Display a Speedbar quick-navigation frame")
1160 (menu-bar-make-toggle toggle-debug-on-quit debug-on-quit 1081 :button (:toggle
1161 "Enter Debugger on Quit/C-g" "Debug on Quit %s" 1082 . (and (boundp 'speedbar-frame)
1162 "Enter Lisp debugger when C-g is pressed")) 1083 (frame-live-p (symbol-value 'speedbar-frame))
1163(define-key menu-bar-options-menu [debug-on-error] 1084 (frame-visible-p
1164 (menu-bar-make-toggle toggle-debug-on-error debug-on-error 1085 (symbol-value 'speedbar-frame))))))
1165 "Enter Debugger on Error" "Debug on Error %s" 1086
1166 "Enter Lisp debugger when an error is signaled")) 1087 (define-key menu [showhide-fringe]
1167(define-key menu-bar-options-menu [debugger-separator] 1088 `(menu-item ,(purecopy "Fringe") ,menu-bar-showhide-fringe-menu
1168 menu-bar-separator) 1089 :visible (display-graphic-p)))
1169 1090
1170(define-key menu-bar-options-menu [blink-cursor-mode] 1091 (define-key menu [showhide-scroll-bar]
1171 (menu-bar-make-mm-toggle blink-cursor-mode 1092 `(menu-item ,(purecopy "Scroll-bar") ,menu-bar-showhide-scroll-bar-menu
1172 "Blinking Cursor" 1093 :visible (display-graphic-p)))
1173 "Whether the cursor blinks (Blink Cursor mode)")) 1094
1174(define-key menu-bar-options-menu [cursor-separator] 1095 (define-key menu [showhide-tooltip-mode]
1175 menu-bar-separator) 1096 `(menu-item ,(purecopy "Tooltips") tooltip-mode
1176 1097 :help ,(purecopy "Turn tooltips on/off")
1177(define-key menu-bar-options-menu [save-place] 1098 :visible (and (display-graphic-p) (fboundp 'x-show-tip))
1178 (menu-bar-make-toggle toggle-save-place-globally save-place 1099 :button (:toggle . tooltip-mode)))
1179 "Save Place in Files between Sessions" 1100
1180 "Saving place in files %s" 1101 (define-key menu [menu-bar-mode]
1181 "Visit files of previous session when restarting Emacs" 1102 `(menu-item ,(purecopy "Menu-bar") toggle-menu-bar-mode-from-frame
1182 (require 'saveplace) 1103 :help ,(purecopy "Turn menu-bar on/off")
1183 ;; Do it by name, to avoid a free-variable 1104 :button
1184 ;; warning during byte compilation. 1105 (:toggle . (menu-bar-positive-p
1185 (set-default 1106 (frame-parameter (menu-bar-frame-for-menubar)
1186 'save-place (not (symbol-value 'save-place))))) 1107 'menu-bar-lines)))))
1187 1108
1188(define-key menu-bar-options-menu [uniquify] 1109 (if (and (boundp 'menu-bar-showhide-tool-bar-menu)
1189 (menu-bar-make-toggle toggle-uniquify-buffer-names uniquify-buffer-name-style 1110 (keymapp menu-bar-showhide-tool-bar-menu))
1190 "Use Directory Names in Buffer Names" 1111 (define-key menu [showhide-tool-bar]
1191 "Directory name in buffer names (uniquify) %s" 1112 `(menu-item ,(purecopy "Tool-bar") ,menu-bar-showhide-tool-bar-menu
1192 "Uniquify buffer names by adding parent directory names" 1113 :visible (display-graphic-p)))
1193 (require 'uniquify) 1114 ;; else not tool bar that can move.
1194 (setq uniquify-buffer-name-style 1115 (define-key menu [showhide-tool-bar]
1195 (if (not uniquify-buffer-name-style) 1116 `(menu-item ,(purecopy "Tool-bar") toggle-tool-bar-mode-from-frame
1196 'forward)))) 1117 :help ,(purecopy "Turn tool-bar on/off")
1197 1118 :visible (display-graphic-p)
1198(define-key menu-bar-options-menu [edit-options-separator] 1119 :button
1199 menu-bar-separator) 1120 (:toggle . (menu-bar-positive-p
1200(define-key menu-bar-options-menu [cua-mode] 1121 (frame-parameter (menu-bar-frame-for-menubar)
1201 (menu-bar-make-mm-toggle cua-mode 1122 'tool-bar-lines))))))
1202 "C-x/C-c/C-v Cut and Paste (CUA)" 1123 menu))
1203 "Use C-z/C-x/C-c/C-v keys for undo/cut/copy/paste"
1204 (:visible (or (not (boundp 'cua-enable-cua-keys))
1205 cua-enable-cua-keys))))
1206
1207(define-key menu-bar-options-menu [cua-emulation-mode]
1208 (menu-bar-make-mm-toggle cua-mode
1209 "Shift movement mark region (CUA)"
1210 "Use shifted movement keys to set and extend the region"
1211 (:visible (and (boundp 'cua-enable-cua-keys)
1212 (not cua-enable-cua-keys)))))
1213
1214(define-key menu-bar-options-menu [case-fold-search]
1215 (menu-bar-make-toggle toggle-case-fold-search case-fold-search
1216 "Case-Insensitive Search"
1217 "Case-Insensitive Search %s"
1218 "Ignore letter-case in search commands"))
1219 1124
1220(defun menu-bar-text-mode-auto-fill () 1125(defun menu-bar-text-mode-auto-fill ()
1221 (interactive) 1126 (interactive)
@@ -1225,71 +1130,187 @@ mail status in mode line"))
1225 ;; -- Per Abrahamsen <abraham@dina.kvl.dk> 2002-02-11. 1130 ;; -- Per Abrahamsen <abraham@dina.kvl.dk> 2002-02-11.
1226 (customize-mark-as-set 'text-mode-hook)) 1131 (customize-mark-as-set 'text-mode-hook))
1227 1132
1228(define-key menu-bar-options-menu [auto-fill-mode] 1133
1229 `(menu-item ,(purecopy "Auto Fill in Text Modes") 1134(defvar menu-bar-line-wrapping-menu
1230 menu-bar-text-mode-auto-fill 1135 (let ((menu (make-sparse-keymap "Line Wrapping")))
1231 :help ,(purecopy "Automatically fill text while typing (Auto Fill mode)") 1136
1232 :button (:toggle . (if (listp text-mode-hook) 1137 (define-key menu [word-wrap]
1233 (member 'turn-on-auto-fill text-mode-hook) 1138 `(menu-item ,(purecopy "Word Wrap (Visual Line mode)")
1234 (eq 'turn-on-auto-fill text-mode-hook))))) 1139 (lambda ()
1235 1140 (interactive)
1236 1141 (unless visual-line-mode
1237(defvar menu-bar-line-wrapping-menu (make-sparse-keymap "Line Wrapping")) 1142 (visual-line-mode 1))
1238 1143 (message ,(purecopy "Visual-Line mode enabled")))
1239(define-key menu-bar-line-wrapping-menu [word-wrap] 1144 :help ,(purecopy "Wrap long lines at word boundaries")
1240 `(menu-item ,(purecopy "Word Wrap (Visual Line mode)") 1145 :button (:radio . (and (null truncate-lines)
1241 (lambda () 1146 (not (truncated-partial-width-window-p))
1242 (interactive) 1147 word-wrap))
1243 (unless visual-line-mode 1148 :visible (menu-bar-menu-frame-live-and-visible-p)))
1244 (visual-line-mode 1)) 1149
1245 (message ,(purecopy "Visual-Line mode enabled"))) 1150 (define-key menu [truncate]
1246 :help ,(purecopy "Wrap long lines at word boundaries") 1151 `(menu-item ,(purecopy "Truncate Long Lines")
1247 :button (:radio . (and (null truncate-lines) 1152 (lambda ()
1248 (not (truncated-partial-width-window-p)) 1153 (interactive)
1249 word-wrap)) 1154 (if visual-line-mode (visual-line-mode 0))
1250 :visible (menu-bar-menu-frame-live-and-visible-p))) 1155 (setq word-wrap nil)
1251 1156 (toggle-truncate-lines 1))
1252(define-key menu-bar-line-wrapping-menu [truncate] 1157 :help ,(purecopy "Truncate long lines at window edge")
1253 `(menu-item ,(purecopy "Truncate Long Lines") 1158 :button (:radio . (or truncate-lines
1254 (lambda () 1159 (truncated-partial-width-window-p)))
1255 (interactive) 1160 :visible (menu-bar-menu-frame-live-and-visible-p)
1256 (if visual-line-mode (visual-line-mode 0)) 1161 :enable (not (truncated-partial-width-window-p))))
1257 (setq word-wrap nil) 1162
1258 (toggle-truncate-lines 1)) 1163 (define-key menu [window-wrap]
1259 :help ,(purecopy "Truncate long lines at window edge") 1164 `(menu-item ,(purecopy "Wrap at Window Edge")
1260 :button (:radio . (or truncate-lines 1165 (lambda () (interactive)
1261 (truncated-partial-width-window-p))) 1166 (if visual-line-mode (visual-line-mode 0))
1262 :visible (menu-bar-menu-frame-live-and-visible-p) 1167 (setq word-wrap nil)
1263 :enable (not (truncated-partial-width-window-p)))) 1168 (if truncate-lines (toggle-truncate-lines -1)))
1264 1169 :help ,(purecopy "Wrap long lines at window edge")
1265(define-key menu-bar-line-wrapping-menu [window-wrap] 1170 :button (:radio . (and (null truncate-lines)
1266 `(menu-item ,(purecopy "Wrap at Window Edge") 1171 (not (truncated-partial-width-window-p))
1267 (lambda () (interactive) 1172 (not word-wrap)))
1268 (if visual-line-mode (visual-line-mode 0)) 1173 :visible (menu-bar-menu-frame-live-and-visible-p)
1269 (setq word-wrap nil) 1174 :enable (not (truncated-partial-width-window-p))))
1270 (if truncate-lines (toggle-truncate-lines -1))) 1175 menu))
1271 :help ,(purecopy "Wrap long lines at window edge") 1176
1272 :button (:radio . (and (null truncate-lines) 1177(defvar menu-bar-options-menu
1273 (not (truncated-partial-width-window-p)) 1178 (let ((menu (make-sparse-keymap "Options")))
1274 (not word-wrap))) 1179 (define-key menu [customize]
1275 :visible (menu-bar-menu-frame-live-and-visible-p) 1180 `(menu-item ,(purecopy "Customize Emacs") ,menu-bar-custom-menu))
1276 :enable (not (truncated-partial-width-window-p)))) 1181
1277 1182 (define-key menu [package]
1278(define-key menu-bar-options-menu [line-wrapping] 1183 '(menu-item "Manage Emacs Packages" package-list-packages
1279 `(menu-item ,(purecopy "Line Wrapping in this Buffer") ,menu-bar-line-wrapping-menu)) 1184 :help "Install or uninstall additional Emacs packages"))
1280 1185
1281 1186 (define-key menu [save]
1282(define-key menu-bar-options-menu [highlight-separator] 1187 `(menu-item ,(purecopy "Save Options") menu-bar-options-save
1283 menu-bar-separator) 1188 :help ,(purecopy "Save options set from the menu above")))
1284(define-key menu-bar-options-menu [highlight-paren-mode] 1189
1285 (menu-bar-make-mm-toggle show-paren-mode 1190 (define-key menu [custom-separator]
1286 "Paren Match Highlighting" 1191 menu-bar-separator)
1287 "Highlight matching/mismatched parentheses at cursor (Show Paren mode)")) 1192
1288(define-key menu-bar-options-menu [transient-mark-mode] 1193 (define-key menu [menu-set-font]
1289 (menu-bar-make-mm-toggle transient-mark-mode 1194 `(menu-item ,(purecopy "Set Default Font...") menu-set-font
1290 "Active Region Highlighting" 1195 :visible (display-multi-font-p)
1291 "Make text in active region stand out in color (Transient Mark mode)" 1196 :help ,(purecopy "Select a default font")))
1292 (:enable (not cua-mode)))) 1197
1198 (if (featurep 'system-font-setting)
1199 (define-key menu [menu-system-font]
1200 (menu-bar-make-toggle
1201 toggle-use-system-font font-use-system-font
1202 "Use system font"
1203 "Use system font: %s"
1204 "Use the monospaced font defined by the system")))
1205
1206 (define-key menu [showhide]
1207 `(menu-item ,(purecopy "Show/Hide") ,menu-bar-showhide-menu))
1208
1209 (define-key menu [showhide-separator]
1210 menu-bar-separator)
1211
1212 (define-key menu [mule]
1213 ;; It is better not to use backquote here,
1214 ;; because that makes a bootstrapping problem
1215 ;; if you need to recompile all the Lisp files using interpreted code.
1216 `(menu-item ,(purecopy "Multilingual Environment") ,mule-menu-keymap
1217 ;; Most of the MULE menu actually does make sense in
1218 ;; unibyte mode, e.g. language selection.
1219 ;; :visible '(default-value 'enable-multibyte-characters)
1220 ))
1221 ;;(setq menu-bar-final-items (cons 'mule menu-bar-final-items))
1222 ;;(define-key menu [preferences]
1223 ;; `(menu-item ,(purecopy "Preferences") ,menu-bar-preferences-menu
1224 ;; :help ,(purecopy "Toggle important global options")))
1225
1226 (define-key menu [mule-separator]
1227 menu-bar-separator)
1228
1229 (define-key menu [debug-on-quit]
1230 (menu-bar-make-toggle toggle-debug-on-quit debug-on-quit
1231 "Enter Debugger on Quit/C-g" "Debug on Quit %s"
1232 "Enter Lisp debugger when C-g is pressed"))
1233 (define-key menu [debug-on-error]
1234 (menu-bar-make-toggle toggle-debug-on-error debug-on-error
1235 "Enter Debugger on Error" "Debug on Error %s"
1236 "Enter Lisp debugger when an error is signaled"))
1237 (define-key menu [debugger-separator]
1238 menu-bar-separator)
1239
1240 (define-key menu [blink-cursor-mode]
1241 (menu-bar-make-mm-toggle blink-cursor-mode
1242 "Blinking Cursor"
1243 "Whether the cursor blinks (Blink Cursor mode)"))
1244 (define-key menu [cursor-separator]
1245 menu-bar-separator)
1246
1247 (define-key menu [save-place]
1248 (menu-bar-make-toggle toggle-save-place-globally save-place
1249 "Save Place in Files between Sessions"
1250 "Saving place in files %s"
1251 "Visit files of previous session when restarting Emacs"
1252 (require 'saveplace)
1253 ;; Do it by name, to avoid a free-variable
1254 ;; warning during byte compilation.
1255 (set-default
1256 'save-place (not (symbol-value 'save-place)))))
1257
1258 (define-key menu [uniquify]
1259 (menu-bar-make-toggle toggle-uniquify-buffer-names uniquify-buffer-name-style
1260 "Use Directory Names in Buffer Names"
1261 "Directory name in buffer names (uniquify) %s"
1262 "Uniquify buffer names by adding parent directory names"
1263 (require 'uniquify)
1264 (setq uniquify-buffer-name-style
1265 (if (not uniquify-buffer-name-style)
1266 'forward))))
1267
1268 (define-key menu [edit-options-separator]
1269 menu-bar-separator)
1270 (define-key menu [cua-mode]
1271 (menu-bar-make-mm-toggle cua-mode
1272 "C-x/C-c/C-v Cut and Paste (CUA)"
1273 "Use C-z/C-x/C-c/C-v keys for undo/cut/copy/paste"
1274 (:visible (or (not (boundp 'cua-enable-cua-keys))
1275 cua-enable-cua-keys))))
1276
1277 (define-key menu [cua-emulation-mode]
1278 (menu-bar-make-mm-toggle cua-mode
1279 "Shift movement mark region (CUA)"
1280 "Use shifted movement keys to set and extend the region"
1281 (:visible (and (boundp 'cua-enable-cua-keys)
1282 (not cua-enable-cua-keys)))))
1283
1284 (define-key menu [case-fold-search]
1285 (menu-bar-make-toggle toggle-case-fold-search case-fold-search
1286 "Case-Insensitive Search"
1287 "Case-Insensitive Search %s"
1288 "Ignore letter-case in search commands"))
1289
1290 (define-key menu [auto-fill-mode]
1291 `(menu-item ,(purecopy "Auto Fill in Text Modes")
1292 menu-bar-text-mode-auto-fill
1293 :help ,(purecopy "Automatically fill text while typing (Auto Fill mode)")
1294 :button (:toggle . (if (listp text-mode-hook)
1295 (member 'turn-on-auto-fill text-mode-hook)
1296 (eq 'turn-on-auto-fill text-mode-hook)))))
1297
1298 (define-key menu [line-wrapping]
1299 `(menu-item ,(purecopy "Line Wrapping in this Buffer") ,menu-bar-line-wrapping-menu))
1300
1301
1302 (define-key menu [highlight-separator]
1303 menu-bar-separator)
1304 (define-key menu [highlight-paren-mode]
1305 (menu-bar-make-mm-toggle show-paren-mode
1306 "Paren Match Highlighting"
1307 "Highlight matching/mismatched parentheses at cursor (Show Paren mode)"))
1308 (define-key menu [transient-mark-mode]
1309 (menu-bar-make-mm-toggle transient-mark-mode
1310 "Active Region Highlighting"
1311 "Make text in active region stand out in color (Transient Mark mode)"
1312 (:enable (not cua-mode))))
1313 menu))
1293 1314
1294 1315
1295;; The "Tools" menu items 1316;; The "Tools" menu items
@@ -1314,270 +1335,276 @@ mail status in mode line"))
1314 (known (assq read-mail-command known-rmail-commands))) 1335 (known (assq read-mail-command known-rmail-commands)))
1315 (if known (cdr known) (symbol-name read-mail-command)))) 1336 (if known (cdr known) (symbol-name read-mail-command))))
1316 1337
1317(defvar menu-bar-games-menu (make-sparse-keymap "Games")) 1338(defvar menu-bar-games-menu
1318 1339 (let ((menu (make-sparse-keymap "Games")))
1319(define-key menu-bar-tools-menu [games] 1340
1320 `(menu-item ,(purecopy "Games") ,menu-bar-games-menu)) 1341 (define-key menu [zone]
1321 1342 `(menu-item ,(purecopy "Zone Out") zone
1322(define-key menu-bar-tools-menu [separator-games] 1343 :help ,(purecopy "Play tricks with Emacs display when Emacs is idle")))
1323 menu-bar-separator) 1344 (define-key menu [tetris]
1324 1345 `(menu-item ,(purecopy "Tetris") tetris
1325(define-key menu-bar-games-menu [zone] 1346 :help ,(purecopy "Falling blocks game")))
1326 `(menu-item ,(purecopy "Zone Out") zone 1347 (define-key menu [solitaire]
1327 :help ,(purecopy "Play tricks with Emacs display when Emacs is idle"))) 1348 `(menu-item ,(purecopy "Solitaire") solitaire
1328(define-key menu-bar-games-menu [tetris] 1349 :help ,(purecopy "Get rid of all the stones")))
1329 `(menu-item ,(purecopy "Tetris") tetris 1350 (define-key menu [snake]
1330 :help ,(purecopy "Falling blocks game"))) 1351 `(menu-item ,(purecopy "Snake") snake
1331(define-key menu-bar-games-menu [solitaire] 1352 :help ,(purecopy "Move snake around avoiding collisions")))
1332 `(menu-item ,(purecopy "Solitaire") solitaire 1353 (define-key menu [pong]
1333 :help ,(purecopy "Get rid of all the stones"))) 1354 `(menu-item ,(purecopy "Pong") pong
1334(define-key menu-bar-games-menu [snake] 1355 :help ,(purecopy "Bounce the ball to your opponent")))
1335 `(menu-item ,(purecopy "Snake") snake 1356 (define-key menu [mult]
1336 :help ,(purecopy "Move snake around avoiding collisions"))) 1357 `(menu-item ,(purecopy "Multiplication Puzzle") mpuz
1337(define-key menu-bar-games-menu [pong] 1358 :help ,(purecopy "Exercise brain with multiplication")))
1338 `(menu-item ,(purecopy "Pong") pong 1359 (define-key menu [life]
1339 :help ,(purecopy "Bounce the ball to your opponent"))) 1360 `(menu-item ,(purecopy "Life") life
1340(define-key menu-bar-games-menu [mult] 1361 :help ,(purecopy "Watch how John Conway's cellular automaton evolves")))
1341 `(menu-item ,(purecopy "Multiplication Puzzle") mpuz 1362 (define-key menu [land]
1342 :help ,(purecopy "Exercise brain with multiplication"))) 1363 `(menu-item ,(purecopy "Landmark") landmark
1343(define-key menu-bar-games-menu [life] 1364 :help ,(purecopy "Watch a neural-network robot learn landmarks")))
1344 `(menu-item ,(purecopy "Life") life 1365 (define-key menu [hanoi]
1345 :help ,(purecopy "Watch how John Conway's cellular automaton evolves"))) 1366 `(menu-item ,(purecopy "Towers of Hanoi") hanoi
1346(define-key menu-bar-games-menu [land] 1367 :help ,(purecopy "Watch Towers-of-Hanoi puzzle solved by Emacs")))
1347 `(menu-item ,(purecopy "Landmark") landmark 1368 (define-key menu [gomoku]
1348 :help ,(purecopy "Watch a neural-network robot learn landmarks"))) 1369 `(menu-item ,(purecopy "Gomoku") gomoku
1349(define-key menu-bar-games-menu [hanoi] 1370 :help ,(purecopy "Mark 5 contiguous squares (like tic-tac-toe)")))
1350 `(menu-item ,(purecopy "Towers of Hanoi") hanoi 1371 (define-key menu [bubbles]
1351 :help ,(purecopy "Watch Towers-of-Hanoi puzzle solved by Emacs"))) 1372 `(menu-item ,(purecopy "Bubbles") bubbles
1352(define-key menu-bar-games-menu [gomoku] 1373 :help ,(purecopy "Remove all bubbles using the fewest moves")))
1353 `(menu-item ,(purecopy "Gomoku") gomoku 1374 (define-key menu [black-box]
1354 :help ,(purecopy "Mark 5 contiguous squares (like tic-tac-toe)"))) 1375 `(menu-item ,(purecopy "Blackbox") blackbox
1355(define-key menu-bar-games-menu [bubbles] 1376 :help ,(purecopy "Find balls in a black box by shooting rays")))
1356 `(menu-item ,(purecopy "Bubbles") bubbles 1377 (define-key menu [adventure]
1357 :help ,(purecopy "Remove all bubbles using the fewest moves"))) 1378 `(menu-item ,(purecopy "Adventure") dunnet
1358(define-key menu-bar-games-menu [black-box] 1379 :help ,(purecopy "Dunnet, a text Adventure game for Emacs")))
1359 `(menu-item ,(purecopy "Blackbox") blackbox 1380 (define-key menu [5x5]
1360 :help ,(purecopy "Find balls in a black box by shooting rays"))) 1381 `(menu-item ,(purecopy "5x5") 5x5
1361(define-key menu-bar-games-menu [adventure] 1382 :help ,(purecopy "Fill in all the squares on a 5x5 board")))
1362 `(menu-item ,(purecopy "Adventure") dunnet 1383 menu))
1363 :help ,(purecopy "Dunnet, a text Adventure game for Emacs")))
1364(define-key menu-bar-games-menu [5x5]
1365 `(menu-item ,(purecopy "5x5") 5x5
1366 :help ,(purecopy "Fill in all the squares on a 5x5 board")))
1367 1384
1368(defvar menu-bar-encryption-decryption-menu 1385(defvar menu-bar-encryption-decryption-menu
1369 (make-sparse-keymap "Encryption/Decryption")) 1386 (let ((menu (make-sparse-keymap "Encryption/Decryption")))
1370 1387 (define-key menu [insert-keys]
1371(define-key menu-bar-tools-menu [encryption-decryption] 1388 `(menu-item ,(purecopy "Insert Keys") epa-insert-keys
1372 `(menu-item ,(purecopy "Encryption/Decryption") ,menu-bar-encryption-decryption-menu)) 1389 :help ,(purecopy "Insert public keys after the current point")))
1373 1390
1374(define-key menu-bar-tools-menu [separator-encryption-decryption] 1391 (define-key menu [export-keys]
1375 menu-bar-separator) 1392 `(menu-item ,(purecopy "Export Keys") epa-export-keys
1376 1393 :help ,(purecopy "Export public keys to a file")))
1377(define-key menu-bar-encryption-decryption-menu [insert-keys] 1394
1378 `(menu-item ,(purecopy "Insert Keys") epa-insert-keys 1395 (define-key menu [import-keys-region]
1379 :help ,(purecopy "Insert public keys after the current point"))) 1396 `(menu-item ,(purecopy "Import Keys from Region") epa-import-keys-region
1380 1397 :help ,(purecopy "Import public keys from the current region")))
1381(define-key menu-bar-encryption-decryption-menu [export-keys] 1398
1382 `(menu-item ,(purecopy "Export Keys") epa-export-keys 1399 (define-key menu [import-keys]
1383 :help ,(purecopy "Export public keys to a file"))) 1400 `(menu-item ,(purecopy "Import Keys from File...") epa-import-keys
1384 1401 :help ,(purecopy "Import public keys from a file")))
1385(define-key menu-bar-encryption-decryption-menu [import-keys-region] 1402
1386 `(menu-item ,(purecopy "Import Keys from Region") epa-import-keys-region 1403 (define-key menu [list-keys]
1387 :help ,(purecopy "Import public keys from the current region"))) 1404 `(menu-item ,(purecopy "List Keys") epa-list-keys
1388 1405 :help ,(purecopy "Browse your public keyring")))
1389(define-key menu-bar-encryption-decryption-menu [import-keys] 1406
1390 `(menu-item ,(purecopy "Import Keys from File...") epa-import-keys 1407 (define-key menu [separator-keys]
1391 :help ,(purecopy "Import public keys from a file"))) 1408 menu-bar-separator)
1392 1409
1393(define-key menu-bar-encryption-decryption-menu [list-keys] 1410 (define-key menu [sign-region]
1394 `(menu-item ,(purecopy "List Keys") epa-list-keys 1411 `(menu-item ,(purecopy "Sign Region") epa-sign-region
1395 :help ,(purecopy "Browse your public keyring"))) 1412 :help ,(purecopy "Create digital signature of the current region")))
1396 1413
1397(define-key menu-bar-encryption-decryption-menu [separator-keys] 1414 (define-key menu [verify-region]
1398 menu-bar-separator) 1415 `(menu-item ,(purecopy "Verify Region") epa-verify-region
1399 1416 :help ,(purecopy "Verify digital signature of the current region")))
1400(define-key menu-bar-encryption-decryption-menu [sign-region] 1417
1401 `(menu-item ,(purecopy "Sign Region") epa-sign-region 1418 (define-key menu [encrypt-region]
1402 :help ,(purecopy "Create digital signature of the current region"))) 1419 `(menu-item ,(purecopy "Encrypt Region") epa-encrypt-region
1403 1420 :help ,(purecopy "Encrypt the current region")))
1404(define-key menu-bar-encryption-decryption-menu [verify-region] 1421
1405 `(menu-item ,(purecopy "Verify Region") epa-verify-region 1422 (define-key menu [decrypt-region]
1406 :help ,(purecopy "Verify digital signature of the current region"))) 1423 `(menu-item ,(purecopy "Decrypt Region") epa-decrypt-region
1407 1424 :help ,(purecopy "Decrypt the current region")))
1408(define-key menu-bar-encryption-decryption-menu [encrypt-region] 1425
1409 `(menu-item ,(purecopy "Encrypt Region") epa-encrypt-region 1426 (define-key menu [separator-file]
1410 :help ,(purecopy "Encrypt the current region"))) 1427 menu-bar-separator)
1411 1428
1412(define-key menu-bar-encryption-decryption-menu [decrypt-region] 1429 (define-key menu [sign-file]
1413 `(menu-item ,(purecopy "Decrypt Region") epa-decrypt-region 1430 `(menu-item ,(purecopy "Sign File...") epa-sign-file
1414 :help ,(purecopy "Decrypt the current region"))) 1431 :help ,(purecopy "Create digital signature of a file")))
1415 1432
1416(define-key menu-bar-encryption-decryption-menu [separator-file] 1433 (define-key menu [verify-file]
1417 menu-bar-separator) 1434 `(menu-item ,(purecopy "Verify File...") epa-verify-file
1418 1435 :help ,(purecopy "Verify digital signature of a file")))
1419(define-key menu-bar-encryption-decryption-menu [sign-file] 1436
1420 `(menu-item ,(purecopy "Sign File...") epa-sign-file 1437 (define-key menu [encrypt-file]
1421 :help ,(purecopy "Create digital signature of a file"))) 1438 `(menu-item ,(purecopy "Encrypt File...") epa-encrypt-file
1422 1439 :help ,(purecopy "Encrypt a file")))
1423(define-key menu-bar-encryption-decryption-menu [verify-file] 1440
1424 `(menu-item ,(purecopy "Verify File...") epa-verify-file 1441 (define-key menu [decrypt-file]
1425 :help ,(purecopy "Verify digital signature of a file"))) 1442 `(menu-item ,(purecopy "Decrypt File...") epa-decrypt-file
1426 1443 :help ,(purecopy "Decrypt a file")))
1427(define-key menu-bar-encryption-decryption-menu [encrypt-file] 1444
1428 `(menu-item ,(purecopy "Encrypt File...") epa-encrypt-file 1445 menu))
1429 :help ,(purecopy "Encrypt a file")))
1430
1431(define-key menu-bar-encryption-decryption-menu [decrypt-file]
1432 `(menu-item ,(purecopy "Decrypt File...") epa-decrypt-file
1433 :help ,(purecopy "Decrypt a file")))
1434
1435(define-key menu-bar-tools-menu [simple-calculator]
1436 `(menu-item ,(purecopy "Simple Calculator") calculator
1437 :help ,(purecopy "Invoke the Emacs built-in quick calculator")))
1438(define-key menu-bar-tools-menu [calc]
1439 `(menu-item ,(purecopy "Programmable Calculator") calc
1440 :help ,(purecopy "Invoke the Emacs built-in full scientific calculator")))
1441(define-key menu-bar-tools-menu [calendar]
1442 `(menu-item ,(purecopy "Calendar") calendar
1443 :help ,(purecopy "Invoke the Emacs built-in calendar")))
1444
1445(define-key menu-bar-tools-menu [separator-net]
1446 menu-bar-separator)
1447
1448(define-key menu-bar-tools-menu [directory-search]
1449 `(menu-item ,(purecopy "Directory Search") eudc-tools-menu))
1450(define-key menu-bar-tools-menu [compose-mail]
1451 `(menu-item (format "Send Mail (with %s)" (send-mail-item-name)) compose-mail
1452 :visible (and mail-user-agent (not (eq mail-user-agent 'ignore)))
1453 :help ,(purecopy "Send a mail message")))
1454(define-key menu-bar-tools-menu [rmail]
1455 `(menu-item (format "Read Mail (with %s)" (read-mail-item-name))
1456 menu-bar-read-mail
1457 :visible (and read-mail-command
1458 (not (eq read-mail-command 'ignore)))
1459 :help ,(purecopy "Read your mail and reply to it")))
1460 1446
1461(defun menu-bar-read-mail () 1447(defun menu-bar-read-mail ()
1462 "Read mail using `read-mail-command'." 1448 "Read mail using `read-mail-command'."
1463 (interactive) 1449 (interactive)
1464 (call-interactively read-mail-command)) 1450 (call-interactively read-mail-command))
1465 1451
1466(define-key menu-bar-tools-menu [gnus] 1452(defvar menu-bar-tools-menu
1467 `(menu-item ,(purecopy "Read Net News (Gnus)") gnus 1453 (let ((menu (make-sparse-keymap "Tools")))
1468 :help ,(purecopy "Read network news groups"))) 1454
1469 1455 (define-key menu [games]
1470(define-key menu-bar-tools-menu [separator-vc] 1456 `(menu-item ,(purecopy "Games") ,menu-bar-games-menu))
1471 menu-bar-separator) 1457
1472 1458 (define-key menu [separator-games]
1473(define-key menu-bar-tools-menu [pcl-cvs] 1459 menu-bar-separator)
1474 `(menu-item ,(purecopy "PCL-CVS") cvs-global-menu)) 1460
1475(define-key menu-bar-tools-menu [vc] nil) ;Create the place for the VC menu. 1461 (define-key menu [encryption-decryption]
1476 1462 `(menu-item ,(purecopy "Encryption/Decryption") ,menu-bar-encryption-decryption-menu))
1477(define-key menu-bar-tools-menu [separator-compare] 1463
1478 menu-bar-separator) 1464 (define-key menu [separator-encryption-decryption]
1479 1465 menu-bar-separator)
1480(define-key menu-bar-tools-menu [epatch] 1466
1481 `(menu-item ,(purecopy "Apply Patch") menu-bar-epatch-menu)) 1467 (define-key menu [simple-calculator]
1482(define-key menu-bar-tools-menu [ediff-merge] 1468 `(menu-item ,(purecopy "Simple Calculator") calculator
1483 `(menu-item ,(purecopy "Merge") menu-bar-ediff-merge-menu)) 1469 :help ,(purecopy "Invoke the Emacs built-in quick calculator")))
1484(define-key menu-bar-tools-menu [compare] 1470 (define-key menu [calc]
1485 `(menu-item ,(purecopy "Compare (Ediff)") menu-bar-ediff-menu)) 1471 `(menu-item ,(purecopy "Programmable Calculator") calc
1486 1472 :help ,(purecopy "Invoke the Emacs built-in full scientific calculator")))
1487(define-key menu-bar-tools-menu [separator-spell] 1473 (define-key menu [calendar]
1488 menu-bar-separator) 1474 `(menu-item ,(purecopy "Calendar") calendar
1489 1475 :help ,(purecopy "Invoke the Emacs built-in calendar")))
1490(define-key menu-bar-tools-menu [spell] 1476
1491 `(menu-item ,(purecopy "Spell Checking") ispell-menu-map)) 1477 (define-key menu [separator-net]
1492 1478 menu-bar-separator)
1493(define-key menu-bar-tools-menu [separator-prog] 1479
1494 menu-bar-separator) 1480 (define-key menu [directory-search]
1495 1481 `(menu-item ,(purecopy "Directory Search") eudc-tools-menu))
1496(define-key menu-bar-tools-menu [semantic] 1482 (define-key menu [compose-mail]
1497 `(menu-item ,(purecopy "Source Code Parsers (Semantic)") 1483 `(menu-item (format "Send Mail (with %s)" (send-mail-item-name)) compose-mail
1498 semantic-mode 1484 :visible (and mail-user-agent (not (eq mail-user-agent 'ignore)))
1499 :help ,(purecopy "Toggle automatic parsing in source code buffers (Semantic mode)") 1485 :help ,(purecopy "Send a mail message")))
1500 :button (:toggle . (bound-and-true-p semantic-mode)))) 1486 (define-key menu [rmail]
1501 1487 `(menu-item (format "Read Mail (with %s)" (read-mail-item-name))
1502(define-key menu-bar-tools-menu [ede] 1488 menu-bar-read-mail
1503 `(menu-item ,(purecopy "Project support (EDE)") 1489 :visible (and read-mail-command
1504 global-ede-mode 1490 (not (eq read-mail-command 'ignore)))
1505 :help ,(purecopy "Toggle the Emacs Development Environment (Global EDE mode)") 1491 :help ,(purecopy "Read your mail and reply to it")))
1506 :button (:toggle . (bound-and-true-p global-ede-mode)))) 1492
1507 1493 (define-key menu [gnus]
1508(define-key menu-bar-tools-menu [gdb] 1494 `(menu-item ,(purecopy "Read Net News (Gnus)") gnus
1509 `(menu-item ,(purecopy "Debugger (GDB)...") gdb 1495 :help ,(purecopy "Read network news groups")))
1510 :help ,(purecopy "Debug a program from within Emacs with GDB"))) 1496
1511(define-key menu-bar-tools-menu [shell-on-region] 1497 (define-key menu [separator-vc]
1512 `(menu-item ,(purecopy "Shell Command on Region...") shell-command-on-region 1498 menu-bar-separator)
1513 :enable mark-active 1499
1514 :help ,(purecopy "Pass marked region to a shell command"))) 1500 (define-key menu [pcl-cvs]
1515(define-key menu-bar-tools-menu [shell] 1501 `(menu-item ,(purecopy "PCL-CVS") cvs-global-menu))
1516 `(menu-item ,(purecopy "Shell Command...") shell-command 1502 (define-key menu [vc] nil) ;Create the place for the VC menu.
1517 :help ,(purecopy "Invoke a shell command and catch its output"))) 1503
1518(define-key menu-bar-tools-menu [compile] 1504 (define-key menu [separator-compare]
1519 `(menu-item ,(purecopy "Compile...") compile 1505 menu-bar-separator)
1520 :help ,(purecopy "Invoke compiler or Make, view compilation errors"))) 1506
1521(define-key menu-bar-tools-menu [grep] 1507 (define-key menu [epatch]
1522 `(menu-item ,(purecopy "Search Files (Grep)...") grep 1508 `(menu-item ,(purecopy "Apply Patch") menu-bar-epatch-menu))
1523 :help ,(purecopy "Search files for strings or regexps (with Grep)"))) 1509 (define-key menu [ediff-merge]
1524 1510 `(menu-item ,(purecopy "Merge") menu-bar-ediff-merge-menu))
1511 (define-key menu [compare]
1512 `(menu-item ,(purecopy "Compare (Ediff)") menu-bar-ediff-menu))
1513
1514 (define-key menu [separator-spell]
1515 menu-bar-separator)
1516
1517 (define-key menu [spell]
1518 `(menu-item ,(purecopy "Spell Checking") ispell-menu-map))
1519
1520 (define-key menu [separator-prog]
1521 menu-bar-separator)
1522
1523 (define-key menu [semantic]
1524 `(menu-item ,(purecopy "Source Code Parsers (Semantic)")
1525 semantic-mode
1526 :help ,(purecopy "Toggle automatic parsing in source code buffers (Semantic mode)")
1527 :button (:toggle . (bound-and-true-p semantic-mode))))
1528
1529 (define-key menu [ede]
1530 `(menu-item ,(purecopy "Project support (EDE)")
1531 global-ede-mode
1532 :help ,(purecopy "Toggle the Emacs Development Environment (Global EDE mode)")
1533 :button (:toggle . (bound-and-true-p global-ede-mode))))
1534
1535 (define-key menu [gdb]
1536 `(menu-item ,(purecopy "Debugger (GDB)...") gdb
1537 :help ,(purecopy "Debug a program from within Emacs with GDB")))
1538 (define-key menu [shell-on-region]
1539 `(menu-item ,(purecopy "Shell Command on Region...") shell-command-on-region
1540 :enable mark-active
1541 :help ,(purecopy "Pass marked region to a shell command")))
1542 (define-key menu [shell]
1543 `(menu-item ,(purecopy "Shell Command...") shell-command
1544 :help ,(purecopy "Invoke a shell command and catch its output")))
1545 (define-key menu [compile]
1546 `(menu-item ,(purecopy "Compile...") compile
1547 :help ,(purecopy "Invoke compiler or Make, view compilation errors")))
1548 (define-key menu [grep]
1549 `(menu-item ,(purecopy "Search Files (Grep)...") grep
1550 :help ,(purecopy "Search files for strings or regexps (with Grep)")))
1551 menu))
1525 1552
1526;; The "Help" menu items 1553;; The "Help" menu items
1527 1554
1528(defvar menu-bar-describe-menu (make-sparse-keymap "Describe")) 1555(defvar menu-bar-describe-menu
1529 1556 (let ((menu (make-sparse-keymap "Describe")))
1530(define-key menu-bar-describe-menu [mule-diag] 1557
1531 `(menu-item ,(purecopy "Show All of Mule Status") mule-diag 1558 (define-key menu [mule-diag]
1532 :visible (default-value 'enable-multibyte-characters) 1559 `(menu-item ,(purecopy "Show All of Mule Status") mule-diag
1533 :help ,(purecopy "Display multilingual environment settings"))) 1560 :visible (default-value 'enable-multibyte-characters)
1534(define-key menu-bar-describe-menu [describe-coding-system-briefly] 1561 :help ,(purecopy "Display multilingual environment settings")))
1535 `(menu-item ,(purecopy "Describe Coding System (Briefly)") 1562 (define-key menu [describe-coding-system-briefly]
1536 describe-current-coding-system-briefly 1563 `(menu-item ,(purecopy "Describe Coding System (Briefly)")
1537 :visible (default-value 'enable-multibyte-characters))) 1564 describe-current-coding-system-briefly
1538(define-key menu-bar-describe-menu [describe-coding-system] 1565 :visible (default-value 'enable-multibyte-characters)))
1539 `(menu-item ,(purecopy "Describe Coding System...") describe-coding-system 1566 (define-key menu [describe-coding-system]
1540 :visible (default-value 'enable-multibyte-characters))) 1567 `(menu-item ,(purecopy "Describe Coding System...") describe-coding-system
1541(define-key menu-bar-describe-menu [describe-input-method] 1568 :visible (default-value 'enable-multibyte-characters)))
1542 `(menu-item ,(purecopy "Describe Input Method...") describe-input-method 1569 (define-key menu [describe-input-method]
1543 :visible (default-value 'enable-multibyte-characters) 1570 `(menu-item ,(purecopy "Describe Input Method...") describe-input-method
1544 :help ,(purecopy "Keyboard layout for specific input method"))) 1571 :visible (default-value 'enable-multibyte-characters)
1545(define-key menu-bar-describe-menu [describe-language-environment] 1572 :help ,(purecopy "Keyboard layout for specific input method")))
1546 `(menu-item ,(purecopy "Describe Language Environment") 1573 (define-key menu [describe-language-environment]
1547 ,describe-language-environment-map)) 1574 `(menu-item ,(purecopy "Describe Language Environment")
1548 1575 ,describe-language-environment-map))
1549(define-key menu-bar-describe-menu [separator-desc-mule] 1576
1550 menu-bar-separator) 1577 (define-key menu [separator-desc-mule]
1551 1578 menu-bar-separator)
1552(define-key menu-bar-describe-menu [list-keybindings] 1579
1553 `(menu-item ,(purecopy "List Key Bindings") describe-bindings 1580 (define-key menu [list-keybindings]
1554 :help ,(purecopy "Display all current key bindings (keyboard shortcuts)"))) 1581 `(menu-item ,(purecopy "List Key Bindings") describe-bindings
1555(define-key menu-bar-describe-menu [describe-current-display-table] 1582 :help ,(purecopy "Display all current key bindings (keyboard shortcuts)")))
1556 `(menu-item ,(purecopy "Describe Display Table") describe-current-display-table 1583 (define-key menu [describe-current-display-table]
1557 :help ,(purecopy "Describe the current display table"))) 1584 `(menu-item ,(purecopy "Describe Display Table") describe-current-display-table
1558(define-key menu-bar-describe-menu [describe-package] 1585 :help ,(purecopy "Describe the current display table")))
1559 `(menu-item ,(purecopy "Describe Package...") describe-package 1586 (define-key menu [describe-package]
1560 :help ,(purecopy "Display documentation of a Lisp package"))) 1587 `(menu-item ,(purecopy "Describe Package...") describe-package
1561(define-key menu-bar-describe-menu [describe-face] 1588 :help ,(purecopy "Display documentation of a Lisp package")))
1562 `(menu-item ,(purecopy "Describe Face...") describe-face 1589 (define-key menu [describe-face]
1563 :help ,(purecopy "Display the properties of a face"))) 1590 `(menu-item ,(purecopy "Describe Face...") describe-face
1564(define-key menu-bar-describe-menu [describe-variable] 1591 :help ,(purecopy "Display the properties of a face")))
1565 `(menu-item ,(purecopy "Describe Variable...") describe-variable 1592 (define-key menu [describe-variable]
1566 :help ,(purecopy "Display documentation of variable/option"))) 1593 `(menu-item ,(purecopy "Describe Variable...") describe-variable
1567(define-key menu-bar-describe-menu [describe-function] 1594 :help ,(purecopy "Display documentation of variable/option")))
1568 `(menu-item ,(purecopy "Describe Function...") describe-function 1595 (define-key menu [describe-function]
1569 :help ,(purecopy "Display documentation of function/command"))) 1596 `(menu-item ,(purecopy "Describe Function...") describe-function
1570(define-key menu-bar-describe-menu [describe-key-1] 1597 :help ,(purecopy "Display documentation of function/command")))
1571 `(menu-item ,(purecopy "Describe Key or Mouse Operation...") describe-key 1598 (define-key menu [describe-key-1]
1572 ;; Users typically don't identify keys and menu items... 1599 `(menu-item ,(purecopy "Describe Key or Mouse Operation...") describe-key
1573 :help ,(purecopy "Display documentation of command bound to a \ 1600 ;; Users typically don't identify keys and menu items...
1601 :help ,(purecopy "Display documentation of command bound to a \
1574key, a click, or a menu-item"))) 1602key, a click, or a menu-item")))
1575(define-key menu-bar-describe-menu [describe-mode] 1603 (define-key menu [describe-mode]
1576 `(menu-item ,(purecopy "Describe Buffer Modes") describe-mode 1604 `(menu-item ,(purecopy "Describe Buffer Modes") describe-mode
1577 :help ,(purecopy "Describe this buffer's major and minor mode"))) 1605 :help ,(purecopy "Describe this buffer's major and minor mode")))
1606 menu))
1578 1607
1579(defvar menu-bar-search-documentation-menu
1580 (make-sparse-keymap "Search Documentation"))
1581(defun menu-bar-read-lispref () 1608(defun menu-bar-read-lispref ()
1582 "Display the Emacs Lisp Reference manual in Info mode." 1609 "Display the Emacs Lisp Reference manual in Info mode."
1583 (interactive) 1610 (interactive)
@@ -1605,80 +1632,69 @@ key, a click, or a menu-item")))
1605 (info "elisp") 1632 (info "elisp")
1606 (Info-index topic)) 1633 (Info-index topic))
1607 1634
1608(define-key menu-bar-search-documentation-menu [search-documentation-strings] 1635(defvar menu-bar-search-documentation-menu
1609 `(menu-item ,(purecopy "Search Documentation Strings...") apropos-documentation 1636 (let ((menu (make-sparse-keymap "Search Documentation")))
1610 :help 1637
1611 ,(purecopy "Find functions and variables whose doc strings match a regexp"))) 1638 (define-key menu [search-documentation-strings]
1612(define-key menu-bar-search-documentation-menu [find-any-object-by-name] 1639 `(menu-item ,(purecopy "Search Documentation Strings...") apropos-documentation
1613 `(menu-item ,(purecopy "Find Any Object by Name...") apropos 1640 :help
1614 :help ,(purecopy "Find symbols of any kind whose names match a regexp"))) 1641 ,(purecopy "Find functions and variables whose doc strings match a regexp")))
1615(define-key menu-bar-search-documentation-menu [find-option-by-value] 1642 (define-key menu [find-any-object-by-name]
1616 `(menu-item ,(purecopy "Find Options by Value...") apropos-value 1643 `(menu-item ,(purecopy "Find Any Object by Name...") apropos
1617 :help ,(purecopy "Find variables whose values match a regexp"))) 1644 :help ,(purecopy "Find symbols of any kind whose names match a regexp")))
1618(define-key menu-bar-search-documentation-menu [find-options-by-name] 1645 (define-key menu [find-option-by-value]
1619 `(menu-item ,(purecopy "Find Options by Name...") apropos-variable 1646 `(menu-item ,(purecopy "Find Options by Value...") apropos-value
1620 :help ,(purecopy "Find variables whose names match a regexp"))) 1647 :help ,(purecopy "Find variables whose values match a regexp")))
1621(define-key menu-bar-search-documentation-menu [find-commands-by-name] 1648 (define-key menu [find-options-by-name]
1622 `(menu-item ,(purecopy "Find Commands by Name...") apropos-command 1649 `(menu-item ,(purecopy "Find Options by Name...") apropos-variable
1623 :help ,(purecopy "Find commands whose names match a regexp"))) 1650 :help ,(purecopy "Find variables whose names match a regexp")))
1624(define-key menu-bar-search-documentation-menu [sep1] 1651 (define-key menu [find-commands-by-name]
1625 menu-bar-separator) 1652 `(menu-item ,(purecopy "Find Commands by Name...") apropos-command
1626(define-key menu-bar-search-documentation-menu [lookup-command-in-manual] 1653 :help ,(purecopy "Find commands whose names match a regexp")))
1627 `(menu-item ,(purecopy "Look Up Command in User Manual...") Info-goto-emacs-command-node 1654 (define-key menu [sep1]
1628 :help ,(purecopy "Display manual section that describes a command"))) 1655 menu-bar-separator)
1629(define-key menu-bar-search-documentation-menu [lookup-key-in-manual] 1656 (define-key menu [lookup-command-in-manual]
1630 `(menu-item ,(purecopy "Look Up Key in User Manual...") Info-goto-emacs-key-command-node 1657 `(menu-item ,(purecopy "Look Up Command in User Manual...") Info-goto-emacs-command-node
1631 :help ,(purecopy "Display manual section that describes a key"))) 1658 :help ,(purecopy "Display manual section that describes a command")))
1632(define-key menu-bar-search-documentation-menu [lookup-subject-in-elisp-manual] 1659 (define-key menu [lookup-key-in-manual]
1633 `(menu-item ,(purecopy "Look Up Subject in ELisp Manual...") elisp-index-search 1660 `(menu-item ,(purecopy "Look Up Key in User Manual...") Info-goto-emacs-key-command-node
1634 :help ,(purecopy "Find description of a subject in Emacs Lisp manual"))) 1661 :help ,(purecopy "Display manual section that describes a key")))
1635(define-key menu-bar-search-documentation-menu [lookup-subject-in-emacs-manual] 1662 (define-key menu [lookup-subject-in-elisp-manual]
1636 `(menu-item ,(purecopy "Look Up Subject in User Manual...") emacs-index-search 1663 `(menu-item ,(purecopy "Look Up Subject in ELisp Manual...") elisp-index-search
1637 :help ,(purecopy "Find description of a subject in Emacs User manual"))) 1664 :help ,(purecopy "Find description of a subject in Emacs Lisp manual")))
1638(define-key menu-bar-search-documentation-menu [emacs-terminology] 1665 (define-key menu [lookup-subject-in-emacs-manual]
1639 `(menu-item ,(purecopy "Emacs Terminology") search-emacs-glossary 1666 `(menu-item ,(purecopy "Look Up Subject in User Manual...") emacs-index-search
1640 :help ,(purecopy "Display the Glossary section of the Emacs manual"))) 1667 :help ,(purecopy "Find description of a subject in Emacs User manual")))
1641 1668 (define-key menu [emacs-terminology]
1642(defvar menu-bar-manuals-menu (make-sparse-keymap "More Manuals")) 1669 `(menu-item ,(purecopy "Emacs Terminology") search-emacs-glossary
1643 1670 :help ,(purecopy "Display the Glossary section of the Emacs manual")))
1644(define-key menu-bar-manuals-menu [man] 1671 menu))
1645 `(menu-item ,(purecopy "Read Man Page...") manual-entry 1672
1646 :help ,(purecopy "Man-page docs for external commands and libraries"))) 1673(defvar menu-bar-manuals-menu
1647(define-key menu-bar-manuals-menu [sep2] 1674 (let ((menu (make-sparse-keymap "More Manuals")))
1648 menu-bar-separator) 1675
1649(define-key menu-bar-manuals-menu [order-emacs-manuals] 1676 (define-key menu [man]
1650 `(menu-item ,(purecopy "Ordering Manuals") view-order-manuals 1677 `(menu-item ,(purecopy "Read Man Page...") manual-entry
1651 :help ,(purecopy "How to order manuals from the Free Software Foundation"))) 1678 :help ,(purecopy "Man-page docs for external commands and libraries")))
1652(define-key menu-bar-manuals-menu [lookup-subject-in-all-manuals] 1679 (define-key menu [sep2]
1653 `(menu-item ,(purecopy "Lookup Subject in all Manuals...") info-apropos 1680 menu-bar-separator)
1654 :help ,(purecopy "Find description of a subject in all installed manuals"))) 1681 (define-key menu [order-emacs-manuals]
1655(define-key menu-bar-manuals-menu [other-manuals] 1682 `(menu-item ,(purecopy "Ordering Manuals") view-order-manuals
1656 `(menu-item ,(purecopy "All Other Manuals (Info)") Info-directory 1683 :help ,(purecopy "How to order manuals from the Free Software Foundation")))
1657 :help ,(purecopy "Read any of the installed manuals"))) 1684 (define-key menu [lookup-subject-in-all-manuals]
1658(define-key menu-bar-manuals-menu [emacs-lisp-reference] 1685 `(menu-item ,(purecopy "Lookup Subject in all Manuals...") info-apropos
1659 `(menu-item ,(purecopy "Emacs Lisp Reference") menu-bar-read-lispref 1686 :help ,(purecopy "Find description of a subject in all installed manuals")))
1660 :help ,(purecopy "Read the Emacs Lisp Reference manual"))) 1687 (define-key menu [other-manuals]
1661(define-key menu-bar-manuals-menu [emacs-lisp-intro] 1688 `(menu-item ,(purecopy "All Other Manuals (Info)") Info-directory
1662 `(menu-item ,(purecopy "Introduction to Emacs Lisp") menu-bar-read-lispintro 1689 :help ,(purecopy "Read any of the installed manuals")))
1663 :help ,(purecopy "Read the Introduction to Emacs Lisp Programming"))) 1690 (define-key menu [emacs-lisp-reference]
1664 1691 `(menu-item ,(purecopy "Emacs Lisp Reference") menu-bar-read-lispref
1665(define-key menu-bar-help-menu [about-gnu-project] 1692 :help ,(purecopy "Read the Emacs Lisp Reference manual")))
1666 `(menu-item ,(purecopy "About GNU") describe-gnu-project 1693 (define-key menu [emacs-lisp-intro]
1667 :help ,(purecopy "About the GNU System, GNU Project, and GNU/Linux"))) 1694 `(menu-item ,(purecopy "Introduction to Emacs Lisp") menu-bar-read-lispintro
1668(define-key menu-bar-help-menu [about-emacs] 1695 :help ,(purecopy "Read the Introduction to Emacs Lisp Programming")))
1669 `(menu-item ,(purecopy "About Emacs") about-emacs 1696 menu))
1670 :help ,(purecopy "Display version number, copyright info, and basic help"))) 1697
1671(define-key menu-bar-help-menu [sep4]
1672 menu-bar-separator)
1673(define-key menu-bar-help-menu [describe-no-warranty]
1674 `(menu-item ,(purecopy "(Non)Warranty") describe-no-warranty
1675 :help ,(purecopy "Explain that Emacs has NO WARRANTY")))
1676(define-key menu-bar-help-menu [describe-copying]
1677 `(menu-item ,(purecopy "Copying Conditions") describe-copying
1678 :help ,(purecopy "Show the Emacs license (GPL)")))
1679(define-key menu-bar-help-menu [getting-new-versions]
1680 `(menu-item ,(purecopy "Getting New Versions") describe-distribution
1681 :help ,(purecopy "How to get the latest version of Emacs")))
1682(defun menu-bar-help-extra-packages () 1698(defun menu-bar-help-extra-packages ()
1683 "Display help about some additional packages available for Emacs." 1699 "Display help about some additional packages available for Emacs."
1684 (interactive) 1700 (interactive)
@@ -1686,60 +1702,101 @@ key, a click, or a menu-item")))
1686 (view-file (expand-file-name "MORE.STUFF" 1702 (view-file (expand-file-name "MORE.STUFF"
1687 data-directory)) 1703 data-directory))
1688 (goto-address-mode 1))) 1704 (goto-address-mode 1)))
1689(define-key menu-bar-help-menu [sep2]
1690 menu-bar-separator)
1691(define-key menu-bar-help-menu [external-packages]
1692 `(menu-item ,(purecopy "Finding Extra Packages") menu-bar-help-extra-packages
1693 :help ,(purecopy "Lisp packages distributed separately for use in Emacs")))
1694(define-key menu-bar-help-menu [find-emacs-packages]
1695 `(menu-item ,(purecopy "Search Built-in Packages") finder-by-keyword
1696 :help ,(purecopy "Find built-in packages and features by keyword")))
1697(define-key menu-bar-help-menu [more-manuals]
1698 `(menu-item ,(purecopy "More Manuals") ,menu-bar-manuals-menu))
1699(define-key menu-bar-help-menu [emacs-manual]
1700 `(menu-item ,(purecopy "Read the Emacs Manual") info-emacs-manual
1701 :help ,(purecopy "Full documentation of Emacs features")))
1702(define-key menu-bar-help-menu [describe]
1703 `(menu-item ,(purecopy "Describe") ,menu-bar-describe-menu))
1704(define-key menu-bar-help-menu [search-documentation]
1705 `(menu-item ,(purecopy "Search Documentation") ,menu-bar-search-documentation-menu))
1706(define-key menu-bar-help-menu [sep1]
1707 menu-bar-separator)
1708(define-key menu-bar-help-menu [emacs-psychotherapist]
1709 `(menu-item ,(purecopy "Emacs Psychotherapist") doctor
1710 :help ,(purecopy "Our doctor will help you feel better")))
1711(define-key menu-bar-help-menu [send-emacs-bug-report]
1712 `(menu-item ,(purecopy "Send Bug Report...") report-emacs-bug
1713 :help ,(purecopy "Send e-mail to Emacs maintainers")))
1714(define-key menu-bar-help-menu [emacs-known-problems]
1715 `(menu-item ,(purecopy "Emacs Known Problems") view-emacs-problems
1716 :help ,(purecopy "Read about known problems with Emacs")))
1717(define-key menu-bar-help-menu [emacs-news]
1718 `(menu-item ,(purecopy "Emacs News") view-emacs-news
1719 :help ,(purecopy "New features of this version")))
1720(define-key menu-bar-help-menu [emacs-faq]
1721 `(menu-item ,(purecopy "Emacs FAQ") view-emacs-FAQ
1722 :help ,(purecopy "Frequently asked (and answered) questions about Emacs")))
1723 1705
1724(defun help-with-tutorial-spec-language () 1706(defun help-with-tutorial-spec-language ()
1725 "Use the Emacs tutorial, specifying which language you want." 1707 "Use the Emacs tutorial, specifying which language you want."
1726 (interactive) 1708 (interactive)
1727 (help-with-tutorial t)) 1709 (help-with-tutorial t))
1728 1710
1729(define-key menu-bar-help-menu [emacs-tutorial-language-specific] 1711(defvar menu-bar-help-menu
1730 `(menu-item ,(purecopy "Emacs Tutorial (choose language)...") 1712 (let ((menu (make-sparse-keymap "Help")))
1731 help-with-tutorial-spec-language 1713 (define-key menu [about-gnu-project]
1732 :help ,(purecopy "Learn how to use Emacs (choose a language)"))) 1714 `(menu-item ,(purecopy "About GNU") describe-gnu-project
1733(define-key menu-bar-help-menu [emacs-tutorial] 1715 :help ,(purecopy "About the GNU System, GNU Project, and GNU/Linux")))
1734 `(menu-item ,(purecopy "Emacs Tutorial") help-with-tutorial 1716 (define-key menu [about-emacs]
1735 :help ,(purecopy "Learn how to use Emacs"))) 1717 `(menu-item ,(purecopy "About Emacs") about-emacs
1736 1718 :help ,(purecopy "Display version number, copyright info, and basic help")))
1737;; In OS X it's in the app menu already. 1719 (define-key menu [sep4]
1738;; FIXME? There already is an "About Emacs" (sans ...) entry in the Help menu. 1720 menu-bar-separator)
1739(and (featurep 'ns) 1721 (define-key menu [describe-no-warranty]
1740 (not (eq system-type 'darwin)) 1722 `(menu-item ,(purecopy "(Non)Warranty") describe-no-warranty
1741 (define-key menu-bar-help-menu [info-panel] 1723 :help ,(purecopy "Explain that Emacs has NO WARRANTY")))
1742 `(menu-item ,(purecopy "About Emacs...") ns-do-emacs-info-panel))) 1724 (define-key menu [describe-copying]
1725 `(menu-item ,(purecopy "Copying Conditions") describe-copying
1726 :help ,(purecopy "Show the Emacs license (GPL)")))
1727 (define-key menu [getting-new-versions]
1728 `(menu-item ,(purecopy "Getting New Versions") describe-distribution
1729 :help ,(purecopy "How to get the latest version of Emacs")))
1730 (define-key menu [sep2]
1731 menu-bar-separator)
1732 (define-key menu [external-packages]
1733 `(menu-item ,(purecopy "Finding Extra Packages") menu-bar-help-extra-packages
1734 :help ,(purecopy "Lisp packages distributed separately for use in Emacs")))
1735 (define-key menu [find-emacs-packages]
1736 `(menu-item ,(purecopy "Search Built-in Packages") finder-by-keyword
1737 :help ,(purecopy "Find built-in packages and features by keyword")))
1738 (define-key menu [more-manuals]
1739 `(menu-item ,(purecopy "More Manuals") ,menu-bar-manuals-menu))
1740 (define-key menu [emacs-manual]
1741 `(menu-item ,(purecopy "Read the Emacs Manual") info-emacs-manual
1742 :help ,(purecopy "Full documentation of Emacs features")))
1743 (define-key menu [describe]
1744 `(menu-item ,(purecopy "Describe") ,menu-bar-describe-menu))
1745 (define-key menu [search-documentation]
1746 `(menu-item ,(purecopy "Search Documentation") ,menu-bar-search-documentation-menu))
1747 (define-key menu [sep1]
1748 menu-bar-separator)
1749 (define-key menu [emacs-psychotherapist]
1750 `(menu-item ,(purecopy "Emacs Psychotherapist") doctor
1751 :help ,(purecopy "Our doctor will help you feel better")))
1752 (define-key menu [send-emacs-bug-report]
1753 `(menu-item ,(purecopy "Send Bug Report...") report-emacs-bug
1754 :help ,(purecopy "Send e-mail to Emacs maintainers")))
1755 (define-key menu [emacs-known-problems]
1756 `(menu-item ,(purecopy "Emacs Known Problems") view-emacs-problems
1757 :help ,(purecopy "Read about known problems with Emacs")))
1758 (define-key menu [emacs-news]
1759 `(menu-item ,(purecopy "Emacs News") view-emacs-news
1760 :help ,(purecopy "New features of this version")))
1761 (define-key menu [emacs-faq]
1762 `(menu-item ,(purecopy "Emacs FAQ") view-emacs-FAQ
1763 :help ,(purecopy "Frequently asked (and answered) questions about Emacs")))
1764
1765 (define-key menu [emacs-tutorial-language-specific]
1766 `(menu-item ,(purecopy "Emacs Tutorial (choose language)...")
1767 help-with-tutorial-spec-language
1768 :help ,(purecopy "Learn how to use Emacs (choose a language)")))
1769 (define-key menu [emacs-tutorial]
1770 `(menu-item ,(purecopy "Emacs Tutorial") help-with-tutorial
1771 :help ,(purecopy "Learn how to use Emacs")))
1772
1773 ;; In OS X it's in the app menu already.
1774 ;; FIXME? There already is an "About Emacs" (sans ...) entry in the Help menu.
1775 (and (featurep 'ns)
1776 (not (eq system-type 'darwin))
1777 (define-key menu [info-panel]
1778 `(menu-item ,(purecopy "About Emacs...") ns-do-emacs-info-panel)))
1779 menu))
1780
1781(define-key global-map [menu-bar tools]
1782 (cons (purecopy "Tools") menu-bar-tools-menu))
1783(define-key global-map [menu-bar buffer]
1784 (cons (purecopy "Buffers") global-buffers-menu-map))
1785(define-key global-map [menu-bar options]
1786 (cons (purecopy "Options") menu-bar-options-menu))
1787(define-key global-map [menu-bar edit]
1788 (cons (purecopy "Edit") menu-bar-edit-menu))
1789(define-key global-map [menu-bar file]
1790 (cons (purecopy "File") menu-bar-file-menu))
1791
1792;; Put "Help" menu at the end, or Info at the front.
1793;; If running under GNUstep, "Help" is moved and renamed "Info" (see below).
1794(if (and (featurep 'ns)
1795 (not (eq system-type 'darwin)))
1796 (define-key global-map [menu-bar help-menu]
1797 (cons (purecopy "Info") menu-bar-help-menu))
1798 (define-key-after global-map [menu-bar help-menu]
1799 (cons (purecopy "Help") menu-bar-help-menu)))
1743 1800
1744(defun menu-bar-menu-frame-live-and-visible-p () 1801(defun menu-bar-menu-frame-live-and-visible-p ()
1745 "Return non-nil if the menu frame is alive and visible. 1802 "Return non-nil if the menu frame is alive and visible.
diff --git a/lisp/net/net-utils.el b/lisp/net/net-utils.el
index 3c4588780a2..d75b36051f0 100644
--- a/lisp/net/net-utils.el
+++ b/lisp/net/net-utils.el
@@ -490,6 +490,11 @@ If your system's ping continues until interrupted, you can try setting
490 490
491(autoload 'comint-mode "comint" nil t) 491(autoload 'comint-mode "comint" nil t)
492 492
493(defvar nslookup-mode-map
494 (let ((map (make-sparse-keymap)))
495 (define-key map "\t" 'comint-dynamic-complete)
496 map))
497
493;; Using a derived mode gives us keymaps, hooks, etc. 498;; Using a derived mode gives us keymaps, hooks, etc.
494(define-derived-mode nslookup-mode comint-mode "Nslookup" 499(define-derived-mode nslookup-mode comint-mode "Nslookup"
495 "Major mode for interacting with the nslookup program." 500 "Major mode for interacting with the nslookup program."
@@ -499,8 +504,6 @@ If your system's ping continues until interrupted, you can try setting
499 (setq comint-prompt-regexp nslookup-prompt-regexp) 504 (setq comint-prompt-regexp nslookup-prompt-regexp)
500 (setq comint-input-autoexpand t)) 505 (setq comint-input-autoexpand t))
501 506
502(define-key nslookup-mode-map "\t" 'comint-dynamic-complete)
503
504;;;###autoload 507;;;###autoload
505(defun dns-lookup-host (host) 508(defun dns-lookup-host (host)
506 "Lookup the DNS information for HOST (name or IP address)." 509 "Lookup the DNS information for HOST (name or IP address)."
@@ -556,6 +559,12 @@ If your system's ping continues until interrupted, you can try setting
556 (list host))) 559 (list host)))
557 (pop-to-buffer buf))) 560 (pop-to-buffer buf)))
558 561
562(defvar ftp-mode-map
563 (let ((map (make-sparse-keymap)))
564 ;; Occasionally useful
565 (define-key map "\t" 'comint-dynamic-complete)
566 map))
567
559(define-derived-mode ftp-mode comint-mode "FTP" 568(define-derived-mode ftp-mode comint-mode "FTP"
560 "Major mode for interacting with the ftp program." 569 "Major mode for interacting with the ftp program."
561 (setq comint-prompt-regexp ftp-prompt-regexp) 570 (setq comint-prompt-regexp ftp-prompt-regexp)
@@ -571,9 +580,6 @@ If your system's ping continues until interrupted, you can try setting
571 (add-hook 'comint-output-filter-functions 'comint-watch-for-password-prompt 580 (add-hook 'comint-output-filter-functions 'comint-watch-for-password-prompt
572 nil t))) 581 nil t)))
573 582
574;; Occasionally useful
575(define-key ftp-mode-map "\t" 'comint-dynamic-complete)
576
577(defun smbclient (host service) 583(defun smbclient (host service)
578 "Connect to SERVICE on HOST via SMB." 584 "Connect to SERVICE on HOST via SMB."
579 (interactive 585 (interactive
diff --git a/lisp/net/newst-plainview.el b/lisp/net/newst-plainview.el
index 0e1279cd86c..cd662cb1784 100644
--- a/lisp/net/newst-plainview.el
+++ b/lisp/net/newst-plainview.el
@@ -378,6 +378,107 @@ images."
378;;; Newsticker mode 378;;; Newsticker mode
379;; ====================================================================== 379;; ======================================================================
380 380
381
382;; newsticker menu
383(defvar newsticker-menu
384 (let ((map (make-sparse-keymap "Newsticker")))
385
386 (define-key map [newsticker-browse-url]
387 '("Browse URL for item at point" . newsticker-browse-url))
388 (define-key map [newsticker-separator-1]
389 '("--"))
390 (define-key map [newsticker-buffer-update]
391 '("Update buffer" . newsticker-buffer-update))
392 (define-key map [newsticker-separator-2]
393 '("--"))
394 (define-key map [newsticker-get-all-news]
395 '("Get news from all feeds" . newsticker-get-all-news))
396 (define-key map [newsticker-get-news-at-point]
397 '("Get news from feed at point" . newsticker-get-news-at-point))
398 (define-key map [newsticker-separator-3]
399 '("--"))
400 (define-key map [newsticker-mark-all-items-as-read]
401 '("Mark all items as read" . newsticker-mark-all-items-as-read))
402 (define-key map [newsticker-mark-all-items-at-point-as-read]
403 '("Mark all items in feed at point as read" .
404 newsticker-mark-all-items-at-point-as-read))
405 (define-key map [newsticker-mark-item-at-point-as-read]
406 '("Mark item at point as read" .
407 newsticker-mark-item-at-point-as-read))
408 (define-key map [newsticker-mark-item-at-point-as-immortal]
409 '("Toggle immortality for item at point" .
410 newsticker-mark-item-at-point-as-immortal))
411 (define-key map [newsticker-separator-4]
412 '("--"))
413 (define-key map [newsticker-toggle-auto-narrow-to-item]
414 '("Narrow to single item" . newsticker-toggle-auto-narrow-to-item))
415 (define-key map [newsticker-toggle-auto-narrow-to-feed]
416 '("Narrow to single news feed" . newsticker-toggle-auto-narrow-to-feed))
417 (define-key map [newsticker-hide-old-items]
418 '("Hide old items" . newsticker-hide-old-items))
419 (define-key map [newsticker-show-old-items]
420 '("Show old items" . newsticker-show-old-items))
421 (define-key map [newsticker-next-item]
422 '("Go to next item" . newsticker-next-item))
423 (define-key map [newsticker-previous-item]
424 '("Go to previous item" . newsticker-previous-item))
425 map))
426
427(defvar newsticker-mode-map
428 (let ((map (make-keymap)))
429 (define-key map "sO" 'newsticker-show-old-items)
430 (define-key map "hO" 'newsticker-hide-old-items)
431 (define-key map "sa" 'newsticker-show-all-desc)
432 (define-key map "ha" 'newsticker-hide-all-desc)
433 (define-key map "sf" 'newsticker-show-feed-desc)
434 (define-key map "hf" 'newsticker-hide-feed-desc)
435 (define-key map "so" 'newsticker-show-old-item-desc)
436 (define-key map "ho" 'newsticker-hide-old-item-desc)
437 (define-key map "sn" 'newsticker-show-new-item-desc)
438 (define-key map "hn" 'newsticker-hide-new-item-desc)
439 (define-key map "se" 'newsticker-show-entry)
440 (define-key map "he" 'newsticker-hide-entry)
441 (define-key map "sx" 'newsticker-show-extra)
442 (define-key map "hx" 'newsticker-hide-extra)
443
444 (define-key map " " 'scroll-up)
445 (define-key map "q" 'newsticker-close-buffer)
446 (define-key map "p" 'newsticker-previous-item)
447 (define-key map "P" 'newsticker-previous-new-item)
448 (define-key map "F" 'newsticker-previous-feed)
449 (define-key map "\t" 'newsticker-next-item)
450 (define-key map "n" 'newsticker-next-item)
451 (define-key map "N" 'newsticker-next-new-item)
452 (define-key map "f" 'newsticker-next-feed)
453 (define-key map "M" 'newsticker-mark-all-items-as-read)
454 (define-key map "m"
455 'newsticker-mark-all-items-at-point-as-read-and-redraw)
456 (define-key map "o"
457 'newsticker-mark-item-at-point-as-read)
458 (define-key map "O"
459 'newsticker-mark-all-items-at-point-as-read)
460 (define-key map "G" 'newsticker-get-all-news)
461 (define-key map "g" 'newsticker-get-news-at-point)
462 (define-key map "u" 'newsticker-buffer-update)
463 (define-key map "U" 'newsticker-buffer-force-update)
464 (define-key map "a" 'newsticker-add-url)
465
466 (define-key map "i"
467 'newsticker-mark-item-at-point-as-immortal)
468
469 (define-key map "xf"
470 'newsticker-toggle-auto-narrow-to-feed)
471 (define-key map "xi"
472 'newsticker-toggle-auto-narrow-to-item)
473
474 ;; Bind menu to mouse.
475 (define-key map [down-mouse-3] newsticker-menu)
476 ;; Put menu in menu-bar.
477 (define-key map [menu-bar Newsticker]
478 (cons "Newsticker" newsticker-menu))
479
480 map))
481
381(define-derived-mode newsticker-mode fundamental-mode 482(define-derived-mode newsticker-mode fundamental-mode
382 "NewsTicker" 483 "NewsTicker"
383 "Viewing news feeds in Emacs." 484 "Viewing news feeds in Emacs."
@@ -414,114 +515,16 @@ images."
414 (add-to-invisibility-spec 'extra)) 515 (add-to-invisibility-spec 'extra))
415 (newsticker--buffer-set-uptodate nil)) 516 (newsticker--buffer-set-uptodate nil))
416 517
417;; refine its mode-map
418(define-key newsticker-mode-map "sO" 'newsticker-show-old-items)
419(define-key newsticker-mode-map "hO" 'newsticker-hide-old-items)
420(define-key newsticker-mode-map "sa" 'newsticker-show-all-desc)
421(define-key newsticker-mode-map "ha" 'newsticker-hide-all-desc)
422(define-key newsticker-mode-map "sf" 'newsticker-show-feed-desc)
423(define-key newsticker-mode-map "hf" 'newsticker-hide-feed-desc)
424(define-key newsticker-mode-map "so" 'newsticker-show-old-item-desc)
425(define-key newsticker-mode-map "ho" 'newsticker-hide-old-item-desc)
426(define-key newsticker-mode-map "sn" 'newsticker-show-new-item-desc)
427(define-key newsticker-mode-map "hn" 'newsticker-hide-new-item-desc)
428(define-key newsticker-mode-map "se" 'newsticker-show-entry)
429(define-key newsticker-mode-map "he" 'newsticker-hide-entry)
430(define-key newsticker-mode-map "sx" 'newsticker-show-extra)
431(define-key newsticker-mode-map "hx" 'newsticker-hide-extra)
432
433(define-key newsticker-mode-map " " 'scroll-up)
434(define-key newsticker-mode-map "q" 'newsticker-close-buffer)
435(define-key newsticker-mode-map "p" 'newsticker-previous-item)
436(define-key newsticker-mode-map "P" 'newsticker-previous-new-item)
437(define-key newsticker-mode-map "F" 'newsticker-previous-feed)
438(define-key newsticker-mode-map "\t" 'newsticker-next-item)
439(define-key newsticker-mode-map "n" 'newsticker-next-item)
440(define-key newsticker-mode-map "N" 'newsticker-next-new-item)
441(define-key newsticker-mode-map "f" 'newsticker-next-feed)
442(define-key newsticker-mode-map "M" 'newsticker-mark-all-items-as-read)
443(define-key newsticker-mode-map "m"
444 'newsticker-mark-all-items-at-point-as-read-and-redraw)
445(define-key newsticker-mode-map "o"
446 'newsticker-mark-item-at-point-as-read)
447(define-key newsticker-mode-map "O"
448 'newsticker-mark-all-items-at-point-as-read)
449(define-key newsticker-mode-map "G" 'newsticker-get-all-news)
450(define-key newsticker-mode-map "g" 'newsticker-get-news-at-point)
451(define-key newsticker-mode-map "u" 'newsticker-buffer-update)
452(define-key newsticker-mode-map "U" 'newsticker-buffer-force-update)
453(define-key newsticker-mode-map "a" 'newsticker-add-url)
454
455(define-key newsticker-mode-map "i"
456 'newsticker-mark-item-at-point-as-immortal)
457
458(define-key newsticker-mode-map "xf"
459 'newsticker-toggle-auto-narrow-to-feed)
460(define-key newsticker-mode-map "xi"
461 'newsticker-toggle-auto-narrow-to-item)
462
463;; maps for the clickable portions 518;; maps for the clickable portions
464(defvar newsticker--url-keymap (make-sparse-keymap) 519(defvar newsticker--url-keymap
520 (let ((map (make-sparse-keymap)))
521 (define-key map [mouse-1] 'newsticker-mouse-browse-url)
522 (define-key map [mouse-2] 'newsticker-mouse-browse-url)
523 (define-key map "\n" 'newsticker-browse-url)
524 (define-key map "\C-m" 'newsticker-browse-url)
525 (define-key map [(control return)] 'newsticker-handle-url)
526 map)
465 "Key map for click-able headings in the newsticker buffer.") 527 "Key map for click-able headings in the newsticker buffer.")
466(define-key newsticker--url-keymap [mouse-1]
467 'newsticker-mouse-browse-url)
468(define-key newsticker--url-keymap [mouse-2]
469 'newsticker-mouse-browse-url)
470(define-key newsticker--url-keymap "\n"
471 'newsticker-browse-url)
472(define-key newsticker--url-keymap "\C-m"
473 'newsticker-browse-url)
474(define-key newsticker--url-keymap [(control return)]
475 'newsticker-handle-url)
476
477;; newsticker menu
478(defvar newsticker-menu (make-sparse-keymap "Newsticker"))
479
480(define-key newsticker-menu [newsticker-browse-url]
481 '("Browse URL for item at point" . newsticker-browse-url))
482(define-key newsticker-menu [newsticker-separator-1]
483 '("--"))
484(define-key newsticker-menu [newsticker-buffer-update]
485 '("Update buffer" . newsticker-buffer-update))
486(define-key newsticker-menu [newsticker-separator-2]
487 '("--"))
488(define-key newsticker-menu [newsticker-get-all-news]
489 '("Get news from all feeds" . newsticker-get-all-news))
490(define-key newsticker-menu [newsticker-get-news-at-point]
491 '("Get news from feed at point" . newsticker-get-news-at-point))
492(define-key newsticker-menu [newsticker-separator-3]
493 '("--"))
494(define-key newsticker-menu [newsticker-mark-all-items-as-read]
495 '("Mark all items as read" . newsticker-mark-all-items-as-read))
496(define-key newsticker-menu [newsticker-mark-all-items-at-point-as-read]
497 '("Mark all items in feed at point as read" .
498 newsticker-mark-all-items-at-point-as-read))
499(define-key newsticker-menu [newsticker-mark-item-at-point-as-read]
500 '("Mark item at point as read" .
501 newsticker-mark-item-at-point-as-read))
502(define-key newsticker-menu [newsticker-mark-item-at-point-as-immortal]
503 '("Toggle immortality for item at point" .
504 newsticker-mark-item-at-point-as-immortal))
505(define-key newsticker-menu [newsticker-separator-4]
506 '("--"))
507(define-key newsticker-menu [newsticker-toggle-auto-narrow-to-item]
508 '("Narrow to single item" . newsticker-toggle-auto-narrow-to-item))
509(define-key newsticker-menu [newsticker-toggle-auto-narrow-to-feed]
510 '("Narrow to single news feed" . newsticker-toggle-auto-narrow-to-feed))
511(define-key newsticker-menu [newsticker-hide-old-items]
512 '("Hide old items" . newsticker-hide-old-items))
513(define-key newsticker-menu [newsticker-show-old-items]
514 '("Show old items" . newsticker-show-old-items))
515(define-key newsticker-menu [newsticker-next-item]
516 '("Go to next item" . newsticker-next-item))
517(define-key newsticker-menu [newsticker-previous-item]
518 '("Go to previous item" . newsticker-previous-item))
519
520;; bind menu to mouse
521(define-key newsticker-mode-map [down-mouse-3] newsticker-menu)
522;; Put menu in menu-bar
523(define-key newsticker-mode-map [menu-bar Newsticker]
524 (cons "Newsticker" newsticker-menu))
525 528
526 529
527;; ====================================================================== 530;; ======================================================================
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index 62fa7eb0feb..8e4ded624de 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -564,13 +564,13 @@ last ping."
564 (mapc (lambda (process) 564 (mapc (lambda (process)
565 (with-rcirc-process-buffer process 565 (with-rcirc-process-buffer process
566 (when (not rcirc-connecting) 566 (when (not rcirc-connecting)
567 (rcirc-send-string process 567 (rcirc-send-ctcp process
568 (format "PRIVMSG %s :\C-aKEEPALIVE %f\C-a" 568 rcirc-nick
569 rcirc-nick 569 (format "KEEPALIVE %f"
570 (if (featurep 'xemacs) 570 (if (featurep 'xemacs)
571 (time-to-seconds 571 (time-to-seconds
572 (current-time)) 572 (current-time))
573 (float-time))))))) 573 (float-time)))))))
574 (rcirc-process-list)) 574 (rcirc-process-list))
575 ;; no processes, clean up timer 575 ;; no processes, clean up timer
576 (cancel-timer rcirc-keepalive-timer) 576 (cancel-timer rcirc-keepalive-timer)
@@ -714,6 +714,14 @@ Function is called with PROCESS, COMMAND, SENDER, ARGS and LINE.")
714 (rcirc-debug process string) 714 (rcirc-debug process string)
715 (process-send-string process string))) 715 (process-send-string process string)))
716 716
717(defun rcirc-send-privmsg (process target string)
718 (rcirc-send-string process (format "PRIVMSG %s :%s" target string)))
719
720(defun rcirc-send-ctcp (process target request &optional args)
721 (let ((args (if args (concat " " args) "")))
722 (rcirc-send-privmsg process target
723 (format "\C-a%s%s\C-a" request args ""))))
724
717(defun rcirc-buffer-process (&optional buffer) 725(defun rcirc-buffer-process (&optional buffer)
718 "Return the process associated with channel BUFFER. 726 "Return the process associated with channel BUFFER.
719With no argument or nil as argument, use the current buffer." 727With no argument or nil as argument, use the current buffer."
@@ -853,41 +861,43 @@ IRC command completion is performed only if '/' is the first input char."
853 (interactive "zCoding system for outgoing messages: ") 861 (interactive "zCoding system for outgoing messages: ")
854 (setq rcirc-encode-coding-system coding-system)) 862 (setq rcirc-encode-coding-system coding-system))
855 863
856(defvar rcirc-mode-map (make-sparse-keymap) 864(defvar rcirc-mode-map
865 (let ((map (make-sparse-keymap)))
866 (define-key map (kbd "RET") 'rcirc-send-input)
867 (define-key map (kbd "M-p") 'rcirc-insert-prev-input)
868 (define-key map (kbd "M-n") 'rcirc-insert-next-input)
869 (define-key map (kbd "TAB") 'rcirc-complete)
870 (define-key map (kbd "C-c C-b") 'rcirc-browse-url)
871 (define-key map (kbd "C-c C-c") 'rcirc-edit-multiline)
872 (define-key map (kbd "C-c C-j") 'rcirc-cmd-join)
873 (define-key map (kbd "C-c C-k") 'rcirc-cmd-kick)
874 (define-key map (kbd "C-c C-l") 'rcirc-toggle-low-priority)
875 (define-key map (kbd "C-c C-d") 'rcirc-cmd-mode)
876 (define-key map (kbd "C-c C-m") 'rcirc-cmd-msg)
877 (define-key map (kbd "C-c C-r") 'rcirc-cmd-nick) ; rename
878 (define-key map (kbd "C-c C-o") 'rcirc-omit-mode)
879 (define-key map (kbd "M-o") 'rcirc-omit-mode)
880 (define-key map (kbd "C-c C-p") 'rcirc-cmd-part)
881 (define-key map (kbd "C-c C-q") 'rcirc-cmd-query)
882 (define-key map (kbd "C-c C-t") 'rcirc-cmd-topic)
883 (define-key map (kbd "C-c C-n") 'rcirc-cmd-names)
884 (define-key map (kbd "C-c C-w") 'rcirc-cmd-whois)
885 (define-key map (kbd "C-c C-x") 'rcirc-cmd-quit)
886 (define-key map (kbd "C-c TAB") ; C-i
887 'rcirc-toggle-ignore-buffer-activity)
888 (define-key map (kbd "C-c C-s") 'rcirc-switch-to-server-buffer)
889 (define-key map (kbd "C-c C-a") 'rcirc-jump-to-first-unread-line)
890 map)
857 "Keymap for rcirc mode.") 891 "Keymap for rcirc mode.")
858 892
859(define-key rcirc-mode-map (kbd "RET") 'rcirc-send-input) 893(defvar rcirc-browse-url-map
860(define-key rcirc-mode-map (kbd "M-p") 'rcirc-insert-prev-input) 894 (let ((map (make-sparse-keymap)))
861(define-key rcirc-mode-map (kbd "M-n") 'rcirc-insert-next-input) 895 (define-key map (kbd "RET") 'rcirc-browse-url-at-point)
862(define-key rcirc-mode-map (kbd "TAB") 'rcirc-complete) 896 (define-key map (kbd "<mouse-2>") 'rcirc-browse-url-at-mouse)
863(define-key rcirc-mode-map (kbd "C-c C-b") 'rcirc-browse-url) 897 (define-key map [follow-link] 'mouse-face)
864(define-key rcirc-mode-map (kbd "C-c C-c") 'rcirc-edit-multiline) 898 map)
865(define-key rcirc-mode-map (kbd "C-c C-j") 'rcirc-cmd-join)
866(define-key rcirc-mode-map (kbd "C-c C-k") 'rcirc-cmd-kick)
867(define-key rcirc-mode-map (kbd "C-c C-l") 'rcirc-toggle-low-priority)
868(define-key rcirc-mode-map (kbd "C-c C-d") 'rcirc-cmd-mode)
869(define-key rcirc-mode-map (kbd "C-c C-m") 'rcirc-cmd-msg)
870(define-key rcirc-mode-map (kbd "C-c C-r") 'rcirc-cmd-nick) ; rename
871(define-key rcirc-mode-map (kbd "C-c C-o") 'rcirc-omit-mode)
872(define-key rcirc-mode-map (kbd "M-o") 'rcirc-omit-mode)
873(define-key rcirc-mode-map (kbd "C-c C-p") 'rcirc-cmd-part)
874(define-key rcirc-mode-map (kbd "C-c C-q") 'rcirc-cmd-query)
875(define-key rcirc-mode-map (kbd "C-c C-t") 'rcirc-cmd-topic)
876(define-key rcirc-mode-map (kbd "C-c C-n") 'rcirc-cmd-names)
877(define-key rcirc-mode-map (kbd "C-c C-w") 'rcirc-cmd-whois)
878(define-key rcirc-mode-map (kbd "C-c C-x") 'rcirc-cmd-quit)
879(define-key rcirc-mode-map (kbd "C-c TAB") ; C-i
880 'rcirc-toggle-ignore-buffer-activity)
881(define-key rcirc-mode-map (kbd "C-c C-s") 'rcirc-switch-to-server-buffer)
882(define-key rcirc-mode-map (kbd "C-c C-a") 'rcirc-jump-to-first-unread-line)
883
884(defvar rcirc-browse-url-map (make-sparse-keymap)
885 "Keymap used for browsing URLs in `rcirc-mode'.") 899 "Keymap used for browsing URLs in `rcirc-mode'.")
886 900
887(define-key rcirc-browse-url-map (kbd "RET") 'rcirc-browse-url-at-point)
888(define-key rcirc-browse-url-map (kbd "<mouse-2>") 'rcirc-browse-url-at-mouse)
889(define-key rcirc-browse-url-map [follow-link] 'mouse-face)
890
891(defvar rcirc-short-buffer-name nil 901(defvar rcirc-short-buffer-name nil
892 "Generated abbreviation to use to indicate buffer activity.") 902 "Generated abbreviation to use to indicate buffer activity.")
893 903
@@ -1208,16 +1218,14 @@ Create the buffer if it doesn't exist."
1208 (and (> pos 0) (goto-char pos)) 1218 (and (> pos 0) (goto-char pos))
1209 (message "Type C-c C-c to return text to %s, or C-c C-k to cancel" parent)))) 1219 (message "Type C-c C-c to return text to %s, or C-c C-k to cancel" parent))))
1210 1220
1211(defvar rcirc-multiline-minor-mode-map (make-sparse-keymap) 1221(defvar rcirc-multiline-minor-mode-map
1222 (let ((map (make-sparse-keymap)))
1223 (define-key map (kbd "C-c C-c") 'rcirc-multiline-minor-submit)
1224 (define-key map (kbd "C-x C-s") 'rcirc-multiline-minor-submit)
1225 (define-key map (kbd "C-c C-k") 'rcirc-multiline-minor-cancel)
1226 (define-key map (kbd "ESC ESC ESC") 'rcirc-multiline-minor-cancel)
1227 map)
1212 "Keymap for multiline mode in rcirc.") 1228 "Keymap for multiline mode in rcirc.")
1213(define-key rcirc-multiline-minor-mode-map
1214 (kbd "C-c C-c") 'rcirc-multiline-minor-submit)
1215(define-key rcirc-multiline-minor-mode-map
1216 (kbd "C-x C-s") 'rcirc-multiline-minor-submit)
1217(define-key rcirc-multiline-minor-mode-map
1218 (kbd "C-c C-k") 'rcirc-multiline-minor-cancel)
1219(define-key rcirc-multiline-minor-mode-map
1220 (kbd "ESC ESC ESC") 'rcirc-multiline-minor-cancel)
1221 1229
1222(define-minor-mode rcirc-multiline-minor-mode 1230(define-minor-mode rcirc-multiline-minor-mode
1223 "Minor mode for editing multiple lines in rcirc." 1231 "Minor mode for editing multiple lines in rcirc."
@@ -1734,12 +1742,13 @@ This function does not alter the INPUT string."
1734 (mapconcat 'identity sorted sep))) 1742 (mapconcat 'identity sorted sep)))
1735 1743
1736;;; activity tracking 1744;;; activity tracking
1737(defvar rcirc-track-minor-mode-map (make-sparse-keymap) 1745(defvar rcirc-track-minor-mode-map
1746 (let ((map (make-sparse-keymap)))
1747 (define-key map (kbd "C-c C-@") 'rcirc-next-active-buffer)
1748 (define-key map (kbd "C-c C-SPC") 'rcirc-next-active-buffer)
1749 map)
1738 "Keymap for rcirc track minor mode.") 1750 "Keymap for rcirc track minor mode.")
1739 1751
1740(define-key rcirc-track-minor-mode-map (kbd "C-c C-@") 'rcirc-next-active-buffer)
1741(define-key rcirc-track-minor-mode-map (kbd "C-c C-SPC") 'rcirc-next-active-buffer)
1742
1743;;;###autoload 1752;;;###autoload
1744(define-minor-mode rcirc-track-minor-mode 1753(define-minor-mode rcirc-track-minor-mode
1745 "Global minor mode for tracking activity in rcirc buffers." 1754 "Global minor mode for tracking activity in rcirc buffers."
@@ -2190,21 +2199,17 @@ With a prefix arg, prompt for new topic."
2190 (function (intern-soft (concat "rcirc-ctcp-sender-" request)))) 2199 (function (intern-soft (concat "rcirc-ctcp-sender-" request))))
2191 (if (fboundp function) ;; use special function if available 2200 (if (fboundp function) ;; use special function if available
2192 (funcall function process target request) 2201 (funcall function process target request)
2193 (rcirc-send-string process 2202 (rcirc-send-ctcp process target request)))
2194 (format "PRIVMSG %s :\C-a%s\C-a"
2195 target request))))
2196 (rcirc-print process (rcirc-nick process) "ERROR" nil 2203 (rcirc-print process (rcirc-nick process) "ERROR" nil
2197 "usage: /ctcp NICK REQUEST"))) 2204 "usage: /ctcp NICK REQUEST")))
2198 2205
2199(defun rcirc-ctcp-sender-PING (process target request) 2206(defun rcirc-ctcp-sender-PING (process target request)
2200 "Send a CTCP PING message to TARGET." 2207 "Send a CTCP PING message to TARGET."
2201 (let ((timestamp (format "%.0f" (float-time)))) 2208 (let ((timestamp (format "%.0f" (float-time))))
2202 (rcirc-send-string process 2209 (rcirc-send-ctcp process target "PING" timestamp)))
2203 (format "PRIVMSG %s :\C-aPING %s\C-a" target timestamp))))
2204 2210
2205(defun rcirc-cmd-me (args &optional process target) 2211(defun rcirc-cmd-me (args &optional process target)
2206 (rcirc-send-string process (format "PRIVMSG %s :\C-aACTION %s\C-a" 2212 (rcirc-send-ctcp process target "ACTION" args))
2207 target args)))
2208 2213
2209(defun rcirc-add-or-remove (set &rest elements) 2214(defun rcirc-add-or-remove (set &rest elements)
2210 (dolist (elt elements) 2215 (dolist (elt elements)
@@ -2699,20 +2704,20 @@ Passwords are stored in `rcirc-authinfo' (which see)."
2699 (when (and (string-match server rcirc-server) 2704 (when (and (string-match server rcirc-server)
2700 (string-match nick rcirc-nick)) 2705 (string-match nick rcirc-nick))
2701 (cond ((equal method 'nickserv) 2706 (cond ((equal method 'nickserv)
2702 (rcirc-send-string 2707 (rcirc-send-privmsg
2703 process 2708 process
2704 (concat "PRIVMSG " (or (cadr args) "nickserv") 2709 (or (cadr args) "NickServ")
2705 " :identify " (car args)))) 2710 (concat "identify " (car args))))
2706 ((equal method 'chanserv) 2711 ((equal method 'chanserv)
2707 (rcirc-send-string 2712 (rcirc-send-privmsg
2708 process 2713 process
2709 (concat 2714 "ChanServ"
2710 "PRIVMSG chanserv :identify " 2715 (format "identify %s %s" (car args) (cadr args))))
2711 (car args) " " (cadr args))))
2712 ((equal method 'bitlbee) 2716 ((equal method 'bitlbee)
2713 (rcirc-send-string 2717 (rcirc-send-privmsg
2714 process 2718 process
2715 (concat "PRIVMSG &bitlbee :identify " (car args)))) 2719 "&bitlbee"
2720 (concat "identify " (car args))))
2716 (t 2721 (t
2717 (message "No %S authentication method defined" 2722 (message "No %S authentication method defined"
2718 method)))))))) 2723 method))))))))
diff --git a/lisp/org/ChangeLog b/lisp/org/ChangeLog
index b35cf0738bf..5f0908e11c6 100644
--- a/lisp/org/ChangeLog
+++ b/lisp/org/ChangeLog
@@ -1,3 +1,8 @@
12011-02-10 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * org-remember.el (org-remember-mode-map):
4 * org-src.el (org-src-mode-map): Move initialization into declaration.
5
12011-01-13 Stefan Monnier <monnier@iro.umontreal.ca> 62011-01-13 Stefan Monnier <monnier@iro.umontreal.ca>
2 7
3 * org-remember.el (org-remember-mode): 8 * org-remember.el (org-remember-mode):
diff --git a/lisp/org/org-remember.el b/lisp/org/org-remember.el
index 80f9dadd7a4..fd3064a709c 100644
--- a/lisp/org/org-remember.el
+++ b/lisp/org/org-remember.el
@@ -214,7 +214,11 @@ The remember buffer is still current when this hook runs."
214 :group 'org-remember 214 :group 'org-remember
215 :type 'hook) 215 :type 'hook)
216 216
217(defvar org-remember-mode-map (make-sparse-keymap) 217(defvar org-remember-mode-map
218 (let ((map (make-sparse-keymap)))
219 (define-key map "\C-c\C-c" 'org-remember-finalize)
220 (define-key map "\C-c\C-k" 'org-remember-kill)
221 map)
218 "Keymap for `org-remember-mode', a minor mode. 222 "Keymap for `org-remember-mode', a minor mode.
219Use this map to set additional keybindings for when Org-mode is used 223Use this map to set additional keybindings for when Org-mode is used
220for a Remember buffer.") 224for a Remember buffer.")
@@ -224,8 +228,6 @@ for a Remember buffer.")
224(define-minor-mode org-remember-mode 228(define-minor-mode org-remember-mode
225 "Minor mode for special key bindings in a remember buffer." 229 "Minor mode for special key bindings in a remember buffer."
226 nil " Rem" org-remember-mode-map) 230 nil " Rem" org-remember-mode-map)
227(define-key org-remember-mode-map "\C-c\C-c" 'org-remember-finalize)
228(define-key org-remember-mode-map "\C-c\C-k" 'org-remember-kill)
229 231
230(defcustom org-remember-clock-out-on-exit 'query 232(defcustom org-remember-clock-out-on-exit 'query
231 "Non-nil means stop the clock when exiting a clocking remember buffer. 233 "Non-nil means stop the clock when exiting a clocking remember buffer.
diff --git a/lisp/org/org-src.el b/lisp/org/org-src.el
index 07779700da8..98fdb75423d 100644
--- a/lisp/org/org-src.el
+++ b/lisp/org/org-src.el
@@ -169,8 +169,10 @@ For example, there is no ocaml-mode in Emacs, but the mode to use is
169 169
170;;; Editing source examples 170;;; Editing source examples
171 171
172(defvar org-src-mode-map (make-sparse-keymap)) 172(defvar org-src-mode-map
173(define-key org-src-mode-map "\C-c'" 'org-edit-src-exit) 173 (let ((map (make-sparse-keymap)))
174 (define-key map "\C-c'" 'org-edit-src-exit)
175 map))
174 176
175(defvar org-edit-src-force-single-line nil) 177(defvar org-edit-src-force-single-line nil)
176(defvar org-edit-src-from-org-mode nil) 178(defvar org-edit-src-from-org-mode nil)
diff --git a/lisp/play/gametree.el b/lisp/play/gametree.el
index d0ba9b037e7..cd353d27f07 100644
--- a/lisp/play/gametree.el
+++ b/lisp/play/gametree.el
@@ -565,6 +565,20 @@ buffer, it is replaced by the new value. See the documentation for
565 (gametree-hack-file-layout)) 565 (gametree-hack-file-layout))
566 nil) 566 nil)
567 567
568;;;; Key bindings
569(defvar gametree-mode-map
570 (let ((map (make-sparse-keymap)))
571 (define-key map "\C-c\C-j" 'gametree-break-line-here)
572 (define-key map "\C-c\C-v" 'gametree-insert-new-leaf)
573 (define-key map "\C-c\C-m" 'gametree-merge-line)
574 (define-key map "\C-c\C-r " 'gametree-layout-to-register)
575 (define-key map "\C-c\C-r/" 'gametree-layout-to-register)
576 (define-key map "\C-c\C-rj" 'gametree-apply-register-layout)
577 (define-key map "\C-c\C-y" 'gametree-save-and-hack-layout)
578 (define-key map "\C-c;" 'gametree-insert-score)
579 (define-key map "\C-c^" 'gametree-compute-and-insert-score)
580 map))
581
568(define-derived-mode gametree-mode outline-mode "GameTree" 582(define-derived-mode gametree-mode outline-mode "GameTree"
569 "Major mode for managing game analysis trees. 583 "Major mode for managing game analysis trees.
570Useful to postal and email chess (and, it is hoped, also checkers, go, 584Useful to postal and email chess (and, it is hoped, also checkers, go,
@@ -575,18 +589,6 @@ shogi, etc.) players, it is a slightly modified version of Outline mode.
575 (make-local-variable 'write-contents-hooks) 589 (make-local-variable 'write-contents-hooks)
576 (add-hook 'write-contents-hooks 'gametree-save-and-hack-layout)) 590 (add-hook 'write-contents-hooks 'gametree-save-and-hack-layout))
577 591
578;;;; Key bindings
579
580(define-key gametree-mode-map "\C-c\C-j" 'gametree-break-line-here)
581(define-key gametree-mode-map "\C-c\C-v" 'gametree-insert-new-leaf)
582(define-key gametree-mode-map "\C-c\C-m" 'gametree-merge-line)
583(define-key gametree-mode-map "\C-c\C-r " 'gametree-layout-to-register)
584(define-key gametree-mode-map "\C-c\C-r/" 'gametree-layout-to-register)
585(define-key gametree-mode-map "\C-c\C-rj" 'gametree-apply-register-layout)
586(define-key gametree-mode-map "\C-c\C-y" 'gametree-save-and-hack-layout)
587(define-key gametree-mode-map "\C-c;" 'gametree-insert-score)
588(define-key gametree-mode-map "\C-c^" 'gametree-compute-and-insert-score)
589
590;;;; Goodies for mousing users 592;;;; Goodies for mousing users
591(and (fboundp 'track-mouse) 593(and (fboundp 'track-mouse)
592 (defun gametree-mouse-break-line-here (event) 594 (defun gametree-mouse-break-line-here (event)
diff --git a/lisp/play/handwrite.el b/lisp/play/handwrite.el
index 5bab360f9ff..601232e4321 100644
--- a/lisp/play/handwrite.el
+++ b/lisp/play/handwrite.el
@@ -80,8 +80,24 @@
80 80
81(defvar handwrite-psindex 0 81(defvar handwrite-psindex 0
82 "The index of the PostScript buffer.") 82 "The index of the PostScript buffer.")
83(defvar menu-bar-handwrite-map (make-sparse-keymap "Handwrite functions.")) 83(defvar menu-bar-handwrite-map
84(fset 'menu-bar-handwrite-map (symbol-value 'menu-bar-handwrite-map)) 84 (let ((map (make-sparse-keymap "Handwrite functions.")))
85 (define-key map [numbering]
86 '(menu-item "Page numbering" handwrite-set-pagenumber
87 :button (:toggle . handwrite-pagenumbering)))
88 (define-key map [handwrite-separator2] '("----" . nil))
89 (define-key map [10pt] '(menu-item "10 pt" handwrite-10pt
90 :button (:radio . (eq handwrite-fontsize 10))))
91 (define-key map [11pt] '(menu-item "11 pt" handwrite-11pt
92 :button (:radio . (eq handwrite-fontsize 11))))
93 (define-key map [12pt] '(menu-item "12 pt" handwrite-12pt
94 :button (:radio . (eq handwrite-fontsize 12))))
95 (define-key map [13pt] '(menu-item "13 pt" handwrite-13pt
96 :button (:radio . (eq handwrite-fontsize 13))))
97 (define-key map [handwrite-separator1] '("----" . nil))
98 (define-key map [handwrite] '("Write by hand" . handwrite))
99 map))
100(fset 'menu-bar-handwrite-map menu-bar-handwrite-map)
85 101
86 102
87;; User definable variables 103;; User definable variables
@@ -135,10 +151,10 @@
135The functions `handwrite-10pt', `handwrite-11pt', `handwrite-12pt' 151The functions `handwrite-10pt', `handwrite-11pt', `handwrite-12pt'
136and `handwrite-13pt' set up for various sizes of output. 152and `handwrite-13pt' set up for various sizes of output.
137 153
138Variables: handwrite-linespace (default 12) 154Variables: `handwrite-linespace' (default 12)
139 handwrite-fontsize (default 11) 155 `handwrite-fontsize' (default 11)
140 handwrite-numlines (default 60) 156 `handwrite-numlines' (default 60)
141 handwrite-pagenumbering (default nil)" 157 `handwrite-pagenumbering' (default nil)"
142 (interactive) 158 (interactive)
143 (let 159 (let
144 ((pmin) ; thanks, Havard 160 ((pmin) ; thanks, Havard
@@ -258,7 +274,8 @@ Variables: handwrite-linespace (default 12)
258 "Toggle the value of `handwrite-pagenumbering'." 274 "Toggle the value of `handwrite-pagenumbering'."
259 (interactive) 275 (interactive)
260 (if handwrite-pagenumbering 276 (if handwrite-pagenumbering
261 (handwrite-set-pagenumber-off)(handwrite-set-pagenumber-on))) 277 (handwrite-set-pagenumber-off)
278 (handwrite-set-pagenumber-on)))
262 279
263(defun handwrite-10pt () 280(defun handwrite-10pt ()
264 "Specify 10-point output for `handwrite. 281 "Specify 10-point output for `handwrite.
@@ -268,14 +285,6 @@ values for `handwrite-linespace' and `handwrite-numlines'."
268 (setq handwrite-fontsize 10) 285 (setq handwrite-fontsize 10)
269 (setq handwrite-linespace 11) 286 (setq handwrite-linespace 11)
270 (setq handwrite-numlines handwrite-10pt-numlines) 287 (setq handwrite-numlines handwrite-10pt-numlines)
271 (define-key menu-bar-handwrite-map [10pt]
272 '("10 pt *" . handwrite-10pt))
273 (define-key menu-bar-handwrite-map [11pt]
274 '("11 pt" . handwrite-11pt))
275 (define-key menu-bar-handwrite-map [12pt]
276 '("12 pt" . handwrite-12pt))
277 (define-key menu-bar-handwrite-map [13pt]
278 '("13 pt" . handwrite-13pt))
279 (message "Handwrite output size set to 10 points")) 288 (message "Handwrite output size set to 10 points"))
280 289
281 290
@@ -287,14 +296,6 @@ values for `handwrite-linespace' and `handwrite-numlines'."
287 (setq handwrite-fontsize 11) 296 (setq handwrite-fontsize 11)
288 (setq handwrite-linespace 12) 297 (setq handwrite-linespace 12)
289 (setq handwrite-numlines handwrite-11pt-numlines) 298 (setq handwrite-numlines handwrite-11pt-numlines)
290 (define-key menu-bar-handwrite-map [10pt]
291 '("10 pt" . handwrite-10pt))
292 (define-key menu-bar-handwrite-map [11pt]
293 '("11 pt *" . handwrite-11pt))
294 (define-key menu-bar-handwrite-map [12pt]
295 '("12 pt" . handwrite-12pt))
296 (define-key menu-bar-handwrite-map [13pt]
297 '("13 pt" . handwrite-13pt))
298 (message "Handwrite output size set to 11 points")) 299 (message "Handwrite output size set to 11 points"))
299 300
300(defun handwrite-12pt () 301(defun handwrite-12pt ()
@@ -305,14 +306,6 @@ values for `handwrite-linespace' and `handwrite-numlines'."
305 (setq handwrite-fontsize 12) 306 (setq handwrite-fontsize 12)
306 (setq handwrite-linespace 13) 307 (setq handwrite-linespace 13)
307 (setq handwrite-numlines handwrite-12pt-numlines) 308 (setq handwrite-numlines handwrite-12pt-numlines)
308 (define-key menu-bar-handwrite-map [10pt]
309 '("10 pt" . handwrite-10pt))
310 (define-key menu-bar-handwrite-map [11pt]
311 '("11 pt" . handwrite-11pt))
312 (define-key menu-bar-handwrite-map [12pt]
313 '("12 pt *" . handwrite-12pt))
314 (define-key menu-bar-handwrite-map [13pt]
315 '("13 pt" . handwrite-13pt))
316 (message "Handwrite output size set to 12 points")) 309 (message "Handwrite output size set to 12 points"))
317 310
318(defun handwrite-13pt () 311(defun handwrite-13pt ()
@@ -323,14 +316,6 @@ values for `handwrite-linespace' and `handwrite-numlines'."
323 (setq handwrite-fontsize 13) 316 (setq handwrite-fontsize 13)
324 (setq handwrite-linespace 14) 317 (setq handwrite-linespace 14)
325 (setq handwrite-numlines handwrite-13pt-numlines) 318 (setq handwrite-numlines handwrite-13pt-numlines)
326 (define-key menu-bar-handwrite-map [10pt]
327 '("10 pt" . handwrite-10pt))
328 (define-key menu-bar-handwrite-map [11pt]
329 '("11 pt" . handwrite-11pt))
330 (define-key menu-bar-handwrite-map [12pt]
331 '("12 pt" . handwrite-12pt))
332 (define-key menu-bar-handwrite-map [13pt]
333 '("13 pt *" . handwrite-13pt))
334 (message "Handwrite output size set to 13 points")) 319 (message "Handwrite output size set to 13 points"))
335 320
336 321
@@ -1263,62 +1248,24 @@ end
1263;;Sets page numbering off 1248;;Sets page numbering off
1264(defun handwrite-set-pagenumber-off () 1249(defun handwrite-set-pagenumber-off ()
1265 (setq handwrite-pagenumbering nil) 1250 (setq handwrite-pagenumbering nil)
1266 (define-key menu-bar-handwrite-map
1267 [numbering]
1268 '("Page numbering Off" . handwrite-set-pagenumber))
1269 (message "page numbering off")) 1251 (message "page numbering off"))
1270 1252
1271;;Sets page numbering on 1253;;Sets page numbering on
1272(defun handwrite-set-pagenumber-on () 1254(defun handwrite-set-pagenumber-on ()
1273 (setq handwrite-pagenumbering t) 1255 (setq handwrite-pagenumbering t)
1274 (define-key menu-bar-handwrite-map
1275 [numbering]
1276 '("Page numbering On" . handwrite-set-pagenumber))
1277 (message "page numbering on" )) 1256 (message "page numbering on" ))
1278 1257
1279 1258
1280;; Key bindings 1259;; Key bindings
1281 1260
1282 1261;; I'd rather not fill up the menu bar menus with
1283;;; I'd rather not fill up the menu bar menus with 1262;; lots of random miscellaneous features. -- rms.
1284;;; lots of random miscellaneous features. -- rms.
1285;;;(define-key-after 1263;;;(define-key-after
1286;;; (lookup-key global-map [menu-bar edit]) 1264;;; (lookup-key global-map [menu-bar edit])
1287;;; [handwrite] 1265;;; [handwrite]
1288;;; '("Write by hand" . menu-bar-handwrite-map) 1266;;; '("Write by hand" . menu-bar-handwrite-map)
1289;;; 'spell) 1267;;; 'spell)
1290 1268
1291(define-key menu-bar-handwrite-map [numbering]
1292 '("Page numbering Off" . handwrite-set-pagenumber))
1293
1294(define-key menu-bar-handwrite-map [10pt]
1295 '("10 pt" . handwrite-10pt))
1296
1297(define-key menu-bar-handwrite-map [11pt]
1298 '("11 pt *" . handwrite-11pt))
1299
1300(define-key menu-bar-handwrite-map [12pt]
1301 '("12 pt" . handwrite-12pt))
1302
1303(define-key menu-bar-handwrite-map [13pt]
1304 '("13 pt" . handwrite-13pt))
1305
1306(define-key menu-bar-handwrite-map [handwrite]
1307 '("Write by hand" . handwrite))
1308
1309(define-key-after
1310 (lookup-key menu-bar-handwrite-map [ ])
1311 [handwrite-separator1]
1312 '("----" . nil)
1313 'handwrite)
1314
1315(define-key-after
1316 (lookup-key menu-bar-handwrite-map [ ])
1317 [handwrite-separator2]
1318 '("----" . nil)
1319 '10pt)
1320
1321
1322(provide 'handwrite) 1269(provide 'handwrite)
1323 1270
1324 1271
diff --git a/lisp/play/pong.el b/lisp/play/pong.el
index a2912831707..e993e769756 100644
--- a/lisp/play/pong.el
+++ b/lisp/play/pong.el
@@ -190,21 +190,23 @@
190;;; Initialize maps 190;;; Initialize maps
191 191
192(defvar pong-mode-map 192(defvar pong-mode-map
193 (make-sparse-keymap 'pong-mode-map) "Modemap for pong-mode.") 193 (let ((map (make-sparse-keymap 'pong-mode-map)))
194 (define-key map [left] 'pong-move-left)
195 (define-key map [right] 'pong-move-right)
196 (define-key map [up] 'pong-move-up)
197 (define-key map [down] 'pong-move-down)
198 (define-key map pong-left-key 'pong-move-left)
199 (define-key map pong-right-key 'pong-move-right)
200 (define-key map pong-up-key 'pong-move-up)
201 (define-key map pong-down-key 'pong-move-down)
202 (define-key map pong-quit-key 'pong-quit)
203 (define-key map pong-pause-key 'pong-pause)
204 map)
205 "Modemap for pong-mode.")
194 206
195(defvar pong-null-map 207(defvar pong-null-map
196 (make-sparse-keymap 'pong-null-map) "Null map for pong-mode.") 208 (make-sparse-keymap 'pong-null-map) "Null map for pong-mode.")
197 209
198(define-key pong-mode-map [left] 'pong-move-left)
199(define-key pong-mode-map [right] 'pong-move-right)
200(define-key pong-mode-map [up] 'pong-move-up)
201(define-key pong-mode-map [down] 'pong-move-down)
202(define-key pong-mode-map pong-left-key 'pong-move-left)
203(define-key pong-mode-map pong-right-key 'pong-move-right)
204(define-key pong-mode-map pong-up-key 'pong-move-up)
205(define-key pong-mode-map pong-down-key 'pong-move-down)
206(define-key pong-mode-map pong-quit-key 'pong-quit)
207(define-key pong-mode-map pong-pause-key 'pong-pause)
208 210
209 211
210;;; Fun stuff -- The code 212;;; Fun stuff -- The code
diff --git a/lisp/play/snake.el b/lisp/play/snake.el
index 3714e6be4d2..418c898e825 100644
--- a/lisp/play/snake.el
+++ b/lisp/play/snake.el
@@ -174,21 +174,22 @@ and then start moving it leftwards.")
174;; ;;;;;;;;;;;;; keymaps ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 174;; ;;;;;;;;;;;;; keymaps ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
175 175
176(defvar snake-mode-map 176(defvar snake-mode-map
177 (make-sparse-keymap 'snake-mode-map)) 177 (let ((map (make-sparse-keymap 'snake-mode-map)))
178 178
179(define-key snake-mode-map "n" 'snake-start-game) 179 (define-key map "n" 'snake-start-game)
180(define-key snake-mode-map "q" 'snake-end-game) 180 (define-key map "q" 'snake-end-game)
181(define-key snake-mode-map "p" 'snake-pause-game) 181 (define-key map "p" 'snake-pause-game)
182 182
183(define-key snake-mode-map [left] 'snake-move-left) 183 (define-key map [left] 'snake-move-left)
184(define-key snake-mode-map [right] 'snake-move-right) 184 (define-key map [right] 'snake-move-right)
185(define-key snake-mode-map [up] 'snake-move-up) 185 (define-key map [up] 'snake-move-up)
186(define-key snake-mode-map [down] 'snake-move-down) 186 (define-key map [down] 'snake-move-down)
187 map))
187 188
188(defvar snake-null-map 189(defvar snake-null-map
189 (make-sparse-keymap 'snake-null-map)) 190 (let ((map (make-sparse-keymap 'snake-null-map)))
190 191 (define-key map "n" 'snake-start-game)
191(define-key snake-null-map "n" 'snake-start-game) 192 map))
192 193
193;; ;;;;;;;;;;;;;;;; game functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 194;; ;;;;;;;;;;;;;;;; game functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
194 195
diff --git a/lisp/play/solitaire.el b/lisp/play/solitaire.el
index 3e6e941473f..9d6a0ef52b1 100644
--- a/lisp/play/solitaire.el
+++ b/lisp/play/solitaire.el
@@ -41,6 +41,49 @@
41 :type 'hook 41 :type 'hook
42 :group 'solitaire) 42 :group 'solitaire)
43 43
44(defvar solitaire-mode-map
45 (let ((map (make-sparse-keymap)))
46 (set-keymap-parent map special-mode-map)
47
48 (define-key map "\C-f" 'solitaire-right)
49 (define-key map "\C-b" 'solitaire-left)
50 (define-key map "\C-p" 'solitaire-up)
51 (define-key map "\C-n" 'solitaire-down)
52 (define-key map "\r" 'solitaire-move)
53 (define-key map [remap undo] 'solitaire-undo)
54 (define-key map " " 'solitaire-do-check)
55
56 (define-key map [right] 'solitaire-right)
57 (define-key map [left] 'solitaire-left)
58 (define-key map [up] 'solitaire-up)
59 (define-key map [down] 'solitaire-down)
60
61 (define-key map [S-right] 'solitaire-move-right)
62 (define-key map [S-left] 'solitaire-move-left)
63 (define-key map [S-up] 'solitaire-move-up)
64 (define-key map [S-down] 'solitaire-move-down)
65
66 (define-key map [kp-6] 'solitaire-right)
67 (define-key map [kp-4] 'solitaire-left)
68 (define-key map [kp-8] 'solitaire-up)
69 (define-key map [kp-2] 'solitaire-down)
70 (define-key map [kp-5] 'solitaire-center-point)
71
72 (define-key map [S-kp-6] 'solitaire-move-right)
73 (define-key map [S-kp-4] 'solitaire-move-left)
74 (define-key map [S-kp-8] 'solitaire-move-up)
75 (define-key map [S-kp-2] 'solitaire-move-down)
76
77 (define-key map [kp-enter] 'solitaire-move)
78 (define-key map [kp-0] 'solitaire-undo)
79
80 ;; spoil it with s ;)
81 (define-key map [?s] 'solitaire-solve)
82
83 ;; (define-key map [kp-0] 'solitaire-hint) - Not yet provided ;)
84 map)
85 "Keymap for playing Solitaire.")
86
44;; Solitaire mode is suitable only for specially formatted data. 87;; Solitaire mode is suitable only for specially formatted data.
45(put 'solitaire-mode 'mode-class 'special) 88(put 'solitaire-mode 'mode-class 'special)
46 89
@@ -54,41 +97,6 @@ The usual mnemonic keys move the cursor around the board; in addition,
54 (setq truncate-lines t) 97 (setq truncate-lines t)
55 (setq show-trailing-whitespace nil)) 98 (setq show-trailing-whitespace nil))
56 99
57(define-key solitaire-mode-map "\C-f" 'solitaire-right)
58(define-key solitaire-mode-map "\C-b" 'solitaire-left)
59(define-key solitaire-mode-map "\C-p" 'solitaire-up)
60(define-key solitaire-mode-map "\C-n" 'solitaire-down)
61(define-key solitaire-mode-map "\r" 'solitaire-move)
62(define-key solitaire-mode-map [remap undo] 'solitaire-undo)
63(define-key solitaire-mode-map " " 'solitaire-do-check)
64
65(define-key solitaire-mode-map [right] 'solitaire-right)
66(define-key solitaire-mode-map [left] 'solitaire-left)
67(define-key solitaire-mode-map [up] 'solitaire-up)
68(define-key solitaire-mode-map [down] 'solitaire-down)
69
70(define-key solitaire-mode-map [S-right] 'solitaire-move-right)
71(define-key solitaire-mode-map [S-left] 'solitaire-move-left)
72(define-key solitaire-mode-map [S-up] 'solitaire-move-up)
73(define-key solitaire-mode-map [S-down] 'solitaire-move-down)
74
75(define-key solitaire-mode-map [kp-6] 'solitaire-right)
76(define-key solitaire-mode-map [kp-4] 'solitaire-left)
77(define-key solitaire-mode-map [kp-8] 'solitaire-up)
78(define-key solitaire-mode-map [kp-2] 'solitaire-down)
79(define-key solitaire-mode-map [kp-5] 'solitaire-center-point)
80
81(define-key solitaire-mode-map [S-kp-6] 'solitaire-move-right)
82(define-key solitaire-mode-map [S-kp-4] 'solitaire-move-left)
83(define-key solitaire-mode-map [S-kp-8] 'solitaire-move-up)
84(define-key solitaire-mode-map [S-kp-2] 'solitaire-move-down)
85
86(define-key solitaire-mode-map [kp-enter] 'solitaire-move)
87(define-key solitaire-mode-map [kp-0] 'solitaire-undo)
88
89;; spoil it with s ;)
90(define-key solitaire-mode-map [?s] 'solitaire-solve)
91;; (define-key map [kp-0] 'solitaire-hint) - Not yet provided ;)
92(defvar solitaire-stones 0 100(defvar solitaire-stones 0
93 "Counter for the stones that are still there.") 101 "Counter for the stones that are still there.")
94 102
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index bbe9722f548..25d1410621a 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -2983,25 +2983,27 @@ DOC is an optional documentation string."
2983 map) 2983 map)
2984 "Keymap to select format in the header line.") 2984 "Keymap to select format in the header line.")
2985 2985
2986(defvar gdb-memory-format-menu (make-sparse-keymap "Format") 2986(defvar gdb-memory-format-menu
2987 (let ((map (make-sparse-keymap "Format")))
2988
2989 (define-key map [binary]
2990 '(menu-item "Binary" gdb-memory-format-binary
2991 :button (:radio . (equal gdb-memory-format "t"))))
2992 (define-key map [octal]
2993 '(menu-item "Octal" gdb-memory-format-octal
2994 :button (:radio . (equal gdb-memory-format "o"))))
2995 (define-key map [unsigned]
2996 '(menu-item "Unsigned Decimal" gdb-memory-format-unsigned
2997 :button (:radio . (equal gdb-memory-format "u"))))
2998 (define-key map [signed]
2999 '(menu-item "Signed Decimal" gdb-memory-format-signed
3000 :button (:radio . (equal gdb-memory-format "d"))))
3001 (define-key map [hexadecimal]
3002 '(menu-item "Hexadecimal" gdb-memory-format-hexadecimal
3003 :button (:radio . (equal gdb-memory-format "x"))))
3004 map)
2987 "Menu of display formats in the header line.") 3005 "Menu of display formats in the header line.")
2988 3006
2989(define-key gdb-memory-format-menu [binary]
2990 '(menu-item "Binary" gdb-memory-format-binary
2991 :button (:radio . (equal gdb-memory-format "t"))))
2992(define-key gdb-memory-format-menu [octal]
2993 '(menu-item "Octal" gdb-memory-format-octal
2994 :button (:radio . (equal gdb-memory-format "o"))))
2995(define-key gdb-memory-format-menu [unsigned]
2996 '(menu-item "Unsigned Decimal" gdb-memory-format-unsigned
2997 :button (:radio . (equal gdb-memory-format "u"))))
2998(define-key gdb-memory-format-menu [signed]
2999 '(menu-item "Signed Decimal" gdb-memory-format-signed
3000 :button (:radio . (equal gdb-memory-format "d"))))
3001(define-key gdb-memory-format-menu [hexadecimal]
3002 '(menu-item "Hexadecimal" gdb-memory-format-hexadecimal
3003 :button (:radio . (equal gdb-memory-format "x"))))
3004
3005(defun gdb-memory-format-menu (event) 3007(defun gdb-memory-format-menu (event)
3006 (interactive "@e") 3008 (interactive "@e")
3007 (x-popup-menu event gdb-memory-format-menu)) 3009 (x-popup-menu event gdb-memory-format-menu))
@@ -3061,22 +3063,23 @@ DOC is an optional documentation string."
3061 map) 3063 map)
3062 "Keymap to select units in the header line.") 3064 "Keymap to select units in the header line.")
3063 3065
3064(defvar gdb-memory-unit-menu (make-sparse-keymap "Unit") 3066(defvar gdb-memory-unit-menu
3067 (let ((map (make-sparse-keymap "Unit")))
3068 (define-key map [giantwords]
3069 '(menu-item "Giant words" gdb-memory-unit-giant
3070 :button (:radio . (equal gdb-memory-unit 8))))
3071 (define-key map [words]
3072 '(menu-item "Words" gdb-memory-unit-word
3073 :button (:radio . (equal gdb-memory-unit 4))))
3074 (define-key map [halfwords]
3075 '(menu-item "Halfwords" gdb-memory-unit-halfword
3076 :button (:radio . (equal gdb-memory-unit 2))))
3077 (define-key map [bytes]
3078 '(menu-item "Bytes" gdb-memory-unit-byte
3079 :button (:radio . (equal gdb-memory-unit 1))))
3080 map)
3065 "Menu of units in the header line.") 3081 "Menu of units in the header line.")
3066 3082
3067(define-key gdb-memory-unit-menu [giantwords]
3068 '(menu-item "Giant words" gdb-memory-unit-giant
3069 :button (:radio . (equal gdb-memory-unit 8))))
3070(define-key gdb-memory-unit-menu [words]
3071 '(menu-item "Words" gdb-memory-unit-word
3072 :button (:radio . (equal gdb-memory-unit 4))))
3073(define-key gdb-memory-unit-menu [halfwords]
3074 '(menu-item "Halfwords" gdb-memory-unit-halfword
3075 :button (:radio . (equal gdb-memory-unit 2))))
3076(define-key gdb-memory-unit-menu [bytes]
3077 '(menu-item "Bytes" gdb-memory-unit-byte
3078 :button (:radio . (equal gdb-memory-unit 1))))
3079
3080(defun gdb-memory-unit-menu (event) 3083(defun gdb-memory-unit-menu (event)
3081 (interactive "@e") 3084 (interactive "@e")
3082 (x-popup-menu event gdb-memory-unit-menu)) 3085 (x-popup-menu event gdb-memory-unit-menu))
diff --git a/lisp/progmodes/idlw-help.el b/lisp/progmodes/idlw-help.el
index 1b32c7807c6..7202d95c8db 100644
--- a/lisp/progmodes/idlw-help.el
+++ b/lisp/progmodes/idlw-help.el
@@ -219,23 +219,24 @@ support."
219 219
220;; Define the key bindings for the Help application 220;; Define the key bindings for the Help application
221 221
222(defvar idlwave-help-mode-map (make-sparse-keymap) 222(defvar idlwave-help-mode-map
223 (let ((map (make-sparse-keymap)))
224 (define-key map "q" 'idlwave-help-quit)
225 (define-key map "w" 'widen)
226 (define-key map "\C-m" (lambda (arg)
227 (interactive "p")
228 (scroll-up arg)))
229 (define-key map " " 'scroll-up)
230 (define-key map [delete] 'scroll-down)
231 (define-key map "h" 'idlwave-help-find-header)
232 (define-key map "H" 'idlwave-help-find-first-header)
233 (define-key map "." 'idlwave-help-toggle-header-match-and-def)
234 (define-key map "F" 'idlwave-help-fontify)
235 (define-key map "\M-?" 'idlwave-help-return-to-calling-frame)
236 (define-key map "x" 'idlwave-help-return-to-calling-frame)
237 map)
223 "The keymap used in `idlwave-help-mode'.") 238 "The keymap used in `idlwave-help-mode'.")
224 239
225(define-key idlwave-help-mode-map "q" 'idlwave-help-quit)
226(define-key idlwave-help-mode-map "w" 'widen)
227(define-key idlwave-help-mode-map "\C-m" (lambda (arg)
228 (interactive "p")
229 (scroll-up arg)))
230(define-key idlwave-help-mode-map " " 'scroll-up)
231(define-key idlwave-help-mode-map [delete] 'scroll-down)
232(define-key idlwave-help-mode-map "h" 'idlwave-help-find-header)
233(define-key idlwave-help-mode-map "H" 'idlwave-help-find-first-header)
234(define-key idlwave-help-mode-map "." 'idlwave-help-toggle-header-match-and-def)
235(define-key idlwave-help-mode-map "F" 'idlwave-help-fontify)
236(define-key idlwave-help-mode-map "\M-?" 'idlwave-help-return-to-calling-frame)
237(define-key idlwave-help-mode-map "x" 'idlwave-help-return-to-calling-frame)
238
239;; Define the menu for the Help application 240;; Define the menu for the Help application
240 241
241(easy-menu-define 242(easy-menu-define
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index 72b7914e21b..30d9fc21867 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -8265,20 +8265,26 @@ If we do not know about MODULE, just return KEYWORD literally."
8265 ;; keyword - return it as it is. 8265 ;; keyword - return it as it is.
8266 keyword)))) 8266 keyword))))
8267 8267
8268(defvar idlwave-rinfo-mouse-map (make-sparse-keymap)) 8268(defvar idlwave-rinfo-mouse-map
8269(defvar idlwave-rinfo-map (make-sparse-keymap)) 8269 (let ((map (make-sparse-keymap)))
8270(define-key idlwave-rinfo-mouse-map 8270 (define-key map
8271 (if (featurep 'xemacs) [button2] [mouse-2]) 8271 (if (featurep 'xemacs) [button2] [mouse-2])
8272 'idlwave-mouse-active-rinfo) 8272 'idlwave-mouse-active-rinfo)
8273(define-key idlwave-rinfo-mouse-map 8273 (define-key map
8274 (if (featurep 'xemacs) [(shift button2)] [(shift mouse-2)]) 8274 (if (featurep 'xemacs) [(shift button2)] [(shift mouse-2)])
8275 'idlwave-mouse-active-rinfo-shift) 8275 'idlwave-mouse-active-rinfo-shift)
8276(define-key idlwave-rinfo-mouse-map 8276 (define-key map
8277 (if (featurep 'xemacs) [button3] [mouse-3]) 8277 (if (featurep 'xemacs) [button3] [mouse-3])
8278 'idlwave-mouse-active-rinfo-right) 8278 'idlwave-mouse-active-rinfo-right)
8279(define-key idlwave-rinfo-mouse-map " " 'idlwave-active-rinfo-space) 8279 (define-key map " " 'idlwave-active-rinfo-space)
8280(define-key idlwave-rinfo-map "q" 'idlwave-quit-help) 8280 (define-key map "q" 'idlwave-quit-help)
8281(define-key idlwave-rinfo-mouse-map "q" 'idlwave-quit-help) 8281 map))
8282
8283(defvar idlwave-rinfo-map
8284 (let ((map (make-sparse-keymap)))
8285 (define-key map "q" 'idlwave-quit-help)
8286 map))
8287
8282(defvar idlwave-popup-source nil) 8288(defvar idlwave-popup-source nil)
8283(defvar idlwave-rinfo-marker (make-marker)) 8289(defvar idlwave-rinfo-marker (make-marker))
8284 8290
diff --git a/lisp/replace.el b/lisp/replace.el
index 924622b692d..0f8adea2aca 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -757,6 +757,60 @@ a previously found match."
757 count))) 757 count)))
758 758
759 759
760(defvar occur-mode-map
761 (let ((map (make-sparse-keymap)))
762 ;; We use this alternative name, so we can use \\[occur-mode-mouse-goto].
763 (define-key map [mouse-2] 'occur-mode-mouse-goto)
764 (define-key map "\C-c\C-c" 'occur-mode-goto-occurrence)
765 (define-key map "\C-m" 'occur-mode-goto-occurrence)
766 (define-key map "o" 'occur-mode-goto-occurrence-other-window)
767 (define-key map "\C-o" 'occur-mode-display-occurrence)
768 (define-key map "\M-n" 'occur-next)
769 (define-key map "\M-p" 'occur-prev)
770 (define-key map "r" 'occur-rename-buffer)
771 (define-key map "c" 'clone-buffer)
772 (define-key map "\C-c\C-f" 'next-error-follow-minor-mode)
773 (define-key map [menu-bar] (make-sparse-keymap))
774 (define-key map [menu-bar occur]
775 `(cons ,(purecopy "Occur") map))
776 (define-key map [next-error-follow-minor-mode]
777 (menu-bar-make-mm-toggle next-error-follow-minor-mode
778 "Auto Occurrence Display"
779 "Display another occurrence when moving the cursor"))
780 (define-key map [separator-1] menu-bar-separator)
781 (define-key map [kill-this-buffer]
782 `(menu-item ,(purecopy "Kill occur buffer") kill-this-buffer
783 :help ,(purecopy "Kill the current *Occur* buffer")))
784 (define-key map [quit-window]
785 `(menu-item ,(purecopy "Quit occur window") quit-window
786 :help ,(purecopy "Quit the current *Occur* buffer. Bury it, and maybe delete the selected frame")))
787 (define-key map [revert-buffer]
788 `(menu-item ,(purecopy "Revert occur buffer") revert-buffer
789 :help ,(purecopy "Replace the text in the *Occur* buffer with the results of rerunning occur")))
790 (define-key map [clone-buffer]
791 `(menu-item ,(purecopy "Clone occur buffer") clone-buffer
792 :help ,(purecopy "Create and return a twin copy of the current *Occur* buffer")))
793 (define-key map [occur-rename-buffer]
794 `(menu-item ,(purecopy "Rename occur buffer") occur-rename-buffer
795 :help ,(purecopy "Rename the current *Occur* buffer to *Occur: original-buffer-name*.")))
796 (define-key map [separator-2] menu-bar-separator)
797 (define-key map [occur-mode-goto-occurrence-other-window]
798 `(menu-item ,(purecopy "Go To Occurrence Other Window") occur-mode-goto-occurrence-other-window
799 :help ,(purecopy "Go to the occurrence the current line describes, in another window")))
800 (define-key map [occur-mode-goto-occurrence]
801 `(menu-item ,(purecopy "Go To Occurrence") occur-mode-goto-occurrence
802 :help ,(purecopy "Go to the occurrence the current line describes")))
803 (define-key map [occur-mode-display-occurrence]
804 `(menu-item ,(purecopy "Display Occurrence") occur-mode-display-occurrence
805 :help ,(purecopy "Display in another window the occurrence the current line describes")))
806 (define-key map [occur-next]
807 `(menu-item ,(purecopy "Move to next match") occur-next
808 :help ,(purecopy "Move to the Nth (default 1) next match in an Occur mode buffer")))
809 (define-key map [occur-prev]
810 `(menu-item ,(purecopy "Move to previous match") occur-prev
811 :help ,(purecopy "Move to the Nth (default 1) previous match in an Occur mode buffer")))
812 map)
813 "Keymap for `occur-mode'.")
760 814
761(defvar occur-revert-arguments nil 815(defvar occur-revert-arguments nil
762 "Arguments to pass to `occur-1' to revert an Occur mode buffer. 816 "Arguments to pass to `occur-1' to revert an Occur mode buffer.
@@ -792,54 +846,6 @@ Alternatively, click \\[occur-mode-mouse-goto] on an item to go to it.
792 (add-hook 'change-major-mode-hook 'font-lock-defontify nil t) 846 (add-hook 'change-major-mode-hook 'font-lock-defontify nil t)
793 (setq next-error-function 'occur-next-error)) 847 (setq next-error-function 'occur-next-error))
794 848
795(define-key occur-mode-map [mouse-2] 'occur-mode-mouse-goto)
796(define-key occur-mode-map "\C-c\C-c" 'occur-mode-goto-occurrence)
797(define-key occur-mode-map "\C-m" 'occur-mode-goto-occurrence)
798(define-key occur-mode-map "o" 'occur-mode-goto-occurrence-other-window)
799(define-key occur-mode-map "\C-o" 'occur-mode-display-occurrence)
800(define-key occur-mode-map "\M-n" 'occur-next)
801(define-key occur-mode-map "\M-p" 'occur-prev)
802(define-key occur-mode-map "r" 'occur-rename-buffer)
803(define-key occur-mode-map "c" 'clone-buffer)
804(define-key occur-mode-map "\C-c\C-f" 'next-error-follow-minor-mode)
805(define-key occur-mode-map [menu-bar] (make-sparse-keymap))
806(define-key occur-mode-map [menu-bar occur] `(cons ,(purecopy "Occur") map))
807(define-key occur-mode-map [next-error-follow-minor-mode]
808 (menu-bar-make-mm-toggle next-error-follow-minor-mode
809 "Auto Occurrence Display"
810 "Display another occurrence when moving the cursor"))
811(define-key occur-mode-map [separator-1] menu-bar-separator)
812(define-key occur-mode-map [kill-this-buffer]
813 `(menu-item ,(purecopy "Kill occur buffer") kill-this-buffer
814 :help ,(purecopy "Kill the current *Occur* buffer")))
815(define-key occur-mode-map [quit-window]
816 `(menu-item ,(purecopy "Quit occur window") quit-window
817 :help ,(purecopy "Quit the current *Occur* buffer. Bury it, and maybe delete the selected frame")))
818(define-key occur-mode-map [revert-buffer]
819 `(menu-item ,(purecopy "Revert occur buffer") revert-buffer
820 :help ,(purecopy "Replace the text in the *Occur* buffer with the results of rerunning occur")))
821(define-key occur-mode-map [clone-buffer]
822 `(menu-item ,(purecopy "Clone occur buffer") clone-buffer
823 :help ,(purecopy "Create and return a twin copy of the current *Occur* buffer")))
824(define-key occur-mode-map [occur-rename-buffer]
825 `(menu-item ,(purecopy "Rename occur buffer") occur-rename-buffer
826 :help ,(purecopy "Rename the current *Occur* buffer to *Occur: original-buffer-name*.")))
827(define-key occur-mode-map [separator-2] menu-bar-separator)
828(define-key occur-mode-map [occur-mode-goto-occurrence-other-window]
829 `(menu-item ,(purecopy "Go To Occurrence Other Window") occur-mode-goto-occurrence-other-window
830 :help ,(purecopy "Go to the occurrence the current line describes, in another window")))
831(define-key occur-mode-map [occur-mode-goto-occurrence]
832 `(menu-item ,(purecopy "Go To Occurrence") occur-mode-goto-occurrence
833 :help ,(purecopy "Go to the occurrence the current line describes")))
834(define-key occur-mode-map [occur-mode-display-occurrence]
835 `(menu-item ,(purecopy "Display Occurrence") occur-mode-display-occurrence
836 :help ,(purecopy "Display in another window the occurrence the current line describes")))
837(define-key occur-mode-map [occur-next]
838 `(menu-item ,(purecopy "Move to next match") occur-next
839 :help ,(purecopy "Move to the Nth (default 1) next match in an Occur mode buffer")))
840(define-key occur-mode-map [occur-prev]
841 `(menu-item ,(purecopy "Move to previous match") occur-prev
842 :help ,(purecopy "Move to the Nth (default 1) previous match in an Occur mode buffer")))
843(defun occur-revert-function (ignore1 ignore2) 849(defun occur-revert-function (ignore1 ignore2)
844 "Handle `revert-buffer' for Occur mode buffers." 850 "Handle `revert-buffer' for Occur mode buffers."
845 (apply 'occur-1 (append occur-revert-arguments (list (buffer-name))))) 851 (apply 'occur-1 (append occur-revert-arguments (list (buffer-name)))))
diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el
index 10ea1ac23c4..44908a87b8c 100644
--- a/lisp/tar-mode.el
+++ b/lisp/tar-mode.el
@@ -520,7 +520,84 @@ MODE should be an integer which is a file mode value."
520 (goto-char (point-min)) 520 (goto-char (point-min))
521 (restore-buffer-modified-p modified))) 521 (restore-buffer-modified-p modified)))
522 522
523(defvar tar-mode-map
524 (let ((map (make-keymap)))
525 (suppress-keymap map)
526 (define-key map " " 'tar-next-line)
527 (define-key map "C" 'tar-copy)
528 (define-key map "d" 'tar-flag-deleted)
529 (define-key map "\^D" 'tar-flag-deleted)
530 (define-key map "e" 'tar-extract)
531 (define-key map "f" 'tar-extract)
532 (define-key map "\C-m" 'tar-extract)
533 (define-key map [mouse-2] 'tar-mouse-extract)
534 (define-key map "g" 'revert-buffer)
535 (define-key map "n" 'tar-next-line)
536 (define-key map "\^N" 'tar-next-line)
537 (define-key map [down] 'tar-next-line)
538 (define-key map "o" 'tar-extract-other-window)
539 (define-key map "p" 'tar-previous-line)
540 (define-key map "\^P" 'tar-previous-line)
541 (define-key map [up] 'tar-previous-line)
542 (define-key map "R" 'tar-rename-entry)
543 (define-key map "u" 'tar-unflag)
544 (define-key map "v" 'tar-view)
545 (define-key map "x" 'tar-expunge)
546 (define-key map "\177" 'tar-unflag-backwards)
547 (define-key map "E" 'tar-extract-other-window)
548 (define-key map "M" 'tar-chmod-entry)
549 (define-key map "G" 'tar-chgrp-entry)
550 (define-key map "O" 'tar-chown-entry)
551 ;; Let mouse-1 follow the link.
552 (define-key map [follow-link] 'mouse-face)
553
554 ;; Make menu bar items.
555
556 ;; Get rid of the Edit menu bar item to save space.
557 (define-key map [menu-bar edit] 'undefined)
558
559 (define-key map [menu-bar immediate]
560 (cons "Immediate" (make-sparse-keymap "Immediate")))
561
562 (define-key map [menu-bar immediate view]
563 '("View This File" . tar-view))
564 (define-key map [menu-bar immediate display]
565 '("Display in Other Window" . tar-display-other-window))
566 (define-key map [menu-bar immediate find-file-other-window]
567 '("Find in Other Window" . tar-extract-other-window))
568 (define-key map [menu-bar immediate find-file]
569 '("Find This File" . tar-extract))
570
571 (define-key map [menu-bar mark]
572 (cons "Mark" (make-sparse-keymap "Mark")))
573
574 (define-key map [menu-bar mark unmark-all]
575 '("Unmark All" . tar-clear-modification-flags))
576 (define-key map [menu-bar mark deletion]
577 '("Flag" . tar-flag-deleted))
578 (define-key map [menu-bar mark unmark]
579 '("Unflag" . tar-unflag))
580
581 (define-key map [menu-bar operate]
582 (cons "Operate" (make-sparse-keymap "Operate")))
583
584 (define-key map [menu-bar operate chown]
585 '("Change Owner..." . tar-chown-entry))
586 (define-key map [menu-bar operate chgrp]
587 '("Change Group..." . tar-chgrp-entry))
588 (define-key map [menu-bar operate chmod]
589 '("Change Mode..." . tar-chmod-entry))
590 (define-key map [menu-bar operate rename]
591 '("Rename to..." . tar-rename-entry))
592 (define-key map [menu-bar operate copy]
593 '("Copy to..." . tar-copy))
594 (define-key map [menu-bar operate expunge]
595 '("Expunge Marked Files" . tar-expunge))
596
597 map)
598 "Local keymap for Tar mode listings.")
523 599
600
524;; tar mode is suitable only for specially formatted data. 601;; tar mode is suitable only for specially formatted data.
525(put 'tar-mode 'mode-class 'special) 602(put 'tar-mode 'mode-class 'special)
526(put 'tar-subfile-mode 'mode-class 'special) 603(put 'tar-subfile-mode 'mode-class 'special)
@@ -590,77 +667,6 @@ See also: variables `tar-update-datestamp' and `tar-anal-blocksize'.
590 (fundamental-mode) 667 (fundamental-mode)
591 (signal (car err) (cdr err))))) 668 (signal (car err) (cdr err)))))
592 669
593(define-key tar-mode-map " " 'tar-next-line)
594(define-key tar-mode-map "C" 'tar-copy)
595(define-key tar-mode-map "d" 'tar-flag-deleted)
596(define-key tar-mode-map "\^D" 'tar-flag-deleted)
597(define-key tar-mode-map "e" 'tar-extract)
598(define-key tar-mode-map "f" 'tar-extract)
599(define-key tar-mode-map "\C-m" 'tar-extract)
600(define-key tar-mode-map [mouse-2] 'tar-mouse-extract)
601(define-key tar-mode-map "g" 'revert-buffer)
602(define-key tar-mode-map "h" 'describe-mode)
603(define-key tar-mode-map "n" 'tar-next-line)
604(define-key tar-mode-map "\^N" 'tar-next-line)
605(define-key tar-mode-map [down] 'tar-next-line)
606(define-key tar-mode-map "o" 'tar-extract-other-window)
607(define-key tar-mode-map "p" 'tar-previous-line)
608(define-key tar-mode-map "\^P" 'tar-previous-line)
609(define-key tar-mode-map [up] 'tar-previous-line)
610(define-key tar-mode-map "R" 'tar-rename-entry)
611(define-key tar-mode-map "u" 'tar-unflag)
612(define-key tar-mode-map "v" 'tar-view)
613(define-key tar-mode-map "x" 'tar-expunge)
614(define-key tar-mode-map "\177" 'tar-unflag-backwards)
615(define-key tar-mode-map "E" 'tar-extract-other-window)
616(define-key tar-mode-map "M" 'tar-chmod-entry)
617(define-key tar-mode-map "G" 'tar-chgrp-entry)
618(define-key tar-mode-map "O" 'tar-chown-entry)
619;; Let mouse-1 follow the link.
620(define-key tar-mode-map [follow-link] 'mouse-face)
621
622;; Make menu bar items.
623
624;; Get rid of the Edit menu bar item to save space.
625(define-key tar-mode-map [menu-bar edit] 'undefined)
626
627(define-key tar-mode-map [menu-bar immediate]
628 (cons "Immediate" (make-sparse-keymap "Immediate")))
629
630(define-key tar-mode-map [menu-bar immediate view]
631 '("View This File" . tar-view))
632(define-key tar-mode-map [menu-bar immediate display]
633 '("Display in Other Window" . tar-display-other-window))
634(define-key tar-mode-map [menu-bar immediate find-file-other-window]
635 '("Find in Other Window" . tar-extract-other-window))
636(define-key tar-mode-map [menu-bar immediate find-file]
637 '("Find This File" . tar-extract))
638
639(define-key tar-mode-map [menu-bar mark]
640 (cons "Mark" (make-sparse-keymap "Mark")))
641
642(define-key tar-mode-map [menu-bar mark unmark-all]
643 '("Unmark All" . tar-clear-modification-flags))
644(define-key tar-mode-map [menu-bar mark deletion]
645 '("Flag" . tar-flag-deleted))
646(define-key tar-mode-map [menu-bar mark unmark]
647 '("Unflag" . tar-unflag))
648
649(define-key tar-mode-map [menu-bar operate]
650 (cons "Operate" (make-sparse-keymap "Operate")))
651
652(define-key tar-mode-map [menu-bar operate chown]
653 '("Change Owner..." . tar-chown-entry))
654(define-key tar-mode-map [menu-bar operate chgrp]
655 '("Change Group..." . tar-chgrp-entry))
656(define-key tar-mode-map [menu-bar operate chmod]
657 '("Change Mode..." . tar-chmod-entry))
658(define-key tar-mode-map [menu-bar operate rename]
659 '("Rename to..." . tar-rename-entry))
660(define-key tar-mode-map [menu-bar operate copy]
661 '("Copy to..." . tar-copy))
662(define-key tar-mode-map [menu-bar operate expunge]
663 '("Expunge Marked Files" . tar-expunge))
664 670
665(define-minor-mode tar-subfile-mode 671(define-minor-mode tar-subfile-mode
666 "Minor mode for editing an element of a tar-file. 672 "Minor mode for editing an element of a tar-file.
diff --git a/lisp/term/lk201.el b/lisp/term/lk201.el
index 23f4d0dbd2c..e1da0f6f1db 100644
--- a/lisp/term/lk201.el
+++ b/lisp/term/lk201.el
@@ -1,75 +1,77 @@
1;; -*- no-byte-compile: t -*- 1;; -*- no-byte-compile: t -*-
2;; Define function key sequences for DEC terminals. 2;; Define function key sequences for DEC terminals.
3 3
4(defvar lk201-function-map (make-sparse-keymap) 4(defvar lk201-function-map
5 "Function key definitions for DEC terminals.") 5 (let ((map (make-sparse-keymap)))
6 6
7;; Termcap or terminfo should set these. 7 ;; Termcap or terminfo should set these.
8;; (define-key lk201-function-map "\e[A" [up]) 8 ;; (define-key map "\e[A" [up])
9;; (define-key lk201-function-map "\e[B" [down]) 9 ;; (define-key map "\e[B" [down])
10;; (define-key lk201-function-map "\e[C" [right]) 10 ;; (define-key map "\e[C" [right])
11;; (define-key lk201-function-map "\e[D" [left]) 11 ;; (define-key map "\e[D" [left])
12 12
13(define-key lk201-function-map "\e[1~" [find]) 13 (define-key map "\e[1~" [find])
14(define-key lk201-function-map "\e[2~" [insert]) 14 (define-key map "\e[2~" [insert])
15(define-key lk201-function-map "\e[3~" [delete]) 15 (define-key map "\e[3~" [delete])
16(define-key lk201-function-map "\e[4~" [select]) 16 (define-key map "\e[4~" [select])
17(define-key lk201-function-map "\e[5~" [prior]) 17 (define-key map "\e[5~" [prior])
18(define-key lk201-function-map "\e[6~" [next]) 18 (define-key map "\e[6~" [next])
19(define-key lk201-function-map "\e[11~" [f1]) 19 (define-key map "\e[11~" [f1])
20(define-key lk201-function-map "\e[12~" [f2]) 20 (define-key map "\e[12~" [f2])
21(define-key lk201-function-map "\e[13~" [f3]) 21 (define-key map "\e[13~" [f3])
22(define-key lk201-function-map "\e[14~" [f4]) 22 (define-key map "\e[14~" [f4])
23(define-key lk201-function-map "\e[15~" [f5]) 23 (define-key map "\e[15~" [f5])
24(define-key lk201-function-map "\e[17~" [f6]) 24 (define-key map "\e[17~" [f6])
25(define-key lk201-function-map "\e[18~" [f7]) 25 (define-key map "\e[18~" [f7])
26(define-key lk201-function-map "\e[19~" [f8]) 26 (define-key map "\e[19~" [f8])
27(define-key lk201-function-map "\e[20~" [f9]) 27 (define-key map "\e[20~" [f9])
28(define-key lk201-function-map "\e[21~" [f10]) 28 (define-key map "\e[21~" [f10])
29;; Customarily F11 is used as the ESC key. 29 ;; Customarily F11 is used as the ESC key.
30;; The file that includes this one, takes care of that. 30 ;; The file that includes this one, takes care of that.
31(define-key lk201-function-map "\e[23~" [f11]) 31 (define-key map "\e[23~" [f11])
32(define-key lk201-function-map "\e[24~" [f12]) 32 (define-key map "\e[24~" [f12])
33(define-key lk201-function-map "\e[25~" [f13]) 33 (define-key map "\e[25~" [f13])
34(define-key lk201-function-map "\e[26~" [f14]) 34 (define-key map "\e[26~" [f14])
35(define-key lk201-function-map "\e[28~" [help]) 35 (define-key map "\e[28~" [help])
36(define-key lk201-function-map "\e[29~" [menu]) 36 (define-key map "\e[29~" [menu])
37(define-key lk201-function-map "\e[31~" [f17]) 37 (define-key map "\e[31~" [f17])
38(define-key lk201-function-map "\e[32~" [f18]) 38 (define-key map "\e[32~" [f18])
39(define-key lk201-function-map "\e[33~" [f19]) 39 (define-key map "\e[33~" [f19])
40(define-key lk201-function-map "\e[34~" [f20]) 40 (define-key map "\e[34~" [f20])
41 41
42;; Termcap or terminfo should set these. 42 ;; Termcap or terminfo should set these.
43;; (define-key lk201-function-map "\eOA" [up]) 43 ;; (define-key map "\eOA" [up])
44;; (define-key lk201-function-map "\eOB" [down]) 44 ;; (define-key map "\eOB" [down])
45;; (define-key lk201-function-map "\eOC" [right]) 45 ;; (define-key map "\eOC" [right])
46;; (define-key lk201-function-map "\eOD" [left]) 46 ;; (define-key map "\eOD" [left])
47 47
48;; Termcap or terminfo should set these, but doesn't properly. 48 ;; Termcap or terminfo should set these, but doesn't properly.
49;; Termcap sets these to k1-k4, which get mapped to f1-f4 in term.c 49 ;; Termcap sets these to k1-k4, which get mapped to f1-f4 in term.c
50(define-key lk201-function-map "\eOP" [kp-f1]) 50 (define-key map "\eOP" [kp-f1])
51(define-key lk201-function-map "\eOQ" [kp-f2]) 51 (define-key map "\eOQ" [kp-f2])
52(define-key lk201-function-map "\eOR" [kp-f3]) 52 (define-key map "\eOR" [kp-f3])
53(define-key lk201-function-map "\eOS" [kp-f4]) 53 (define-key map "\eOS" [kp-f4])
54 54
55(define-key lk201-function-map "\eOI" [kp-tab]) 55 (define-key map "\eOI" [kp-tab])
56(define-key lk201-function-map "\eOj" [kp-multiply]) 56 (define-key map "\eOj" [kp-multiply])
57(define-key lk201-function-map "\eOk" [kp-add]) 57 (define-key map "\eOk" [kp-add])
58(define-key lk201-function-map "\eOl" [kp-separator]) 58 (define-key map "\eOl" [kp-separator])
59(define-key lk201-function-map "\eOM" [kp-enter]) 59 (define-key map "\eOM" [kp-enter])
60(define-key lk201-function-map "\eOm" [kp-subtract]) 60 (define-key map "\eOm" [kp-subtract])
61(define-key lk201-function-map "\eOn" [kp-decimal]) 61 (define-key map "\eOn" [kp-decimal])
62(define-key lk201-function-map "\eOo" [kp-divide]) 62 (define-key map "\eOo" [kp-divide])
63(define-key lk201-function-map "\eOp" [kp-0]) 63 (define-key map "\eOp" [kp-0])
64(define-key lk201-function-map "\eOq" [kp-1]) 64 (define-key map "\eOq" [kp-1])
65(define-key lk201-function-map "\eOr" [kp-2]) 65 (define-key map "\eOr" [kp-2])
66(define-key lk201-function-map "\eOs" [kp-3]) 66 (define-key map "\eOs" [kp-3])
67(define-key lk201-function-map "\eOt" [kp-4]) 67 (define-key map "\eOt" [kp-4])
68(define-key lk201-function-map "\eOu" [kp-5]) 68 (define-key map "\eOu" [kp-5])
69(define-key lk201-function-map "\eOv" [kp-6]) 69 (define-key map "\eOv" [kp-6])
70(define-key lk201-function-map "\eOw" [kp-7]) 70 (define-key map "\eOw" [kp-7])
71(define-key lk201-function-map "\eOx" [kp-8]) 71 (define-key map "\eOx" [kp-8])
72(define-key lk201-function-map "\eOy" [kp-9]) 72 (define-key map "\eOy" [kp-9])
73 map)
74 "Function key definitions for DEC terminals.")
73 75
74(defun terminal-init-lk201 () 76(defun terminal-init-lk201 ()
75 ;; Use inheritance to let the main keymap override these defaults. 77 ;; Use inheritance to let the main keymap override these defaults.
diff --git a/lisp/textmodes/bib-mode.el b/lisp/textmodes/bib-mode.el
index 728f42779bf..17ddd1de954 100644
--- a/lisp/textmodes/bib-mode.el
+++ b/lisp/textmodes/bib-mode.el
@@ -47,11 +47,14 @@
47 :type 'file 47 :type 'file
48 :group 'bib) 48 :group 'bib)
49 49
50(defvar bib-mode-map (copy-keymap text-mode-map)) 50(defvar bib-mode-map
51(define-key bib-mode-map "\C-M" 'return-key-bib) 51 (let ((map (make-sparse-keymap)))
52(define-key bib-mode-map "\C-c\C-u" 'unread-bib) 52 (set-keymap-parent map text-mode-map)
53(define-key bib-mode-map "\C-c\C-@" 'mark-bib) 53 (define-key map "\C-M" 'return-key-bib)
54(define-key bib-mode-map "\e`" 'abbrev-mode) 54 (define-key map "\C-c\C-u" 'unread-bib)
55 (define-key map "\C-c\C-@" 'mark-bib)
56 (define-key map "\e`" 'abbrev-mode)
57 map))
55 58
56(defun addbib () 59(defun addbib ()
57 "Set up editor to add to troff bibliography file specified 60 "Set up editor to add to troff bibliography file specified
diff --git a/lisp/textmodes/enriched.el b/lisp/textmodes/enriched.el
index f6677bf458e..357b9d6c94e 100644
--- a/lisp/textmodes/enriched.el
+++ b/lisp/textmodes/enriched.el
@@ -164,6 +164,24 @@ The value is a list of \(VAR VALUE VAR VALUE...).")
164(defvar enriched-rerun-flag nil) 164(defvar enriched-rerun-flag nil)
165 165
166;;; 166;;;
167;;; Keybindings
168;;;
169
170(defvar enriched-mode-map
171 (let ((map (make-sparse-keymap)))
172 (define-key map [remap move-beginning-of-line] 'beginning-of-line-text)
173 (define-key map "\C-m" 'reindent-then-newline-and-indent)
174 (define-key map
175 [remap newline-and-indent] 'reindent-then-newline-and-indent)
176 (define-key map "\M-j" 'facemenu-justification-menu)
177 (define-key map "\M-S" 'set-justification-center)
178 (define-key map "\C-x\t" 'increase-left-margin)
179 (define-key map "\C-c[" 'set-left-margin)
180 (define-key map "\C-c]" 'set-right-margin)
181 map)
182 "Keymap for Enriched mode.")
183
184;;;
167;;; Define the mode 185;;; Define the mode
168;;; 186;;;
169 187
@@ -184,6 +202,8 @@ Commands:
184 :group 'enriched :lighter " Enriched" 202 :group 'enriched :lighter " Enriched"
185 (cond ((null enriched-mode) 203 (cond ((null enriched-mode)
186 ;; Turn mode off 204 ;; Turn mode off
205 (remove-hook 'change-major-mode-hook
206 'enriched-before-change-major-mode 'local)
187 (setq buffer-file-format (delq 'text/enriched buffer-file-format)) 207 (setq buffer-file-format (delq 'text/enriched buffer-file-format))
188 ;; restore old variable values 208 ;; restore old variable values
189 (while enriched-old-bindings 209 (while enriched-old-bindings
@@ -199,6 +219,8 @@ Commands:
199 nil) 219 nil)
200 220
201 (t ; Turn mode on 221 (t ; Turn mode on
222 (add-hook 'change-major-mode-hook
223 'enriched-before-change-major-mode nil 'local)
202 (add-to-list 'buffer-file-format 'text/enriched) 224 (add-to-list 'buffer-file-format 'text/enriched)
203 ;; Save old variable values before we change them. 225 ;; Save old variable values before we change them.
204 ;; These will be restored if we exit Enriched mode. 226 ;; These will be restored if we exit Enriched mode.
@@ -226,8 +248,6 @@ Commands:
226 (while enriched-old-bindings 248 (while enriched-old-bindings
227 (set (pop enriched-old-bindings) (pop enriched-old-bindings))))) 249 (set (pop enriched-old-bindings) (pop enriched-old-bindings)))))
228 250
229(add-hook 'change-major-mode-hook 'enriched-before-change-major-mode)
230
231(defun enriched-after-change-major-mode () 251(defun enriched-after-change-major-mode ()
232 (when enriched-mode 252 (when enriched-mode
233 (let ((enriched-rerun-flag t)) 253 (let ((enriched-rerun-flag t))
@@ -235,30 +255,8 @@ Commands:
235 255
236(add-hook 'after-change-major-mode-hook 'enriched-after-change-major-mode) 256(add-hook 'after-change-major-mode-hook 'enriched-after-change-major-mode)
237 257
238;;;
239;;; Keybindings
240;;;
241
242(defvar enriched-mode-map nil
243 "Keymap for Enriched mode.")
244 258
245(if (null enriched-mode-map) 259(fset 'enriched-mode-map enriched-mode-map)
246 (fset 'enriched-mode-map (setq enriched-mode-map (make-sparse-keymap))))
247
248(if (not (assq 'enriched-mode minor-mode-map-alist))
249 (setq minor-mode-map-alist
250 (cons (cons 'enriched-mode enriched-mode-map)
251 minor-mode-map-alist)))
252
253(define-key enriched-mode-map [remap move-beginning-of-line] 'beginning-of-line-text)
254(define-key enriched-mode-map "\C-m" 'reindent-then-newline-and-indent)
255(define-key enriched-mode-map
256 [remap newline-and-indent] 'reindent-then-newline-and-indent)
257(define-key enriched-mode-map "\M-j" 'facemenu-justification-menu)
258(define-key enriched-mode-map "\M-S" 'set-justification-center)
259(define-key enriched-mode-map "\C-x\t" 'increase-left-margin)
260(define-key enriched-mode-map "\C-c[" 'set-left-margin)
261(define-key enriched-mode-map "\C-c]" 'set-right-margin)
262 260
263;;; 261;;;
264;;; Some functions dealing with text-properties, especially indentation 262;;; Some functions dealing with text-properties, especially indentation