Mercurial > emacs
annotate lisp/emacs-lisp/easymenu.el @ 98007:883843ca3292
* verilog-mode.el (verilog-library-extensions): Enable .sv
filename extensions to call verilog-mode.
(verilog-auto, verilog-auto-inst, verilog-faq)
(verilog-submit-bug-report): Update author support URLs.
(verilog-delete-auto, verilog-auto-inout-module)
(verilog-auto-inout-comp, verilog-auto): Add AUTOINOUTCOMP for
creating complemented testbench modules. Suggested by Yishay
Belkind.
(verilog-auto-inst-port, verilog-simplify-range-expression): When
verilog-auto-inst-param-value is set, don't require a
AUTO_TEMPLATE to expand parameter substitutions. Suggested by
Yishay Belkind.
(verilog-auto-inst-param-value): Add safe variable.
(verilog-re-search-forward, verilog-re-search-backward): Fix
returning wrong search results on Emacs 22.1.
(verilog-modi-cache-results, verilog-auto): Fix warning message
about "toggling font-lock-mode."
(verilog-auto): Fix loosing font-lock on errors.
(verilog-auto-inst-param-value, verilog-mode-version)
(verilog-mode-version-date, verilog-read-inst-param-value)
(verilog-auto-inst, verilog-auto-inst-param)
(verilog-auto-inst-port, verilog-simplify-range-expression): Allow
parameters to be replaced with their values, on the expansion of
an AUTOINST with Verilog 2001 style parameter settings. Suggested
by David Rogoff.
* verilog-mode.el (verilog-beg-block-re-ordered, verilog-calc-1):
Better support for the property statement. Sometimes this keyword
introduces a statement which requires an endproperty keyword, and
sometimes it doesn't, dependening on the work before the property
word. If property is prefixed with assert, assume or cover
keyword, then the statement is ended with a ';' Otherwise,
property is like task or specify, and is followed by some number
of statements, which are ended with an endproperty keyword.
(electric-verilog-tab): Support Emacs 22.2 style handling of tab
in a highlighted region: indent each line in region according to
mode. Supply this so it works in XEmacs and older Emacs.
author | Dan Nicolaescu <dann@ics.uci.edu> |
---|---|
date | Fri, 05 Sep 2008 22:13:55 +0000 |
parents | 84cc2bc95fba |
children | a9dc0e7c3f2b |
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 |
74466 | 3 ;; Copyright (C) 1994, 1996, 1998, 1999, 2000, 2001, 2002, 2003, |
79704 | 4 ;; 2004, 2005, 2006, 2007, 2008 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 | |
94655
90a2847062be
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94305
diff
changeset
|
11 ;; GNU Emacs is free software: you can redistribute it and/or modify |
6529 | 12 ;; it under the terms of the GNU General Public License as published by |
94655
90a2847062be
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94305
diff
changeset
|
13 ;; the Free Software Foundation, either version 3 of the License, or |
90a2847062be
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94305
diff
changeset
|
14 ;; (at your option) any later version. |
6529 | 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 | |
94655
90a2847062be
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94305
diff
changeset
|
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
6529 | 23 |
14169 | 24 ;;; Commentary: |
25 | |
26 ;; This is compatible with easymenu.el by Per Abrahamsen | |
27 ;; but it is much simpler as it doesn't try to support other Emacs versions. | |
28 ;; The code was mostly derived from lmenu.el. | |
6529 | 29 |
30 ;;; Code: | |
31 | |
97459
84cc2bc95fba
(easy-menu-add): Don't precompute keybindings
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95371
diff
changeset
|
32 (defvar easy-menu-precalculate-equivalent-keybindings nil |
22196
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
33 "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
|
34 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
|
35 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
|
36 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
|
37 this delay will come when a menu is displayed the first time. If you never use |
97459
84cc2bc95fba
(easy-menu-add): Don't precompute keybindings
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95371
diff
changeset
|
38 menus, turn this variable off, otherwise it is probably better to keep it on.") |
84cc2bc95fba
(easy-menu-add): Don't precompute keybindings
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95371
diff
changeset
|
39 (make-obsolete-variable |
84cc2bc95fba
(easy-menu-add): Don't precompute keybindings
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95371
diff
changeset
|
40 'easy-menu-precalculate-equivalent-keybindings nil "23.1") |
22196
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
41 |
42014
198c1186dee3
(easy-menu-intern): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38431
diff
changeset
|
42 (defsubst easy-menu-intern (s) |
58097
21dc9bd90575
(easy-menu-intern): Revert to no-downcasing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57978
diff
changeset
|
43 (if (stringp s) (intern s) s)) |
42014
198c1186dee3
(easy-menu-intern): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38431
diff
changeset
|
44 |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
45 ;;;###autoload |
34520
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
46 (put 'easy-menu-define 'lisp-indent-function 'defun) |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
47 ;;;###autoload |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
48 (defmacro easy-menu-define (symbol maps doc menu) |
6529 | 49 "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
|
50 |
86ecd875b9c5
(easy-menu-do-define): Handle nil for SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
47550
diff
changeset
|
51 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
|
52 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
|
53 If SYMBOL is nil, just store the menu keymap into MAPS. |
6529 | 54 |
55 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
|
56 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
|
57 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
58 :filter FUNCTION |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
59 |
53373
98e63f90453a
(easy-menu-define): Doc fix.
Eli Zaretskii <eliz@is.elta.co.il>
parents:
52401
diff
changeset
|
60 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
|
61 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
|
62 |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
63 :visible INCLUDE |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
64 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
65 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
|
66 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
|
67 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
68 :active ENABLE |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
69 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
70 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
|
71 whenever this expression's value is non-nil. |
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 The rest of the elements in MENU, are menu items. |
6529 | 74 |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
75 A menu item is usually a vector of three elements: [NAME CALLBACK ENABLE] |
6529 | 76 |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
77 NAME is a string--the menu item name. |
6529 | 78 |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
79 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
|
80 or a list to evaluate when the item is chosen. |
6529 | 81 |
8541
39e8d792604f
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
8085
diff
changeset
|
82 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
|
83 whenever this expression's value is non-nil. |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
84 |
26428
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
25224
diff
changeset
|
85 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
|
86 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
87 [ 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
|
88 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
89 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
|
90 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
91 :keys KEYS |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
92 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
93 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
|
94 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
|
95 computed automatically. |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
96 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
|
97 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
98 :key-sequence KEYS |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
99 |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
100 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
|
101 menu item. |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
102 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
|
103 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
|
104 keyboard equivalent. |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
105 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
106 :active ENABLE |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
107 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
108 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
|
109 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
|
110 |
62301
2acfd9cf6713
(easy-menu-define): Doc fixes.
Nick Roberts <nickrob@snap.net.nz>
parents:
61763
diff
changeset
|
111 :visible INCLUDE |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
112 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
113 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
|
114 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
|
115 |
86443 | 116 :label FORM |
117 | |
118 FORM is an expression that will be dynamically evaluated and whose | |
119 value will be used for the menu entry's text label (the default is NAME). | |
120 | |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
121 :suffix FORM |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
122 |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
123 FORM is an expression that will be dynamically evaluated and whose |
86443 | 124 value will be concatenated to the menu entry's label. |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
125 |
14108 | 126 :style STYLE |
26428
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
25224
diff
changeset
|
127 |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
128 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
|
129 defined: |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
130 |
16812
af96712b7f5d
(easy-menu-create-keymaps): Menu item STYLE toggle (checkbox)
Richard M. Stallman <rms@gnu.org>
parents:
16160
diff
changeset
|
131 toggle: A checkbox. |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
132 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
|
133 radio: A radio button. |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
134 Prepend the name with `[X] ' or `[ ] ' depending on if selected or not. |
30194 | 135 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
|
136 menu bar itself. |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
137 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
|
138 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
139 :selected SELECTED |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
140 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
141 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
|
142 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
|
143 |
28522
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
144 :help HELP |
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
145 |
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
146 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
|
147 |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
148 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
|
149 unselectable text. A string consisting solely of hyphens is displayed |
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
150 as a solid horizontal line. |
6529 | 151 |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
152 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
|
153 `(progn |
50428
8636083efe8b
(easy-menu-define): Don't make a defvar for nil.
Richard M. Stallman <rms@gnu.org>
parents:
50298
diff
changeset
|
154 ,(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
|
155 (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
|
156 |
81796
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
157 (defun easy-menu-binding (menu &optional item-name) |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
158 "Return a binding suitable to pass to `define-key'. |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
159 This is expected to be bound to a mouse event." |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
160 ;; Under Emacs this is almost trivial, whereas under XEmacs this may |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
161 ;; involve defining a function that calls popup-menu. |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
162 (let ((props (if (symbolp menu) |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
163 (prog1 (get menu 'menu-prop) |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
164 (setq menu (symbol-function menu)))))) |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
165 (cons 'menu-item |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
166 (cons (or item-name |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
167 (if (keymapp menu) |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
168 (keymap-prompt menu)) |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
169 "") |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
170 (cons menu props))))) |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
171 |
11860
0c39d1945e5e
(easy-menu-do-define): Add autoload cookie.
Karl Heuer <kwzh@gnu.org>
parents:
11833
diff
changeset
|
172 ;;;###autoload |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
173 (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
|
174 ;; 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
|
175 ;; `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
|
176 ;; 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
|
177 ;; function. |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
178 (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
|
179 (when symbol |
86ecd875b9c5
(easy-menu-do-define): Handle nil for SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
47550
diff
changeset
|
180 (set symbol keymap) |
61763
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
181 (defalias symbol |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
182 `(lambda (event) ,doc (interactive "@e") |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
183 ;; 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
|
184 ;; 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
|
185 (x-popup-menu event |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
186 (or (and (symbolp ,symbol) |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
187 (funcall |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
188 (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
|
189 :filter) |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
190 'identity) |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
191 (symbol-function ,symbol))) |
ce71dc9ea46f
(easy-menu-do-define): Use defalias, not fset.
Richard M. Stallman <rms@gnu.org>
parents:
58124
diff
changeset
|
192 ,symbol))))) |
81796
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
193 (dolist (map (if (keymapp maps) (list maps) maps)) |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
194 (define-key map |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
195 (vector 'menu-bar (easy-menu-intern (car menu))) |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
196 (easy-menu-binding keymap (car menu)))))) |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
197 |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
198 (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
|
199 "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
|
200 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
|
201 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
|
202 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
|
203 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
|
204 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
|
205 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
|
206 (cond |
bed718560d06
(easy-menu-filter-return):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46197
diff
changeset
|
207 ((and (not (keymapp menu)) (consp menu)) |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
208 ;; 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
|
209 ;; unless it's an XEmacs menu. |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
210 (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
|
211 ((vectorp menu) |
bed718560d06
(easy-menu-filter-return):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46197
diff
changeset
|
212 ;; It's just a menu entry. |
bed718560d06
(easy-menu-filter-return):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46197
diff
changeset
|
213 (setq menu (cdr (easy-menu-convert-item menu))))) |
bed718560d06
(easy-menu-filter-return):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46197
diff
changeset
|
214 menu) |
6529 | 215 |
87768
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
216 (defvar easy-menu-avoid-duplicate-keys t |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
217 "Dynamically scoped var to register already used keys in a menu. |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
218 If it holds a list, this is expected to be a list of keys already seen in the |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
219 menu we're processing. Else it means we're not processing a menu.") |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
220 |
9586
bada2dc32adc
(easy-menu-create-keymaps): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
8541
diff
changeset
|
221 ;;;###autoload |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
222 (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
|
223 "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
|
224 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
|
225 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
|
226 (let ((menu (make-sparse-keymap menu-name)) |
87768
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
227 (easy-menu-avoid-duplicate-keys nil) |
28522
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
228 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
|
229 ;; 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
|
230 (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
|
231 (cdr menu-items) |
25099b559af9
(easy-menu-create-menu, easy-menu-do-add-item): Use keywordp.
Dave Love <fx@gnu.org>
parents:
28522
diff
changeset
|
232 (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
|
233 (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
|
234 (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
|
235 (cond |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
236 ((eq keyword :filter) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
237 (setq filter `(lambda (menu) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
238 (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
|
239 ((eq keyword :active) (setq enable (or arg ''nil))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
240 ((eq keyword :label) (setq label arg)) |
28522
7fcfdde7365a
(easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
241 ((eq keyword :help) (setq help arg)) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
242 ((or (eq keyword :included) (eq keyword :visible)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
243 (setq visible (or arg ''nil))))) |
30194 | 244 (if (equal visible ''nil) |
245 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
|
246 (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
|
247 (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
|
248 (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
|
249 (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
|
250 (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
|
251 (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
|
252 (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
|
253 (if filter |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
254 ;; 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
|
255 ;; 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
|
256 ;; 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
|
257 ;; easy-menu-filter-return). |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
258 (setq menu menu-items) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
259 (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
|
260 (when prop |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
261 (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
|
262 (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
|
263 menu))) |
6529 | 264 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
265 |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
266 ;; Known button types. |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
267 (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
|
268 '((radio . :radio) (toggle . :toggle))) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
269 |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
270 (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
|
271 |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
272 (defun easy-menu-convert-item (item) |
30194 | 273 "Memoize the value returned by `easy-menu-convert-item-1' called on ITEM. |
274 This makes key-shortcut-caching work a *lot* better when this | |
275 conversion is done from within a filter. | |
276 This also helps when the NAME of the entry is recreated each time: | |
277 since the menu is built and traversed separately, the lookup | |
278 would always fail because the key is `equal' but not `eq'." | |
95371
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
279 (let* ((cache (gethash item easy-menu-converted-items-table)) |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
280 (result (or cache (easy-menu-convert-item-1 item))) |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
281 (key (car-safe result))) |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
282 (when (and (listp easy-menu-avoid-duplicate-keys) (symbolp key)) |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
283 ;; Merging multiple entries with the same name is sometimes what we |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
284 ;; want, but not when the entries are actually different (e.g. same |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
285 ;; name but different :suffix as seen in cal-menu.el) and appear in |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
286 ;; the same menu. So we try to detect and resolve conflicts. |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
287 (while (memq key easy-menu-avoid-duplicate-keys) |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
288 ;; We need to use some distinct object, ideally a symbol, ideally |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
289 ;; related to the `name'. Uninterned symbols do not work (they |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
290 ;; are apparently turned into strings and re-interned later on). |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
291 (setq key (intern (format "%s-%d" (symbol-name key) |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
292 (length easy-menu-avoid-duplicate-keys)))) |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
293 (setq result (cons key (cdr result)))) |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
294 (push key easy-menu-avoid-duplicate-keys)) |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
295 |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
296 (unless cache (puthash item result easy-menu-converted-items-table)) |
eba56dbc7193
(easy-menu-convert-item, easy-menu-convert-item-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94655
diff
changeset
|
297 result)) |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
298 |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
299 (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
|
300 "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
|
301 ITEM defines an item as in `easy-menu-define'." |
81796
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
302 (let (name command label prop remove) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
303 (cond |
24987
aee690417f63
(easy-menu-do-add-item): Support for new seperator types.
Gerd Moellmann <gerd@gnu.org>
parents:
24341
diff
changeset
|
304 ((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
|
305 (setq label item)) |
aee690417f63
(easy-menu-do-add-item): Support for new seperator types.
Gerd Moellmann <gerd@gnu.org>
parents:
24341
diff
changeset
|
306 ((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
|
307 (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
|
308 (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
|
309 (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
|
310 (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
|
311 (if (null command) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
312 ;; 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
|
313 (setq remove t) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
314 (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
|
315 (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
|
316 (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
|
317 (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
|
318 (setq command (symbol-function command))))) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
319 ((vectorp item) ; An item. |
22196
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
320 (let* ((ilen (length item)) |
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
321 (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
|
322 (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
|
323 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
|
324 (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
|
325 (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
|
326 (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
|
327 (let ((count 2) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
328 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
|
329 (setq active nil) |
22196
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
330 (while (> ilen count) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
331 (setq keyword (aref item count)) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
332 (setq arg (aref item (1+ count))) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
333 (setq count (+ 2 count)) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
334 (cond |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
335 ((or (eq keyword :included) (eq keyword :visible)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
336 (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
|
337 ((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
|
338 (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
|
339 ((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
|
340 ((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
|
341 ((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
|
342 ((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
|
343 ((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
|
344 ((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
|
345 ((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
|
346 (if suffix |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
347 (setq label |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
348 (if (stringp suffix) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
349 (if (stringp label) (concat label " " suffix) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
350 (list 'concat label (concat " " suffix))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
351 (if (stringp label) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
352 (list 'concat (concat label " ") suffix) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
353 (list 'concat label " " suffix))))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
354 (cond |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
355 ((eq style 'button) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
356 (setq label (if (stringp label) (concat "[" label "]") |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
357 (list 'concat "[" label "]")))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
358 ((and selected |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
359 (setq style (assq style easy-menu-button-prefix))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
360 (setq prop (cons :button |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
361 (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
|
362 (when (stringp keys) |
87768
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
363 (if (string-match "^[^\\]*\\(\\\\\\[\\([^]]+\\)]\\)[^\\]*$" |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
364 keys) |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
365 (let ((prefix |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
366 (if (< (match-beginning 0) (match-beginning 1)) |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
367 (substring keys 0 (match-beginning 1)))) |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
368 (postfix |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
369 (if (< (match-end 1) (match-end 0)) |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
370 (substring keys (match-end 1)))) |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
371 (cmd (intern (match-string 2 keys)))) |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
372 (setq keys (and (or prefix postfix) |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
373 (cons prefix postfix))) |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
374 (setq keys |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
375 (and (or keys (not (eq command cmd))) |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
376 (cons cmd keys)))) |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
377 (setq cache-specified nil)) |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
378 (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
|
379 (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
|
380 (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
|
381 ;; 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
|
382 (setq remove t) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
383 (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
|
384 (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
|
385 (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
|
386 (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
|
387 (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
|
388 (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
|
389 (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
|
390 ;; `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
|
391 ;; 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
|
392 ;; via keymap functions. |
87768
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
393 (let ((key (easy-menu-intern name))) |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
394 (cons key |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
395 (and (not remove) |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
396 (cons 'menu-item |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
397 (cons label |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
398 (and name |
2dfbe4c86ab7
(easy-menu-avoid-duplicate-keys): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
399 (cons command prop))))))))) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
400 |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
401 (defun easy-menu-define-key (menu key item &optional before) |
30194 | 402 "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
|
403 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
|
404 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
|
405 |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
406 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
|
407 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
|
408 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
|
409 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
|
410 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
|
411 \(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
|
412 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
|
413 (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
|
414 (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
|
415 tail done) |
20801
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
416 (while (not done) |
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
417 (cond |
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
418 ((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
|
419 (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
|
420 ;; 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
|
421 ;; 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
|
422 ;; later. |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
423 (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
|
424 (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
|
425 (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
|
426 (setq inserted t) |
21807
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
427 (setq menu (cdr menu))) |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
428 (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
|
429 ((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
|
430 (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
|
431 (and before ; wanted elsewhere and |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
432 (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
|
433 (not (keymapp tail)) |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
434 (not (easy-menu-name-match |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
435 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
|
436 (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
|
437 (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
|
438 (setq inserted t) |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
439 (setq menu (cdr menu)))) |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
440 (t (setq menu (cdr menu))))))) |
26428
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
25224
diff
changeset
|
441 |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
442 (defun easy-menu-name-match (name item) |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
443 "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
|
444 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
|
445 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
|
446 (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
|
447 (if (symbolp name) |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
448 (eq (car-safe item) name) |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
449 (if (stringp name) |
45299
948bb97d1e60
(easy-menu-name-match): Match both
Jason Rumney <jasonr@gnu.org>
parents:
44826
diff
changeset
|
450 ;; 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
|
451 (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
|
452 (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
|
453 ;; 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
|
454 ;; for backwards compatibility. |
58097
21dc9bd90575
(easy-menu-intern): Revert to no-downcasing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57978
diff
changeset
|
455 (eq (car-safe item) (intern name))))))) |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
456 |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
457 (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
|
458 "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
|
459 (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
|
460 (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
|
461 |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
462 (defvar easy-menu-item-count 0) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
463 |
30057
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
464 (defun easy-menu-make-symbol (callback &optional noexp) |
6413c7b9a6c3
(easy-menu-define): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29054
diff
changeset
|
465 "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
|
466 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
|
467 \(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
|
468 (let ((command |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
469 (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
|
470 (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
|
471 (fset command |
94305
67bb48862873
(easy-menu-make-symbol): Don't wrap keyboard macros within lambdas.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87768
diff
changeset
|
472 (if (or (keymapp callback) (commandp callback) |
67bb48862873
(easy-menu-make-symbol): Don't wrap keyboard macros within lambdas.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87768
diff
changeset
|
473 ;; `functionp' is probably not needed. |
67bb48862873
(easy-menu-make-symbol): Don't wrap keyboard macros within lambdas.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87768
diff
changeset
|
474 (functionp callback) noexp) |
67bb48862873
(easy-menu-make-symbol): Don't wrap keyboard macros within lambdas.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87768
diff
changeset
|
475 callback |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
476 `(lambda () (interactive) ,callback))) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
477 command)) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
478 |
22033
aa1d105f0d67
(easy-menu-change): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
21807
diff
changeset
|
479 ;;;###autoload |
74910
776a7e3c21a0
easy-menu-change patch
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
74466
diff
changeset
|
480 (defun easy-menu-change (path name items &optional before map) |
8085
c7eb887a1e78
(easy-menu-change): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7614
diff
changeset
|
481 "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
|
482 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
|
483 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
|
484 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
|
485 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
|
486 |
74910
776a7e3c21a0
easy-menu-change patch
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
74466
diff
changeset
|
487 If MAP is specified, it should normally be a keymap; nil stands for the local |
776a7e3c21a0
easy-menu-change patch
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
74466
diff
changeset
|
488 menu-bar keymap. It can also be a symbol, which has earlier been used as the |
776a7e3c21a0
easy-menu-change patch
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
74466
diff
changeset
|
489 first argument in a call to `easy-menu-define', or the value of such a symbol. |
776a7e3c21a0
easy-menu-change patch
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
74466
diff
changeset
|
490 |
25224
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
491 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
|
492 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
|
493 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
|
494 |
66495
9bc148ee2fda
(easy-menu-change): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
64751
diff
changeset
|
495 To implement dynamic menus, either call this from |
9bc148ee2fda
(easy-menu-change): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
64751
diff
changeset
|
496 `menu-bar-update-hook' or use a menu filter." |
74910
776a7e3c21a0
easy-menu-change patch
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
74466
diff
changeset
|
497 (easy-menu-add-item map 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
|
498 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
499 ;; 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
|
500 ;; In Emacs this is done automatically when switching keymaps, so |
97459
84cc2bc95fba
(easy-menu-add): Don't precompute keybindings
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95371
diff
changeset
|
501 ;; here easy-menu-remove is a noop. |
47550
df31632ef1db
(easy-menu-remove): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47254
diff
changeset
|
502 (defalias 'easy-menu-remove 'ignore |
df31632ef1db
(easy-menu-remove): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47254
diff
changeset
|
503 "Remove MENU from the current menu bar. |
df31632ef1db
(easy-menu-remove): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47254
diff
changeset
|
504 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
|
505 \(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
|
506 |
df31632ef1db
(easy-menu-remove): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47254
diff
changeset
|
507 \(fn MENU)") |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
508 |
22196
4f4d9c92ae33
(easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents:
22033
diff
changeset
|
509 (defun easy-menu-add (menu &optional map) |
47169
bed718560d06
(easy-menu-filter-return):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46197
diff
changeset
|
510 "Add the menu to the menubar. |
62557
efeaec0ce9c4
(easy-menu-add): Correct docstring since
David Kastrup <dak@gnu.org>
parents:
62301
diff
changeset
|
511 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
|
512 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
|
513 actually add the menu to the current menubar. |
efeaec0ce9c4
(easy-menu-add): Correct docstring since
David Kastrup <dak@gnu.org>
parents:
62301
diff
changeset
|
514 |
efeaec0ce9c4
(easy-menu-add): Correct docstring since
David Kastrup <dak@gnu.org>
parents:
62301
diff
changeset
|
515 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
|
516 completely and menu filter functions can be expected to work." |
97459
84cc2bc95fba
(easy-menu-add): Don't precompute keybindings
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95371
diff
changeset
|
517 ) |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
518 |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
519 (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
|
520 "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
|
521 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
|
522 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
|
523 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
|
524 (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
|
525 (cons "menu-bar" menu-path) |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
526 submenu before)) |
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
527 |
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
|
528 (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
|
529 "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
|
530 |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
531 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
|
532 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
|
533 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
|
534 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
|
535 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
|
536 |
50298
9c1195ddde1a
(easy-menu-add-item): Align the docstring with the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50296
diff
changeset
|
537 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
|
538 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
|
539 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
|
540 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
541 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
|
542 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
|
543 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
|
544 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
|
545 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
546 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
|
547 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
|
548 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
|
549 (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
|
550 (and (null map) (null path) |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
551 (stringp (car-safe item)) |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
552 (car item)))) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
553 (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
|
554 ;; 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
|
555 ;; `easy-menu-remove-item'. |
44826
af8676236636
(easy-menu-intern): Downcase before interning.
Richard M. Stallman <rms@gnu.org>
parents:
42014
diff
changeset
|
556 (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
|
557 (cdr item) before) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
558 (if (or (keymapp item) |
58124
28acd37455bb
(easy-menu-add-item): Use keymap-prompt. Simplify.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58123
diff
changeset
|
559 (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
|
560 (setq item (symbol-value item)))) |
23991
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
561 ;; 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
|
562 (setq item (cons (keymap-prompt item) item))) |
81796
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
563 (setq item (easy-menu-convert-item item)) |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
564 (easy-menu-define-key map (easy-menu-intern (car item)) (cdr item) before))) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
565 |
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
|
566 (defun easy-menu-item-present-p (map path name) |
78474
88c9f4e4160e
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78217
diff
changeset
|
567 "In submenu of MAP with path PATH, return non-nil if 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
|
568 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
|
569 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
|
570 (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
|
571 |
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
|
572 (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
|
573 "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
|
574 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
|
575 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
|
576 (setq map (easy-menu-get-map map path)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
577 (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
|
578 (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
|
579 ret)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
580 |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
581 (defun easy-menu-return-item (menu name) |
30194 | 582 "In menu MENU try to look for menu item with name NAME. |
583 If a menu item is found, return (NAME . item), otherwise return nil. | |
584 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
|
585 ;; 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
|
586 ;; 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
|
587 ;; 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
|
588 ;; 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
|
589 ;; 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
|
590 ;; 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
|
591 (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
|
592 (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
|
593 ret enable cache label) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
594 (cond |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
595 ((stringp (car-safe item)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
596 ;; 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
|
597 (setq label (car item)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
598 (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
|
599 (setq ret (list :help (car item))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
600 (setq item (cdr item))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
601 (when (and (consp item) (consp (car item)) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
602 (or (null (caar item)) (numberp (caar item)))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
603 (setq cache (car item)) ; Got cache |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
604 (setq item (cdr item))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
605 (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
|
606 (setq ret (cons :enable (cons enable ret)))) |
3dee93390da0
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23955
diff
changeset
|
607 (if cache (setq ret (cons cache ret))) |
42014
198c1186dee3
(easy-menu-intern): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38431
diff
changeset
|
608 (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
|
609 (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
|
610 (cons name item)) ; Keymap or new menu format |
198c1186dee3
(easy-menu-intern): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38431
diff
changeset
|
611 ))) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
612 |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
613 (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
|
614 "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
|
615 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
|
616 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
|
617 (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
|
618 (when (stringp name) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
619 ;; `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
|
620 ;; actual menu entries's names. |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
621 (catch 'found |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
622 (map-keymap (lambda (key item) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
623 (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
|
624 (error nil)) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
625 ;; 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
|
626 ;; `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
|
627 ;; 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
|
628 ;; `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
|
629 (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
|
630 map))))) |
25224
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
631 |
31847deec8cb
(easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents:
24987
diff
changeset
|
632 (defun easy-menu-get-map (map path &optional to-modify) |
30194 | 633 "Return a sparse keymap in which to add or remove an item. |
634 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
|
635 |
30194 | 636 TO-MODIFY, if non-nil, is the name of the item the caller |
637 wants to modify in the map that we return. | |
638 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
|
639 (setq map |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
640 (catch 'found |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
641 (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
|
642 (setq map (symbol-value map))) |
81796
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
643 (let ((maps (if map (if (keymapp map) (list map) map) |
6c2d34aea93f
(easy-menu-binding): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75346
diff
changeset
|
644 (current-active-maps)))) |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
645 ;; 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
|
646 (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
|
647 (dolist (name path) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
648 (setq maps |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
649 (delq nil (mapcar (lambda (map) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
650 (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
|
651 map name)) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
652 (and (keymapp map) map)) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
653 maps)))) |
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
654 |
34520
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
655 ;; 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
|
656 (when to-modify |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
657 (dolist (map maps) |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
658 (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
|
659 (throw 'found map)))) |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
660 ;; 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
|
661 (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
|
662 |
34520
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
663 ;; Otherwise, make one up. |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
664 ;; 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
|
665 ;; 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
|
666 (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
|
667 (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
|
668 (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
|
669 (apply 'vector (mapcar 'easy-menu-intern path)) |
34520
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
670 (if name (cons name newmap) newmap)) |
bea29075080b
(easy-menu-define): Setup indentation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30209
diff
changeset
|
671 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
|
672 (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
|
673 map) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
674 |
6529 | 675 (provide 'easymenu) |
676 | |
57966
13661731eef0
(easy-menu-get-map-look-for-name): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57883
diff
changeset
|
677 ;; arch-tag: 2a04020d-90d2-476d-a7c6-71e072007a4a |
6529 | 678 ;;; easymenu.el ends here |