Mercurial > emacs
annotate lisp/emacs-lisp/easymenu.el @ 69713:75b06a7624a1
* images/README: Update with following information.
* images/data-save.xpm, images/mail/flag-for-followup.xpm:
* images/zoom-in.xpm, images/zoom-out.xpm: New images from GNOME 2.12.
* images/contact.pbm, images/data-save.pbm, images/delete.pbm:
* images/mail/flag-for-followup.pbm, images/mail/inbox.pbm:
* images/mail/move.pbm, images/next-page.pbm, images/zoom-out.pbm: New
bitmaps for new images.
* images/refresh.xpm, images/sort-ascending.xpm,
* images/sort-descending.xpm: Update with GTK 2.x images. Note that the
default GTK icons are not overridden by the GNOME theme due to a bug
which was fixed in GNOME 2.15. Once GNOME 2.16 is in wide circulation,
then the GTK icons should be replaced with the equivalent GNOME icons.
Until then, we should be consistent with GTK first, then GNOME.
* images/mail/repack.xpm, images/mail/reply-from.xpm:
* images/mail/reply-to.xpm, images/search-replace.xpm:
* images/separator.xpm, images/show.xpm: Update custom icons to be
closer to their GNOME counterparts.
* images/attach.pbm, images/exit.pbm, images/mail/compose.pbm:
* images/mail/repack.pbm, images/mail/reply-all.pbm:
* images/mail/reply-from.pbm, images/mail/reply-to.pbm:
* images/mail/reply.pbm, images/mail/send.pbm, images/show.pbm:
* images/search-replace.pbm: Update bitmaps.
* images/execute.pbm, images/execute.xpm, images/fld-open.pbm:
* images/fld-open.xpm, images/highlight.pbm, images/highlight.xpm:
* images/mail.pbm, images/mail.xpm, images/mail/alias.pbm:
* images/mail/alias.xpm, images/mail/refile.pbm:
* images/mail/refile.xpm, images/page-down.pbm, images/page-down.xpm:
* images/widen.pbm, images/widen.xpm: Remove custom MH-E icons since
MH-E is now using the equivalent GTK/GNOME icons.
author | Bill Wohler <wohler@newt.com> |
---|---|
date | Tue, 28 Mar 2006 19:15:30 +0000 |
parents | 067115a6e738 |
children | 1d4b1a32fd66 c5406394f567 |
rev | line source |
---|---|
38431
853c3674f20a
Fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
34541
diff
changeset
|
1 ;;; easymenu.el --- support the easymenu interface for defining a menu |
6529 | 2 |
64751
5b1a238fcbb4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64085
diff
changeset
|
3 ;; Copyright (C) 1994, 1996, 1998, 1999, 2000, 2002, 2003, 2004, |
68648
067115a6e738
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
66495
diff
changeset
|
4 ;; 2005, 2006 Free Software Foundation, Inc. |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
5 |
6529 | 6 ;; Keywords: emulations |
38431
853c3674f20a
Fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
34541
diff
changeset
|
7 ;; Author: Richard Stallman <rms@gnu.org> |
6529 | 8 |
9 ;; This file is part of GNU Emacs. | |
10 | |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 ;; it under the terms of the GNU General Public License as published by | |
13 ;; the Free Software Foundation; either version 2, or (at your option) | |
14 ;; any later version. | |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
14169 | 22 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
64085 | 23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
24 ;; Boston, MA 02110-1301, USA. | |
6529 | 25 |
14169 | 26 ;;; Commentary: |
27 | |
28 ;; This is compatible with easymenu.el by Per Abrahamsen | |
29 ;; but it is much simpler as it doesn't try to support other Emacs versions. | |
30 ;; The code was mostly derived from lmenu.el. | |
6529 | 31 |
32 ;;; Code: | |
33 | |
22196
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
34 (defcustom easy-menu-precalculate-equivalent-keybindings t |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
35 "Determine when equivalent key bindings are computed for easy-menu menus. |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
36 It can take some time to calculate the equivalent key bindings that are shown |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
37 in a menu. If the variable is on, then this calculation gives a (maybe |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
38 noticeable) delay when a mode is first entered. If the variable is off, then |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
39 this delay will come when a menu is displayed the first time. If you never use |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
40 menus, turn this variable off, otherwise it is probably better to keep it on." |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
41 :type 'boolean |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
42 :group 'menu |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
43 :version "20.3") |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
44 |
42014
198c1186dee3
(easy-menu-intern): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38431
diff
changeset
|
45 (defsubst easy-menu-intern (s) |
58097
21dc9bd90575
(easy-menu-intern): Revert to no-downcasing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57978
diff
changeset
|
46 (if (stringp s) (intern s) s)) |
42014
198c1186dee3
(easy-menu-intern): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38431
diff
changeset
|
47 |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
48 ;;;###autoload |
34520
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
49 (put 'easy-menu-define 'lisp-indent-function 'defun) |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
50 ;;;###autoload |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
51 (defmacro easy-menu-define (symbol maps doc menu) |
6529 | 52 "Define a menu bar submenu in maps MAPS, according to MENU. |
48942
86ecd875b9c5
(easy-menu-do-define): Handle nil for SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
47550
diff
changeset
|
53 |
86ecd875b9c5
(easy-menu-do-define): Handle nil for SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
47550
diff
changeset
|
54 If SYMBOL is non-nil, store the menu keymap in the value of SYMBOL, |
86ecd875b9c5
(easy-menu-do-define): Handle nil for SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
47550
diff
changeset
|
55 and define SYMBOL as a function to pop up the menu, with DOC as its doc string. |
86ecd875b9c5
(easy-menu-do-define): Handle nil for SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
47550
diff
changeset
|
56 If SYMBOL is nil, just store the menu keymap into MAPS. |
6529 | 57 |
58 The first element of MENU must be a string. It is the menu bar item name. | |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
59 It may be followed by the following keyword argument pairs |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
60 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
61 :filter FUNCTION |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
62 |
53373
98e63f90453a
(easy-menu-define): Doc fix.
Eli Zaretskii <eliz@is.elta.co.il>
parents:
52401
diff
changeset
|
63 FUNCTION is a function with one argument, the rest of menu items. |
98e63f90453a
(easy-menu-define): Doc fix.
Eli Zaretskii <eliz@is.elta.co.il>
parents:
52401
diff
changeset
|
64 It returns the remaining items of the displayed menu. |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
65 |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
66 :visible INCLUDE |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
67 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
68 INCLUDE is an expression; this menu is only visible if this |
62301
2acfd9cf6713
(easy-menu-define): Doc fixes.
Nick Roberts <nickrob@snap.net.nz>
parents:
61763
diff
changeset
|
69 expression has a non-nil value. `:included' is an alias for `:visible'. |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
70 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
71 :active ENABLE |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
72 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
73 ENABLE is an expression; the menu is enabled for selection |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
74 whenever this expression's value is non-nil. |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
75 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
76 The rest of the elements in MENU, are menu items. |
6529 | 77 |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
78 A menu item is usually a vector of three elements: [NAME CALLBACK ENABLE] |
6529 | 79 |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
80 NAME is a string--the menu item name. |
6529 | 81 |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
82 CALLBACK is a command to run when the item is chosen, |
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
83 or a list to evaluate when the item is chosen. |
6529 | 84 |
8541
39e8d792604f
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
8085
diff
changeset
|
85 ENABLE is an expression; the item is enabled for selection |
39e8d792604f
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
8085
diff
changeset
|
86 whenever this expression's value is non-nil. |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
87 |
26428
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
25224
diff
changeset
|
88 Alternatively, a menu item may have the form: |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
89 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
90 [ NAME CALLBACK [ KEYWORD ARG ] ... ] |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
91 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
92 Where KEYWORD is one of the symbols defined below. |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
93 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
94 :keys KEYS |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
95 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
96 KEYS is a string; a complex keyboard equivalent to this menu item. |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
97 This is normally not needed because keyboard equivalents are usually |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
98 computed automatically. |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
99 KEYS is expanded with `substitute-command-keys' before it is used. |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
100 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
101 :key-sequence KEYS |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
102 |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
103 KEYS is nil, a string or a vector; nil or a keyboard equivalent to this |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
104 menu item. |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
105 This is a hint that will considerably speed up Emacs' first display of |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
106 a menu. Use `:key-sequence nil' when you know that this menu item has no |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
107 keyboard equivalent. |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
108 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
109 :active ENABLE |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
110 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
111 ENABLE is an expression; the item is enabled for selection |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
112 whenever this expression's value is non-nil. |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
113 |
62301
2acfd9cf6713
(easy-menu-define): Doc fixes.
Nick Roberts <nickrob@snap.net.nz>
parents:
61763
diff
changeset
|
114 :visible INCLUDE |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
115 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
116 INCLUDE is an expression; this item is only visible if this |
62301
2acfd9cf6713
(easy-menu-define): Doc fixes.
Nick Roberts <nickrob@snap.net.nz>
parents:
61763
diff
changeset
|
117 expression has a non-nil value. `:included' is an alias for `:visible'. |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
118 |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
119 :suffix FORM |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
120 |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
121 FORM is an expression that will be dynamically evaluated and whose |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
122 value will be concatenated to the menu entry's NAME. |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
123 |
14108 | 124 :style STYLE |
26428
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
25224
diff
changeset
|
125 |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
126 STYLE is a symbol describing the type of menu item. The following are |
26428
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
25224
diff
changeset
|
127 defined: |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
128 |
16812
af96712b7f5d
(easy-menu-create-keymaps): Menu item STYLE toggle (checkbox)
Richard M. Stallman <rms@gnu.org>
parents:
16160
diff
changeset
|
129 toggle: A checkbox. |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
130 Prepend the name with `(*) ' or `( ) ' depending on if selected or not. |
16812
af96712b7f5d
(easy-menu-create-keymaps): Menu item STYLE toggle (checkbox)
Richard M. Stallman <rms@gnu.org>
parents:
16160
diff
changeset
|
131 radio: A radio button. |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
132 Prepend the name with `[X] ' or `[ ] ' depending on if selected or not. |
30194 | 133 button: Surround the name with `[' and `]'. Use this for an item in the |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
134 menu bar itself. |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
135 anything else means an ordinary menu item. |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
136 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
137 :selected SELECTED |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
138 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
139 SELECTED is an expression; the checkbox or radio button is selected |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
140 whenever this expression's value is non-nil. |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
141 |
28522
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
142 :help HELP |
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
143 |
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
144 HELP is a string, the help to display for the menu item. |
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
145 |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
146 A menu item can be a string. Then that string appears in the menu as |
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
147 unselectable text. A string consisting solely of hyphens is displayed |
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
148 as a solid horizontal line. |
6529 | 149 |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
150 A menu item can be a list with the same format as MENU. This is a submenu." |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
151 `(progn |
50428
8636083efe8b
(easy-menu-define): Don't make a defvar for nil.
Richard M. Stallman <rms@gnu.org>
parents:
50298
diff
changeset
|
152 ,(if symbol `(defvar ,symbol nil ,doc)) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
153 (easy-menu-do-define (quote ,symbol) ,maps ,doc ,menu))) |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
154 |
11860
0c39d1945e5e
(easy-menu-do-define): Add autoload cookie.
Karl Heuer <kwzh@gnu.org>
parents:
11833
diff
changeset
|
155 ;;;###autoload |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
156 (defun easy-menu-do-define (symbol maps doc menu) |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
157 ;; We can't do anything that might differ between Emacs dialects in |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
158 ;; `easy-menu-define' in order to make byte compiled files |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
159 ;; compatible. Therefore everything interesting is done in this |
26428
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
25224
diff
changeset
|
160 ;; function. |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
161 (let ((keymap (easy-menu-create-menu (car menu) (cdr menu)))) |
48942
86ecd875b9c5
(easy-menu-do-define): Handle nil for SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
47550
diff
changeset
|
162 (when symbol |
86ecd875b9c5
(easy-menu-do-define): Handle nil for SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
47550
diff
changeset
|
163 (set symbol keymap) |
61763
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
164 (defalias symbol |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
165 `(lambda (event) ,doc (interactive "@e") |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
166 ;; FIXME: XEmacs uses popup-menu which calls the binding |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
167 ;; while x-popup-menu only returns the selection. |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
168 (x-popup-menu event |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
169 (or (and (symbolp ,symbol) |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
170 (funcall |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
171 (or (plist-get (get ,symbol 'menu-prop) |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
172 :filter) |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
173 'identity) |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
174 (symbol-function ,symbol))) |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
175 ,symbol))))) |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
176 (mapcar (lambda (map) |
42014
198c1186dee3
(easy-menu-intern): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38431
diff
changeset
|
177 (define-key map (vector 'menu-bar (easy-menu-intern (car menu))) |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
178 (cons 'menu-item |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
179 (cons (car menu) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
180 (if (not (symbolp keymap)) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
181 (list keymap) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
182 (cons (symbol-function keymap) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
183 (get keymap 'menu-prop))))))) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
184 (if (keymapp maps) (list maps) maps)))) |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
185 |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
186 (defun easy-menu-filter-return (menu &optional name) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
187 "Convert MENU to the right thing to return from a menu filter. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
188 MENU is a menu as computed by `easy-menu-define' or `easy-menu-create-menu' or |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
189 a symbol whose value is such a menu. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
190 In Emacs a menu filter must return a menu (a keymap), in XEmacs a filter must |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
191 return a menu items list (without menu name and keywords). |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
192 This function returns the right thing in the two cases. |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
193 If NAME is provided, it is used for the keymap." |
47169
bed718560d06
(easy-menu-filter-return):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46197
diff
changeset
|
194 (cond |
bed718560d06
(easy-menu-filter-return):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46197
diff
changeset
|
195 ((and (not (keymapp menu)) (consp menu)) |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
196 ;; If it's a cons but not a keymap, then it can't be right |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
197 ;; unless it's an XEmacs menu. |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
198 (setq menu (easy-menu-create-menu (or name "") menu))) |
47169
bed718560d06
(easy-menu-filter-return):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46197
diff
changeset
|
199 ((vectorp menu) |
bed718560d06
(easy-menu-filter-return):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46197
diff
changeset
|
200 ;; It's just a menu entry. |
bed718560d06
(easy-menu-filter-return):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46197
diff
changeset
|
201 (setq menu (cdr (easy-menu-convert-item menu))))) |
bed718560d06
(easy-menu-filter-return):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46197
diff
changeset
|
202 menu) |
6529 | 203 |
9586
bada2dc32adc
(easy-menu-create-keymaps): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
8541
diff
changeset
|
204 ;;;###autoload |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
205 (defun easy-menu-create-menu (menu-name menu-items) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
206 "Create a menu called MENU-NAME with items described in MENU-ITEMS. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
207 MENU-NAME is a string, the name of the menu. MENU-ITEMS is a list of items |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
208 possibly preceded by keyword pairs as described in `easy-menu-define'." |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
209 (let ((menu (make-sparse-keymap menu-name)) |
28522
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
210 prop keyword arg label enable filter visible help) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
211 ;; Look for keywords. |
29054
25099b559af9
(easy-menu-create-menu, easy-menu-do-add-item): Use keywordp.
Dave Love <fx@gnu.org>
parents:
28522
diff
changeset
|
212 (while (and menu-items |
25099b559af9
(easy-menu-create-menu, easy-menu-do-add-item): Use keywordp.
Dave Love <fx@gnu.org>
parents:
28522
diff
changeset
|
213 (cdr menu-items) |
25099b559af9
(easy-menu-create-menu, easy-menu-do-add-item): Use keywordp.
Dave Love <fx@gnu.org>
parents:
28522
diff
changeset
|
214 (keywordp (setq keyword (car menu-items)))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
215 (setq arg (cadr menu-items)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
216 (setq menu-items (cddr menu-items)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
217 (cond |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
218 ((eq keyword :filter) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
219 (setq filter `(lambda (menu) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
220 (easy-menu-filter-return (,arg menu) ,menu-name)))) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
221 ((eq keyword :active) (setq enable (or arg ''nil))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
222 ((eq keyword :label) (setq label arg)) |
28522
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
223 ((eq keyword :help) (setq help arg)) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
224 ((or (eq keyword :included) (eq keyword :visible)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
225 (setq visible (or arg ''nil))))) |
30194 | 226 (if (equal visible ''nil) |
227 nil ; Invisible menu entry, return nil. | |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
228 (if (and visible (not (easy-menu-always-true-p visible))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
229 (setq prop (cons :visible (cons visible prop)))) |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
230 (if (and enable (not (easy-menu-always-true-p enable))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
231 (setq prop (cons :enable (cons enable prop)))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
232 (if filter (setq prop (cons :filter (cons filter prop)))) |
28522
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
233 (if help (setq prop (cons :help (cons help prop)))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
234 (if label (setq prop (cons nil (cons label prop)))) |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
235 (if filter |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
236 ;; The filter expects the menu in its XEmacs form and the pre-filter |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
237 ;; form will only be passed to the filter anyway, so we'd better |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
238 ;; not convert it at all (it will be converted on the fly by |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
239 ;; easy-menu-filter-return). |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
240 (setq menu menu-items) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
241 (setq menu (append menu (mapcar 'easy-menu-convert-item menu-items)))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
242 (when prop |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
243 (setq menu (easy-menu-make-symbol menu 'noexp)) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
244 (put menu 'menu-prop prop)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
245 menu))) |
6529 | 246 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
247 |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
248 ;; Known button types. |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
249 (defvar easy-menu-button-prefix |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
250 '((radio . :radio) (toggle . :toggle))) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
251 |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
252 (defun easy-menu-do-add-item (menu item &optional before) |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
253 (setq item (easy-menu-convert-item item)) |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
254 (easy-menu-define-key menu (easy-menu-intern (car item)) (cdr item) before)) |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
255 |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
256 (defvar easy-menu-converted-items-table (make-hash-table :test 'equal)) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
257 |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
258 (defun easy-menu-convert-item (item) |
30194 | 259 "Memoize the value returned by `easy-menu-convert-item-1' called on ITEM. |
260 This makes key-shortcut-caching work a *lot* better when this | |
261 conversion is done from within a filter. | |
262 This also helps when the NAME of the entry is recreated each time: | |
263 since the menu is built and traversed separately, the lookup | |
264 would always fail because the key is `equal' but not `eq'." | |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
265 (or (gethash item easy-menu-converted-items-table) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
266 (puthash item (easy-menu-convert-item-1 item) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
267 easy-menu-converted-items-table))) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
268 |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
269 (defun easy-menu-convert-item-1 (item) |
50428
8636083efe8b
(easy-menu-define): Don't make a defvar for nil.
Richard M. Stallman <rms@gnu.org>
parents:
50298
diff
changeset
|
270 "Parse an item description and convert it to a menu keymap element. |
8636083efe8b
(easy-menu-define): Don't make a defvar for nil.
Richard M. Stallman <rms@gnu.org>
parents:
50298
diff
changeset
|
271 ITEM defines an item as in `easy-menu-define'." |
28522
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
272 (let (name command label prop remove help) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
273 (cond |
24987
aee690417f63
(easy-menu-do-add-item): Support for new seperator types.
Gerd Moellmann <gerd@gnu.org>
parents:
24341
diff
changeset
|
274 ((stringp item) ; An item or separator. |
aee690417f63
(easy-menu-do-add-item): Support for new seperator types.
Gerd Moellmann <gerd@gnu.org>
parents:
24341
diff
changeset
|
275 (setq label item)) |
aee690417f63
(easy-menu-do-add-item): Support for new seperator types.
Gerd Moellmann <gerd@gnu.org>
parents:
24341
diff
changeset
|
276 ((consp item) ; A sub-menu |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
277 (setq label (setq name (car item))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
278 (setq command (cdr item)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
279 (if (not (keymapp command)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
280 (setq command (easy-menu-create-menu name command))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
281 (if (null command) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
282 ;; Invisible menu item. Don't insert into keymap. |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
283 (setq remove t) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
284 (when (and (symbolp command) (setq prop (get command 'menu-prop))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
285 (when (null (car prop)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
286 (setq label (cadr prop)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
287 (setq prop (cddr prop))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
288 (setq command (symbol-function command))))) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
289 ((vectorp item) ; An item. |
22196
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
290 (let* ((ilen (length item)) |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
291 (active (if (> ilen 2) (or (aref item 2) ''nil) t)) |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
292 (no-name (not (symbolp (setq command (aref item 1))))) |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
293 cache cache-specified) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
294 (setq label (setq name (aref item 0))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
295 (if no-name (setq command (easy-menu-make-symbol command))) |
29054
25099b559af9
(easy-menu-create-menu, easy-menu-do-add-item): Use keywordp.
Dave Love <fx@gnu.org>
parents:
28522
diff
changeset
|
296 (if (keywordp active) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
297 (let ((count 2) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
298 keyword arg suffix visible style selected keys) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
299 (setq active nil) |
22196
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
300 (while (> ilen count) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
301 (setq keyword (aref item count)) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
302 (setq arg (aref item (1+ count))) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
303 (setq count (+ 2 count)) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
304 (cond |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
305 ((or (eq keyword :included) (eq keyword :visible)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
306 (setq visible (or arg ''nil))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
307 ((eq keyword :key-sequence) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
308 (setq cache arg cache-specified t)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
309 ((eq keyword :keys) (setq keys arg no-name nil)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
310 ((eq keyword :label) (setq label arg)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
311 ((eq keyword :active) (setq active (or arg ''nil))) |
28522
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
312 ((eq keyword :help) (setq prop (cons :help (cons arg prop)))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
313 ((eq keyword :suffix) (setq suffix arg)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
314 ((eq keyword :style) (setq style arg)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
315 ((eq keyword :selected) (setq selected (or arg ''nil))))) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
316 (if suffix |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
317 (setq label |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
318 (if (stringp suffix) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
319 (if (stringp label) (concat label " " suffix) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
320 (list 'concat label (concat " " suffix))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
321 (if (stringp label) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
322 (list 'concat (concat label " ") suffix) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
323 (list 'concat label " " suffix))))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
324 (cond |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
325 ((eq style 'button) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
326 (setq label (if (stringp label) (concat "[" label "]") |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
327 (list 'concat "[" label "]")))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
328 ((and selected |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
329 (setq style (assq style easy-menu-button-prefix))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
330 (setq prop (cons :button |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
331 (cons (cons (cdr style) selected) prop))))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
332 (when (stringp keys) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
333 (if (string-match "^[^\\]*\\(\\\\\\[\\([^]]+\\)]\\)[^\\]*$" |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
334 keys) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
335 (let ((prefix |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
336 (if (< (match-beginning 0) (match-beginning 1)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
337 (substring keys 0 (match-beginning 1)))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
338 (postfix |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
339 (if (< (match-end 1) (match-end 0)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
340 (substring keys (match-end 1)))) |
50142
c61cd948bb26
(easy-menu-name-match): Catch any error that member-ignore-case might signal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
48942
diff
changeset
|
341 (cmd (intern (match-string 2 keys)))) |
22196
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
342 (setq keys (and (or prefix postfix) |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
343 (cons prefix postfix))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
344 (setq keys |
22196
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
345 (and (or keys (not (eq command cmd))) |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
346 (cons cmd keys)))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
347 (setq cache-specified nil)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
348 (if keys (setq prop (cons :keys (cons keys prop))))) |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
349 (if (and visible (not (easy-menu-always-true-p visible))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
350 (if (equal visible ''nil) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
351 ;; Invisible menu item. Don't insert into keymap. |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
352 (setq remove t) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
353 (setq prop (cons :visible (cons visible prop))))))) |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
354 (if (and active (not (easy-menu-always-true-p active))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
355 (setq prop (cons :enable (cons active prop)))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
356 (if (and (or no-name cache-specified) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
357 (or (null cache) (stringp cache) (vectorp cache))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
358 (setq prop (cons :key-sequence (cons cache prop)))))) |
23955
9f9e1b450ff5
(easy-menu-get-map): Change global map only if this menu exists in the
Richard M. Stallman <rms@gnu.org>
parents:
23939
diff
changeset
|
359 (t (error "Invalid menu item in easymenu"))) |
30207
584fa6f665f1
(easy-menu-convert-item-1): Intern the label.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30194
diff
changeset
|
360 ;; `intern' the name so as to merge multiple entries with the same name. |
584fa6f665f1
(easy-menu-convert-item-1): Intern the label.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30194
diff
changeset
|
361 ;; It also makes it easier/possible to lookup/change menu bindings |
584fa6f665f1
(easy-menu-convert-item-1): Intern the label.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30194
diff
changeset
|
362 ;; via keymap functions. |
42014
198c1186dee3
(easy-menu-intern): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38431
diff
changeset
|
363 (cons (easy-menu-intern name) |
30207
584fa6f665f1
(easy-menu-convert-item-1): Intern the label.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30194
diff
changeset
|
364 (and (not remove) |
584fa6f665f1
(easy-menu-convert-item-1): Intern the label.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30194
diff
changeset
|
365 (cons 'menu-item |
584fa6f665f1
(easy-menu-convert-item-1): Intern the label.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30194
diff
changeset
|
366 (cons label |
584fa6f665f1
(easy-menu-convert-item-1): Intern the label.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30194
diff
changeset
|
367 (and name |
584fa6f665f1
(easy-menu-convert-item-1): Intern the label.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30194
diff
changeset
|
368 (cons command prop)))))))) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
369 |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
370 (defun easy-menu-define-key (menu key item &optional before) |
30194 | 371 "Add binding in MENU for KEY => ITEM. Similar to `define-key-after'. |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
372 If KEY is not nil then delete any duplications. |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
373 If ITEM is nil, then delete the definition of KEY. |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
374 |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
375 Optional argument BEFORE is nil or a key in MENU. If BEFORE is not nil, |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
376 put binding before the item in MENU named BEFORE; otherwise, |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
377 if a binding for KEY is already present in MENU, just change it; |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
378 otherwise put the new binding last in MENU. |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
379 BEFORE can be either a string (menu item name) or a symbol |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
380 \(the fake function key for the menu item). |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
381 KEY does not have to be a symbol, and comparison is done with equal." |
58123
b7ee8419031b
(easy-menu-define-key): Understand the case where the keymap is a symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58097
diff
changeset
|
382 (if (symbolp menu) (setq menu (indirect-function menu))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
383 (let ((inserted (null item)) ; Fake already inserted. |
21807
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
384 tail done) |
20801
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
385 (while (not done) |
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
386 (cond |
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
387 ((or (setq done (or (null (cdr menu)) (keymapp (cdr menu)))) |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
388 (and before (easy-menu-name-match before (cadr menu)))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
389 ;; If key is nil, stop here, otherwise keep going past the |
20801
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
390 ;; inserted element so we can delete any duplications that come |
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
391 ;; later. |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
392 (if (null key) (setq done t)) |
20801
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
393 (unless inserted ; Don't insert more than once. |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
394 (setcdr menu (cons (cons key item) (cdr menu))) |
20801
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
395 (setq inserted t) |
21807
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
396 (setq menu (cdr menu))) |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
397 (setq menu (cdr menu))) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
398 ((and key (equal (car-safe (cadr menu)) key)) |
21807
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
399 (if (or inserted ; Already inserted or |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
400 (and before ; wanted elsewhere and |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
401 (setq tail (cddr menu)) ; not last item and not |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
402 (not (keymapp tail)) |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
403 (not (easy-menu-name-match |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
404 before (car tail))))) ; in position |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
405 (setcdr menu (cddr menu)) ; Remove item. |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
406 (setcdr (cadr menu) item) ; Change item. |
21807
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
407 (setq inserted t) |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
408 (setq menu (cdr menu)))) |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
409 (t (setq menu (cdr menu))))))) |
26428
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
25224
diff
changeset
|
410 |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
411 (defun easy-menu-name-match (name item) |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
412 "Return t if NAME is the name of menu item ITEM. |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
413 NAME can be either a string, or a symbol. |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
414 ITEM should be a keymap binding of the form (KEY . MENU-ITEM)." |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
415 (if (consp item) |
45309
105aeedf106c
(easy-menu-make-symbol): Don't treat (lambda () ...) as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45304
diff
changeset
|
416 (if (symbolp name) |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
417 (eq (car-safe item) name) |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
418 (if (stringp name) |
45299
948bb97d1e60
(easy-menu-name-match): Match both
Jason Rumney <jasonr@gnu.org>
parents:
44826
diff
changeset
|
419 ;; Match against the text that is displayed to the user. |
50142
c61cd948bb26
(easy-menu-name-match): Catch any error that member-ignore-case might signal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
48942
diff
changeset
|
420 (or (condition-case nil (member-ignore-case name item) |
c61cd948bb26
(easy-menu-name-match): Catch any error that member-ignore-case might signal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
48942
diff
changeset
|
421 (error nil)) ;`item' might not be a proper list. |
45299
948bb97d1e60
(easy-menu-name-match): Match both
Jason Rumney <jasonr@gnu.org>
parents:
44826
diff
changeset
|
422 ;; Also check the string version of the symbol name, |
948bb97d1e60
(easy-menu-name-match): Match both
Jason Rumney <jasonr@gnu.org>
parents:
44826
diff
changeset
|
423 ;; for backwards compatibility. |
58097
21dc9bd90575
(easy-menu-intern): Revert to no-downcasing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57978
diff
changeset
|
424 (eq (car-safe item) (intern name))))))) |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
425 |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
426 (defun easy-menu-always-true-p (x) |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
427 "Return true if form X never evaluates to nil." |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
428 (if (consp x) (and (eq (car x) 'quote) (cadr x)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
429 (or (eq x t) (not (symbolp x))))) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
430 |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
431 (defvar easy-menu-item-count 0) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
432 |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
433 (defun easy-menu-make-symbol (callback &optional noexp) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
434 "Return a unique symbol with CALLBACK as function value. |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
435 When non-nil, NOEXP indicates that CALLBACK cannot be an expression |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
436 \(i.e. does not need to be turned into a function)." |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
437 (let ((command |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
438 (make-symbol (format "menu-function-%d" easy-menu-item-count)))) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
439 (setq easy-menu-item-count (1+ easy-menu-item-count)) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
440 (fset command |
45309
105aeedf106c
(easy-menu-make-symbol): Don't treat (lambda () ...) as an expression.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45304
diff
changeset
|
441 (if (or (keymapp callback) (functionp callback) noexp) callback |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
442 `(lambda () (interactive) ,callback))) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
443 command)) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
444 |
22033
aa1d105f0d67
(easy-menu-change): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
21807
diff
changeset
|
445 ;;;###autoload |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
446 (defun easy-menu-change (path name items &optional before) |
8085
c7eb887a1e78
(easy-menu-change): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7614
diff
changeset
|
447 "Change menu found at PATH as item NAME to contain ITEMS. |
25224
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
448 PATH is a list of strings for locating the menu that |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
449 should contain a submenu named NAME. |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
450 ITEMS is a list of menu items, as in `easy-menu-define'. |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
451 These items entirely replace the previous items in that submenu. |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
452 |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
453 If the menu located by PATH has no submenu named NAME, add one. |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
454 If the optional argument BEFORE is present, add it just before |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
455 the submenu named BEFORE, otherwise add it at the end of the menu. |
8085
c7eb887a1e78
(easy-menu-change): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7614
diff
changeset
|
456 |
66495
9bc148ee2fda
(easy-menu-change): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
64751
diff
changeset
|
457 To implement dynamic menus, either call this from |
9bc148ee2fda
(easy-menu-change): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
64751
diff
changeset
|
458 `menu-bar-update-hook' or use a menu filter." |
50428
8636083efe8b
(easy-menu-define): Don't make a defvar for nil.
Richard M. Stallman <rms@gnu.org>
parents:
50298
diff
changeset
|
459 (easy-menu-add-item nil path (easy-menu-create-menu name items) before)) |
8085
c7eb887a1e78
(easy-menu-change): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7614
diff
changeset
|
460 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
461 ;; XEmacs needs the following two functions to add and remove menus. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
462 ;; In Emacs this is done automatically when switching keymaps, so |
22196
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
463 ;; here easy-menu-remove is a noop and easy-menu-add only precalculates |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
464 ;; equivalent keybindings (if easy-menu-precalculate-equivalent-keybindings |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
465 ;; is on). |
47550
df31632ef1db
(easy-menu-remove): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47254
diff
changeset
|
466 (defalias 'easy-menu-remove 'ignore |
df31632ef1db
(easy-menu-remove): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47254
diff
changeset
|
467 "Remove MENU from the current menu bar. |
df31632ef1db
(easy-menu-remove): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47254
diff
changeset
|
468 Contrary to XEmacs, this is a nop on Emacs since menus are automatically |
df31632ef1db
(easy-menu-remove): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47254
diff
changeset
|
469 \(de)activated when the corresponding keymap is (de)activated. |
df31632ef1db
(easy-menu-remove): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47254
diff
changeset
|
470 |
df31632ef1db
(easy-menu-remove): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47254
diff
changeset
|
471 \(fn MENU)") |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
472 |
22196
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
473 (defun easy-menu-add (menu &optional map) |
47169
bed718560d06
(easy-menu-filter-return):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46197
diff
changeset
|
474 "Add the menu to the menubar. |
62557
efeaec0ce9c4
(easy-menu-add): Correct docstring since
David Kastrup <dak@gnu.org>
parents:
62301
diff
changeset
|
475 On Emacs, menus are already automatically activated when the |
efeaec0ce9c4
(easy-menu-add): Correct docstring since
David Kastrup <dak@gnu.org>
parents:
62301
diff
changeset
|
476 corresponding keymap is activated. On XEmacs this is needed to |
efeaec0ce9c4
(easy-menu-add): Correct docstring since
David Kastrup <dak@gnu.org>
parents:
62301
diff
changeset
|
477 actually add the menu to the current menubar. |
efeaec0ce9c4
(easy-menu-add): Correct docstring since
David Kastrup <dak@gnu.org>
parents:
62301
diff
changeset
|
478 |
efeaec0ce9c4
(easy-menu-add): Correct docstring since
David Kastrup <dak@gnu.org>
parents:
62301
diff
changeset
|
479 This also precalculates equivalent key bindings when |
efeaec0ce9c4
(easy-menu-add): Correct docstring since
David Kastrup <dak@gnu.org>
parents:
62301
diff
changeset
|
480 `easy-menu-precalculate-equivalent-keybindings' is on. |
efeaec0ce9c4
(easy-menu-add): Correct docstring since
David Kastrup <dak@gnu.org>
parents:
62301
diff
changeset
|
481 |
efeaec0ce9c4
(easy-menu-add): Correct docstring since
David Kastrup <dak@gnu.org>
parents:
62301
diff
changeset
|
482 You should call this once the menu and keybindings are set up |
efeaec0ce9c4
(easy-menu-add): Correct docstring since
David Kastrup <dak@gnu.org>
parents:
62301
diff
changeset
|
483 completely and menu filter functions can be expected to work." |
22196
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
484 (when easy-menu-precalculate-equivalent-keybindings |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
485 (if (and (symbolp menu) (not (keymapp menu)) (boundp menu)) |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
486 (setq menu (symbol-value menu))) |
55045
3baddb82ae01
(easy-menu-add): Do call x-popup-menu, but only if it's defined.
Richard M. Stallman <rms@gnu.org>
parents:
54767
diff
changeset
|
487 (and (keymapp menu) (fboundp 'x-popup-menu) |
3baddb82ae01
(easy-menu-add): Do call x-popup-menu, but only if it's defined.
Richard M. Stallman <rms@gnu.org>
parents:
54767
diff
changeset
|
488 (x-popup-menu nil menu)) |
54767
1c98354c2113
(easy-menu-add): Make it work in non-X Emacs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53373
diff
changeset
|
489 )) |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
490 |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
491 (defun add-submenu (menu-path submenu &optional before in-menu) |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
492 "Add submenu SUBMENU in the menu at MENU-PATH. |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
493 If BEFORE is non-nil, add before the item named BEFORE. |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
494 If IN-MENU is non-nil, follow MENU-PATH in IN-MENU. |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
495 This is a compatibility function; use `easy-menu-add-item'." |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
496 (easy-menu-add-item (or in-menu (current-global-map)) |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
497 (cons "menu-bar" menu-path) |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
498 submenu before)) |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
499 |
23939
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
500 (defun easy-menu-add-item (map path item &optional before) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
501 "To the submenu of MAP with path PATH, add ITEM. |
25224
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
502 |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
503 If an item with the same name is already present in this submenu, |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
504 then ITEM replaces it. Otherwise, ITEM is added to this submenu. |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
505 In the latter case, ITEM is normally added at the end of the submenu. |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
506 However, if BEFORE is a string and there is an item in the submenu |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
507 with that name, then ITEM is added before that item. |
23939
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
508 |
50298
9c1195ddde1a
(easy-menu-add-item): Align the docstring with the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50296
diff
changeset
|
509 MAP should normally be a keymap; nil stands for the local menu-bar keymap. |
23939
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
510 It can also be a symbol, which has earlier been used as the first |
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
511 argument in a call to `easy-menu-define', or the value of such a symbol. |
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
512 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
513 PATH is a list of strings for locating the submenu where ITEM is to be |
23939
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
514 added. If PATH is nil, MAP itself is used. Otherwise, the first |
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
515 element should be the name of a submenu directly under MAP. This |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
516 submenu is then traversed recursively with the remaining elements of PATH. |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
517 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
518 ITEM is either defined as in `easy-menu-define' or a non-nil value returned |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
519 by `easy-menu-item-present-p' or `easy-menu-remove-item' or a menu defined |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
520 earlier by `easy-menu-define' or `easy-menu-create-menu'." |
25224
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
521 (setq map (easy-menu-get-map map path |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
522 (and (null map) (null path) |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
523 (stringp (car-safe item)) |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
524 (car item)))) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
525 (if (and (consp item) (consp (cdr item)) (eq (cadr item) 'menu-item)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
526 ;; This is a value returned by `easy-menu-item-present-p' or |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
527 ;; `easy-menu-remove-item'. |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
528 (easy-menu-define-key map (easy-menu-intern (car item)) |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
529 (cdr item) before) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
530 (if (or (keymapp item) |
58124
28acd37455bb
(easy-menu-add-item): Use keymap-prompt. Simplify.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58123
diff
changeset
|
531 (and (symbolp item) (keymapp (symbol-value item)) |
28acd37455bb
(easy-menu-add-item): Use keymap-prompt. Simplify.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58123
diff
changeset
|
532 (setq item (symbol-value item)))) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
533 ;; Item is a keymap, find the prompt string and use as item name. |
58124
28acd37455bb
(easy-menu-add-item): Use keymap-prompt. Simplify.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58123
diff
changeset
|
534 (setq item (cons (keymap-prompt item) item))) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
535 (easy-menu-do-add-item map item before))) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
536 |
23939
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
537 (defun easy-menu-item-present-p (map path name) |
62953
925395d813a9
(easy-menu-return-item): Find menu items with a nil command binding.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
62557
diff
changeset
|
538 "In submenu of MAP with path PATH, return non-nil iff item NAME is present. |
23939
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
539 MAP and PATH are defined as in `easy-menu-add-item'. |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
540 NAME should be a string, the name of the element to be looked for." |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
541 (easy-menu-return-item (easy-menu-get-map map path) name)) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
542 |
23939
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
543 (defun easy-menu-remove-item (map path name) |
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
544 "From submenu of MAP with path PATH remove item NAME. |
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
545 MAP and PATH are defined as in `easy-menu-add-item'. |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
546 NAME should be a string, the name of the element to be removed." |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
547 (setq map (easy-menu-get-map map path)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
548 (let ((ret (easy-menu-return-item map name))) |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
549 (if ret (easy-menu-define-key map (easy-menu-intern name) nil)) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
550 ret)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
551 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
552 (defun easy-menu-return-item (menu name) |
30194 | 553 "In menu MENU try to look for menu item with name NAME. |
554 If a menu item is found, return (NAME . item), otherwise return nil. | |
555 If item is an old format item, a new format item is returned." | |
62953
925395d813a9
(easy-menu-return-item): Find menu items with a nil command binding.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
62557
diff
changeset
|
556 ;; The call to `lookup-key' also calls the C function `get_keyelt' which |
925395d813a9
(easy-menu-return-item): Find menu items with a nil command binding.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
62557
diff
changeset
|
557 ;; looks inside a menu-item to only return the actual command. This is |
925395d813a9
(easy-menu-return-item): Find menu items with a nil command binding.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
62557
diff
changeset
|
558 ;; not what we want here. We should either add an arg to lookup-key to be |
925395d813a9
(easy-menu-return-item): Find menu items with a nil command binding.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
62557
diff
changeset
|
559 ;; able to turn off this "feature", or else we could use map-keymap here. |
925395d813a9
(easy-menu-return-item): Find menu items with a nil command binding.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
62557
diff
changeset
|
560 ;; In the mean time, I just use `assq' which is an OK approximation since |
925395d813a9
(easy-menu-return-item): Find menu items with a nil command binding.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
62557
diff
changeset
|
561 ;; menus are rarely built from vectors or char-tables. |
925395d813a9
(easy-menu-return-item): Find menu items with a nil command binding.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
62557
diff
changeset
|
562 (let ((item (or (cdr (assq name menu)) |
925395d813a9
(easy-menu-return-item): Find menu items with a nil command binding.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
62557
diff
changeset
|
563 (lookup-key menu (vector (easy-menu-intern name))))) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
564 ret enable cache label) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
565 (cond |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
566 ((stringp (car-safe item)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
567 ;; This is the old menu format. Convert it to new format. |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
568 (setq label (car item)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
569 (when (stringp (car (setq item (cdr item)))) ; Got help string |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
570 (setq ret (list :help (car item))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
571 (setq item (cdr item))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
572 (when (and (consp item) (consp (car item)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
573 (or (null (caar item)) (numberp (caar item)))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
574 (setq cache (car item)) ; Got cache |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
575 (setq item (cdr item))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
576 (and (symbolp item) (setq enable (get item 'menu-enable)) ; Got enable |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
577 (setq ret (cons :enable (cons enable ret)))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
578 (if cache (setq ret (cons cache ret))) |
42014
198c1186dee3
(easy-menu-intern): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38431
diff
changeset
|
579 (cons name (cons 'menu-enable (cons label (cons item ret))))) |
198c1186dee3
(easy-menu-intern): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38431
diff
changeset
|
580 (item ; (or (symbolp item) (keymapp item) (eq (car-safe item) 'menu-item)) |
198c1186dee3
(easy-menu-intern): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38431
diff
changeset
|
581 (cons name item)) ; Keymap or new menu format |
198c1186dee3
(easy-menu-intern): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38431
diff
changeset
|
582 ))) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
583 |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
584 (defun easy-menu-lookup-name (map name) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
585 "Lookup menu item NAME in keymap MAP. |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
586 Like `lookup-key' except that NAME is not an array but just a single key |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
587 and that NAME can be a string representing the menu item's name." |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
588 (or (lookup-key map (vector (easy-menu-intern name))) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
589 (when (stringp name) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
590 ;; `lookup-key' failed and we have a menu item name: look at the |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
591 ;; actual menu entries's names. |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
592 (catch 'found |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
593 (map-keymap (lambda (key item) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
594 (if (condition-case nil (member name item) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
595 (error nil)) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
596 ;; Found it!! Look for it again with |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
597 ;; `lookup-key' so as to handle inheritance and |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
598 ;; to extract the actual command/keymap bound to |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
599 ;; `name' from the item (via get_keyelt). |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
600 (throw 'found (lookup-key map (vector key))))) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
601 map))))) |
25224
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
602 |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
603 (defun easy-menu-get-map (map path &optional to-modify) |
30194 | 604 "Return a sparse keymap in which to add or remove an item. |
605 MAP and PATH are as defined in `easy-menu-add-item'. | |
25224
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
606 |
30194 | 607 TO-MODIFY, if non-nil, is the name of the item the caller |
608 wants to modify in the map that we return. | |
609 In some cases we use that to select between the local and global maps." | |
34520
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
610 (setq map |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
611 (catch 'found |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
612 (if (and map (symbolp map) (not (keymapp map))) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
613 (setq map (symbol-value map))) |
57978
3141e565abf7
(easy-menu-get-map): Fix last change.
Andreas Schwab <schwab@suse.de>
parents:
57966
diff
changeset
|
614 (let ((maps (if map (list map) (current-active-maps)))) |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
615 ;; Look for PATH in each map. |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
616 (unless map (push 'menu-bar path)) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
617 (dolist (name path) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
618 (setq maps |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
619 (delq nil (mapcar (lambda (map) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
620 (setq map (easy-menu-lookup-name |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
621 map name)) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
622 (and (keymapp map) map)) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
623 maps)))) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
624 |
34520
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
625 ;; Prefer a map that already contains the to-be-modified entry. |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
626 (when to-modify |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
627 (dolist (map maps) |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
628 (when (easy-menu-lookup-name map to-modify) |
34520
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
629 (throw 'found map)))) |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
630 ;; Use the first valid map. |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
631 (when maps (throw 'found (car maps))) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
632 |
34520
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
633 ;; Otherwise, make one up. |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
634 ;; Hardcoding current-local-map is lame, but it's difficult |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
635 ;; to know what the caller intended for us to do ;-( |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
636 (let* ((name (if path (format "%s" (car (reverse path))))) |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
637 (newmap (make-sparse-keymap name))) |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
638 (define-key (or map (current-local-map)) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
639 (apply 'vector (mapcar 'easy-menu-intern path)) |
34520
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
640 (if name (cons name newmap) newmap)) |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
641 newmap)))) |
23939
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
642 (or (keymapp map) (error "Malformed menu in easy-menu: (%s)" map)) |
8d7a5687c803
(easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents:
22196
diff
changeset
|
643 map) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
644 |
6529 | 645 (provide 'easymenu) |
646 | |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
647 ;; arch-tag: 2a04020d-90d2-476d-a7c6-71e072007a4a |
6529 | 648 ;;; easymenu.el ends here |