annotate lisp/emacs-lisp/easymenu.el @ 28890:d29cc97fe49e

*** empty log message ***
author Dave Love <fx@gnu.org>
date Fri, 12 May 2000 10:58:13 +0000
parents 7fcfdde7365a
children 25099b559af9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; easymenu.el --- support the easymenu interface for defining a menu.
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
3 ;; Copyright (C) 1994, 1996, 1998 Free Software Foundation, Inc.
6600
f75ac1f3d99c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6542
diff changeset
4
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Keywords: emulations
6600
f75ac1f3d99c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6542
diff changeset
6 ;; Author: rms
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; any later version.
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14108
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14108
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14108
diff changeset
23 ;; Boston, MA 02111-1307, USA.
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14108
diff changeset
25 ;;; Commentary:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14108
diff changeset
26
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14108
diff changeset
27 ;; This is compatible with easymenu.el by Per Abrahamsen
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14108
diff changeset
28 ;; but it is much simpler as it doesn't try to support other Emacs versions.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14108
diff changeset
29 ;; The code was mostly derived from lmenu.el.
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;;; Code:
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32
22196
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
33 (defcustom easy-menu-precalculate-equivalent-keybindings t
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
34 "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
35 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
36 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
37 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
38 this delay will come when a menu is displayed the first time. If you never use
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
39 menus, turn this variable off, otherwise it is probably better to keep it on."
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
40 :type 'boolean
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
41 :group 'menu
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
42 :version "20.3")
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
43
6542
1d9da8160357 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6529
diff changeset
44 ;;;###autoload
6600
f75ac1f3d99c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6542
diff changeset
45 (defmacro easy-menu-define (symbol maps doc menu)
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 "Define a menu bar submenu in maps MAPS, according to MENU.
11512
a196f05240a9 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 10415
diff changeset
47 The menu keymap is stored in symbol SYMBOL, both as its value
a196f05240a9 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 10415
diff changeset
48 and as its function definition. DOC is used as the doc string for SYMBOL.
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 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
51 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
52
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
53 :filter FUNCTION
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
54
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
55 FUNCTION is a function with one argument, the menu. It returns the actual
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
56 menu displayed.
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
57
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
58 :visible INCLUDE
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
59
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
60 INCLUDE is an expression; this menu is only visible if this
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
61 expression has a non-nil value. `:include' is an alias for `:visible'.
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
62
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
63 :active ENABLE
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 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
66 whenever this expression's value is non-nil.
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 The rest of the elements in MENU, are menu items.
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69
6600
f75ac1f3d99c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6542
diff changeset
70 A menu item is usually a vector of three elements: [NAME CALLBACK ENABLE]
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71
6542
1d9da8160357 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6529
diff changeset
72 NAME is a string--the menu item name.
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73
6542
1d9da8160357 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6529
diff changeset
74 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
75 or a list to evaluate when the item is chosen.
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76
8541
39e8d792604f (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8085
diff changeset
77 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
78 whenever this expression's value is non-nil.
6600
f75ac1f3d99c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6542
diff changeset
79
26428
f572944ca41f * emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents: 25224
diff changeset
80 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
81
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
82 [ 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
83
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
84 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
85
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
86 :keys KEYS
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
87
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
88 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
89 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
90 computed automatically.
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
91 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
92
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
93 :key-sequence KEYS
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
94
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
95 KEYS is nil a string or a vector; nil or a keyboard equivalent to this
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
96 menu item.
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
97 This is a hint that will considerably speed up Emacs first display of
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
98 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
99 keyboard equivalent.
9733
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
100
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
101 :active ENABLE
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
102
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
103 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
104 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
105
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
106 :included INCLUDE
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
107
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
108 INCLUDE is an expression; this item is only visible if this
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
109 expression has a non-nil value.
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
110
9733
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
111 :suffix NAME
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
112
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
113 NAME is a string; the name of an argument to CALLBACK.
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
114
14108
cab8d383f10d (easy-menu-define): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 11860
diff changeset
115 :style STYLE
26428
f572944ca41f * emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents: 25224
diff changeset
116
9733
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
117 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
118 defined:
9733
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
119
16812
af96712b7f5d (easy-menu-create-keymaps): Menu item STYLE toggle (checkbox)
Richard M. Stallman <rms@gnu.org>
parents: 16160
diff changeset
120 toggle: A checkbox.
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
121 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
122 radio: A radio button.
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
123 Prepend the name with `[X] ' or `[ ] ' depending on if selected or not.
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
124 button: Surround the name with `[' and `]'. Use this for an item in the
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
125 menu bar itself.
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
126 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
127
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
128 :selected SELECTED
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
129
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
130 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
131 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
132
28522
7fcfdde7365a (easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents: 26428
diff changeset
133 :help HELP
7fcfdde7365a (easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents: 26428
diff changeset
134
7fcfdde7365a (easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents: 26428
diff changeset
135 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
136
6542
1d9da8160357 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6529
diff changeset
137 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
138 unselectable text. A string consisting solely of hyphens is displayed
1d9da8160357 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6529
diff changeset
139 as a solid horizontal line.
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
141 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
142 `(progn
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
143 (defvar ,symbol nil ,doc)
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
144 (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
145
11860
0c39d1945e5e (easy-menu-do-define): Add autoload cookie.
Karl Heuer <kwzh@gnu.org>
parents: 11833
diff changeset
146 ;;;###autoload
9733
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
147 (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
148 ;; 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
149 ;; `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
150 ;; 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
151 ;; function.
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
152 (set symbol (easy-menu-create-menu (car menu) (cdr menu)))
26428
f572944ca41f * emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents: 25224
diff changeset
153 (fset symbol `(lambda (event) ,doc (interactive "@e")
f572944ca41f * emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents: 25224
diff changeset
154 (x-popup-menu event ,symbol)))
f572944ca41f * emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents: 25224
diff changeset
155 (mapcar (function (lambda (map)
9733
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
156 (define-key map (vector 'menu-bar (intern (car menu)))
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
157 (cons (car menu) (symbol-value symbol)))))
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
158 (if (keymapp maps) (list maps) maps)))
6542
1d9da8160357 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6529
diff changeset
159
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
160 (defun easy-menu-filter-return (menu)
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
161 "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
162 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
163 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
164 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
165 return a menu items list (without menu name and keywords).
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
166 This function returns the right thing in the two cases."
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
167 (easy-menu-get-map menu nil)) ; Get past indirections.
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168
9586
bada2dc32adc (easy-menu-create-keymaps): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 8541
diff changeset
169 ;;;###autoload
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
170 (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
171 "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
172 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
173 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
174 (let ((menu (make-sparse-keymap menu-name))
28522
7fcfdde7365a (easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents: 26428
diff changeset
175 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
176 ;; Look for keywords.
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
177 (while (and menu-items (cdr menu-items)
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
178 (symbolp (setq keyword (car menu-items)))
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
179 (= ?: (aref (symbol-name keyword) 0)))
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
180 (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
181 (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
182 (cond
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
183 ((eq keyword :filter) (setq filter arg))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
184 ((eq keyword :active) (setq enable (or arg ''nil)))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
185 ((eq keyword :label) (setq label arg))
28522
7fcfdde7365a (easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents: 26428
diff changeset
186 ((eq keyword :help) (setq help arg))
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
187 ((or (eq keyword :included) (eq keyword :visible))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
188 (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
189 (if (equal visible ''nil) nil ; Invisible menu entry, return nil.
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
190 (if (and visible (not (easy-menu-always-true visible)))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
191 (setq prop (cons :visible (cons visible prop))))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
192 (if (and enable (not (easy-menu-always-true enable)))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
193 (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
194 (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
195 (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
196 (if label (setq prop (cons nil (cons label prop))))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
197 (while menu-items
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
198 (easy-menu-do-add-item menu (car menu-items))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
199 (setq menu-items (cdr menu-items)))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
200 (when prop
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
201 (setq menu (easy-menu-make-symbol menu))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
202 (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
203 menu)))
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
205
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
206 ;; Known button types.
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
207 (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
208 '((radio . :radio) (toggle . :toggle)))
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
209
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
210 (defun easy-menu-do-add-item (menu item &optional before)
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
211 ;; Parse an item description and add the item to a keymap. This is
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
212 ;; the function that is used for item definition by the other easy-menu
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
213 ;; functions.
20801
8aeddd528f57 (easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents: 20791
diff changeset
214 ;; MENU is a sparse keymap i.e. a list starting with the symbol `keymap'.
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
215 ;; ITEM defines an item as in `easy-menu-define'.
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
216 ;; Optional argument BEFORE is nil or a key in MENU. If BEFORE is not nil
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
217 ;; put item before BEFORE in MENU, otherwise if item is already present in
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
218 ;; MENU, just change it, otherwise put it last in MENU.
28522
7fcfdde7365a (easy-menu-create-menu): Process menu
Gerd Moellmann <gerd@gnu.org>
parents: 26428
diff changeset
219 (let (name command label prop remove help)
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
220 (cond
24987
aee690417f63 (easy-menu-do-add-item): Support for new seperator types.
Gerd Moellmann <gerd@gnu.org>
parents: 24341
diff changeset
221 ((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
222 (setq label item))
aee690417f63 (easy-menu-do-add-item): Support for new seperator types.
Gerd Moellmann <gerd@gnu.org>
parents: 24341
diff changeset
223 ((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
224 (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
225 (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
226 (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
227 (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
228 (if (null command)
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
229 ;; 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
230 (setq remove t)
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
231 (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
232 (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
233 (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
234 (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
235 (setq command (symbol-function command)))))
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
236 ((vectorp item) ; An item.
22196
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
237 (let* ((ilen (length item))
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
238 (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
239 (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
240 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
241 (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
242 (if no-name (setq command (easy-menu-make-symbol command)))
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
243 (if (and (symbolp active) (= ?: (aref (symbol-name active) 0)))
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
244 (let ((count 2)
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
245 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
246 (setq active nil)
22196
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
247 (while (> ilen count)
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
248 (setq keyword (aref item count))
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
249 (setq arg (aref item (1+ count)))
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
250 (setq count (+ 2 count))
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
251 (cond
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
252 ((or (eq keyword :included) (eq keyword :visible))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
253 (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
254 ((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
255 (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
256 ((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
257 ((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
258 ((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
259 ((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
260 ((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
261 ((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
262 ((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
263 (if suffix
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
264 (setq label
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
265 (if (stringp suffix)
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
266 (if (stringp label) (concat label " " suffix)
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
267 (list 'concat label (concat " " suffix)))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
268 (if (stringp label)
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
269 (list 'concat (concat label " ") suffix)
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
270 (list 'concat label " " suffix)))))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
271 (cond
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
272 ((eq style 'button)
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
273 (setq label (if (stringp label) (concat "[" label "]")
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
274 (list 'concat "[" label "]"))))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
275 ((and selected
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
276 (setq style (assq style easy-menu-button-prefix)))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
277 (setq prop (cons :button
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
278 (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
279 (when (stringp keys)
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
280 (if (string-match "^[^\\]*\\(\\\\\\[\\([^]]+\\)]\\)[^\\]*$"
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
281 keys)
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
282 (let ((prefix
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
283 (if (< (match-beginning 0) (match-beginning 1))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
284 (substring keys 0 (match-beginning 1))))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
285 (postfix
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
286 (if (< (match-end 1) (match-end 0))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
287 (substring keys (match-end 1))))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
288 (cmd (intern (substring keys (match-beginning 2)
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
289 (match-end 2)))))
22196
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
290 (setq keys (and (or prefix postfix)
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
291 (cons prefix postfix)))
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
292 (setq keys
22196
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
293 (and (or keys (not (eq command cmd)))
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
294 (cons cmd keys))))
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
295 (setq cache-specified nil))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
296 (if keys (setq prop (cons :keys (cons keys prop)))))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
297 (if (and visible (not (easy-menu-always-true visible)))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
298 (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
299 ;; 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
300 (setq remove t)
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
301 (setq prop (cons :visible (cons visible prop)))))))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
302 (if (and active (not (easy-menu-always-true active)))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
303 (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
304 (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
305 (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
306 (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
307 (t (error "Invalid menu item in easymenu")))
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
308 (easy-menu-define-key-intern menu name
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
309 (and (not remove)
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
310 (cons 'menu-item
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
311 (cons label
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
312 (and name
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
313 (cons command prop)))))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
314 before)))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
315
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
316 (defun easy-menu-define-key-intern (menu key item &optional before)
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
317 ;; This is the same as easy-menu-define-key, but it interns KEY and
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
318 ;; BEFORE if they are strings.
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
319 (easy-menu-define-key menu (if (stringp key) (intern key) key) item
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
320 (if (stringp before) (intern before) before)))
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
321
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
322 (defun easy-menu-define-key (menu key item &optional before)
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
323 ;; Add binding in MENU for KEY => ITEM. Similar to `define-key-after'.
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
324 ;; If KEY is not nil then delete any duplications. If ITEM is nil, then
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
325 ;; don't insert, only delete.
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
326 ;; Optional argument BEFORE is nil or a key in MENU. If BEFORE is not nil
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
327 ;; put binding before BEFORE in MENU, otherwise if binding is already
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
328 ;; present in MENU, just change it, otherwise put it last in MENU.
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
329 ;; KEY and BEFORE don't have to be symbols, comparison is done with equal
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
330 ;; not with eq.
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
331 (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
332 tail done)
20801
8aeddd528f57 (easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents: 20791
diff changeset
333 (while (not done)
8aeddd528f57 (easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents: 20791
diff changeset
334 (cond
8aeddd528f57 (easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents: 20791
diff changeset
335 ((or (setq done (or (null (cdr menu)) (keymapp (cdr menu))))
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
336 (and before (equal (car-safe (cadr menu)) before)))
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
337 ;; 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
338 ;; 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
339 ;; later.
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
340 (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
341 (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
342 (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
343 (setq inserted t)
21807
c62197b13ece (easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents: 21745
diff changeset
344 (setq menu (cdr menu)))
c62197b13ece (easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents: 21745
diff changeset
345 (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
346 ((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
347 (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
348 (and before ; wanted elsewhere and
c62197b13ece (easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents: 21745
diff changeset
349 (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
350 (not (keymapp tail))
c62197b13ece (easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents: 21745
diff changeset
351 (not (equal (car-safe (car tail)) before)))) ; in position
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
352 (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
353 (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
354 (setq inserted t)
c62197b13ece (easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents: 21745
diff changeset
355 (setq menu (cdr menu))))
c62197b13ece (easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents: 21745
diff changeset
356 (t (setq menu (cdr menu)))))))
26428
f572944ca41f * emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents: 25224
diff changeset
357
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
358 (defun easy-menu-always-true (x)
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
359 ;; Return true if X never evaluates to nil.
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
360 (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
361 (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
362
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
363 (defvar easy-menu-item-count 0)
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
364
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
365 (defun easy-menu-make-symbol (callback)
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
366 ;; Return a unique symbol with CALLBACK as function value.
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
367 (let ((command
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
368 (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
369 (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
370 (fset command
21745
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
371 (if (keymapp callback) callback
38a6d62cddb9 Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents: 21689
diff changeset
372 `(lambda () (interactive) ,callback)))
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
373 command))
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
374
22033
aa1d105f0d67 (easy-menu-change): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21807
diff changeset
375 ;;;###autoload
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
376 (defun easy-menu-change (path name items &optional before)
8085
c7eb887a1e78 (easy-menu-change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7614
diff changeset
377 "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
378 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
379 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
380 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
381 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
382
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
383 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
384 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
385 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
386
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
387 Either call this from `menu-bar-update-hook' or use a menu filter,
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
388 to implement dynamic menus."
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
389 (easy-menu-add-item nil path (cons name items) before))
8085
c7eb887a1e78 (easy-menu-change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7614
diff changeset
390
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
391 ;; 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
392 ;; In Emacs this is done automatically when switching keymaps, so
22196
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
393 ;; here easy-menu-remove is a noop and easy-menu-add only precalculates
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
394 ;; equivalent keybindings (if easy-menu-precalculate-equivalent-keybindings
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
395 ;; is on).
9733
a721dbc48e10 (easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents: 9586
diff changeset
396 (defun easy-menu-remove (menu))
6600
f75ac1f3d99c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6542
diff changeset
397
22196
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
398 (defun easy-menu-add (menu &optional map)
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
399 "Maybe precalculate equivalent key bindings.
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
400 Do it if `easy-menu-precalculate-equivalent-keybindings' is on,"
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
401 (when easy-menu-precalculate-equivalent-keybindings
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
402 (if (and (symbolp menu) (not (keymapp menu)) (boundp menu))
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
403 (setq menu (symbol-value menu)))
4f4d9c92ae33 (easy-menu-do-add-item): Small simplifications.
Richard M. Stallman <rms@gnu.org>
parents: 22033
diff changeset
404 (if (keymapp menu) (x-popup-menu nil menu))))
6600
f75ac1f3d99c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6542
diff changeset
405
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
406 (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
407 "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
408
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
409 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
410 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
411 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
412 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
413 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
414
8d7a5687c803 (easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents: 22196
diff changeset
415 MAP should normally be a keymap; nil stands for the global menu-bar keymap.
8d7a5687c803 (easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents: 22196
diff changeset
416 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
417 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
418
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
419 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
420 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
421 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
422 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
423
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
424 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
425 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
426 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
427 (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
428 (and (null map) (null path)
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
429 (stringp (car-safe item))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
430 (car item))))
23991
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
431 (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
432 ;; 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
433 ;; `easy-menu-remove-item'.
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
434 (easy-menu-define-key-intern map (car item) (cdr item) before)
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
435 (if (or (keymapp item)
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
436 (and (symbolp item) (keymapp (symbol-value item))))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
437 ;; Item is a keymap, find the prompt string and use as item name.
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
438 (let ((tail (easy-menu-get-map item nil)) name)
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
439 (if (not (keymapp item)) (setq item tail))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
440 (while (and (null name) (consp (setq tail (cdr tail)))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
441 (not (keymapp tail)))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
442 (if (stringp (car tail)) (setq name (car tail)) ; Got a name.
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
443 (setq tail (cdr tail))))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
444 (setq item (cons name item))))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
445 (easy-menu-do-add-item map item before)))
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
446
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
447 (defun easy-menu-item-present-p (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
448 "In submenu of MAP with path PATH, return true iff item NAME is present.
8d7a5687c803 (easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents: 22196
diff changeset
449 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
450 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
451 (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
452
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
453 (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
454 "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
455 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
456 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
457 (setq map (easy-menu-get-map map path))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
458 (let ((ret (easy-menu-return-item map name)))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
459 (if ret (easy-menu-define-key-intern map name nil))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
460 ret))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
461
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
462 (defun easy-menu-return-item (menu name)
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
463 ;; In menu MENU try to look for menu item with name NAME.
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
464 ;; If a menu item is found, return (NAME . item), otherwise return nil.
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
465 ;; If item is an old format item, a new format item is returned.
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
466 (let ((item (lookup-key menu (vector (intern name))))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
467 ret enable cache label)
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
468 (cond
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
469 ((or (keymapp item) (eq (car-safe item) 'menu-item))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
470 (cons name item)) ; Keymap or new menu format
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
471 ((stringp (car-safe item))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
472 ;; 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
473 (setq label (car item))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
474 (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
475 (setq ret (list :help (car item)))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
476 (setq item (cdr item)))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
477 (when (and (consp item) (consp (car item))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
478 (or (null (caar item)) (numberp (caar item))))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
479 (setq cache (car item)) ; Got cache
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
480 (setq item (cdr item)))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
481 (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
482 (setq ret (cons :enable (cons enable ret))))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
483 (if cache (setq ret (cons cache ret)))
3dee93390da0 (easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23955
diff changeset
484 (cons name (cons 'menu-enable (cons label (cons item ret))))))))
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
485
25224
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
486 (defun easy-menu-get-map-look-for-name (name submap)
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
487 (while (and submap (not (or (equal (car-safe (cdr-safe (car submap))) name)
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
488 (equal (car-safe (cdr-safe (cdr-safe (car submap)))) name))))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
489 (setq submap (cdr submap)))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
490 submap)
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
491
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
492 (defun easy-menu-get-map (map path &optional to-modify)
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
493 ;; Return a sparse keymap in which to add or remove an 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
494 ;; 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
495
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
496 ;; TO-MODIFY, if non-nil, is the name of the item the caller
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
497 ;; wants to modify in the map that we return.
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
498 ;; In some cases we use that to select between the local and global maps.
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
499 (if (null map)
24341
9028f3cd0a5e (easy-menu-get-map): Don't crash if (current-local-map) is nil.
Richard M. Stallman <rms@gnu.org>
parents: 24075
diff changeset
500 (let ((local (and (current-local-map)
9028f3cd0a5e (easy-menu-get-map): Don't crash if (current-local-map) is nil.
Richard M. Stallman <rms@gnu.org>
parents: 24075
diff changeset
501 (lookup-key (current-local-map)
9028f3cd0a5e (easy-menu-get-map): Don't crash if (current-local-map) is nil.
Richard M. Stallman <rms@gnu.org>
parents: 24075
diff changeset
502 (vconcat '(menu-bar) (mapcar 'intern path)))))
24075
516b3dad7381 (easy-menu-get-map): Fix bugs in prev change.
Richard M. Stallman <rms@gnu.org>
parents: 23991
diff changeset
503 (global (lookup-key global-map
516b3dad7381 (easy-menu-get-map): Fix bugs in prev change.
Richard M. Stallman <rms@gnu.org>
parents: 23991
diff changeset
504 (vconcat '(menu-bar) (mapcar 'intern path)))))
25224
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
505 (cond ((and to-modify local (not (integerp local))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
506 (easy-menu-get-map-look-for-name to-modify local))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
507 (setq map local))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
508 ((and to-modify global (not (integerp global))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
509 (easy-menu-get-map-look-for-name to-modify global))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
510 (setq map global))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
511 ((and local local (not (integerp local)))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
512 (setq map local))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
513 ((and global (not (integerp global)))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
514 (setq map global))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
515 (t
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
516 (setq map (make-sparse-keymap))
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
517 (define-key (current-local-map)
31847deec8cb (easy-menu-get-map-look-for-name): New fn.
Karl Heuer <kwzh@gnu.org>
parents: 24987
diff changeset
518 (vconcat '(menu-bar) (mapcar 'intern path)) map))))
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
519 (if (and (symbolp map) (not (keymapp 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
520 (setq map (symbol-value 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
521 (if path (setq map (lookup-key map (vconcat (mapcar 'intern path))))))
8d7a5687c803 (easy-menu-get-map): If MENU is nil, use global menu-bar map.
Richard M. Stallman <rms@gnu.org>
parents: 22196
diff changeset
522 (while (and (symbolp map) (keymapp 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
523 (setq map (symbol-function map)))
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
524 (unless map
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
525 (error "Menu specified in easy-menu is not defined"))
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
526 (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
527 map)
20791
0c51c56d0a4f easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents: 19761
diff changeset
528
6529
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 (provide 'easymenu)
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530
79c305d1edcb Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 ;;; easymenu.el ends here