Mercurial > emacs
annotate lisp/emacs-lisp/easymenu.el @ 21950:c66b85d05dd8
(create_process): Add cast when calling encode_coding
and another when storing buf into new_argv.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 05 May 1998 19:33:16 +0000 |
parents | c62197b13ece |
children | aa1d105f0d67 |
rev | line source |
---|---|
6529 | 1 ;;; easymenu.el --- support the easymenu interface for defining a menu. |
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 | 5 ;; Keywords: emulations |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
6 ;; Author: rms |
6529 | 7 |
8 ;; This file is part of GNU Emacs. | |
9 | |
10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
11 ;; it under the terms of the GNU General Public License as published by | |
12 ;; the Free Software Foundation; either version 2, or (at your option) | |
13 ;; any later version. | |
14 | |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
14169 | 21 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
23 ;; Boston, MA 02111-1307, USA. | |
6529 | 24 |
14169 | 25 ;;; Commentary: |
26 | |
27 ;; This is compatible with easymenu.el by Per Abrahamsen | |
28 ;; but it is much simpler as it doesn't try to support other Emacs versions. | |
29 ;; The code was mostly derived from lmenu.el. | |
6529 | 30 |
31 ;;; Code: | |
32 | |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
33 ;;;###autoload |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
34 (defmacro easy-menu-define (symbol maps doc menu) |
6529 | 35 "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
|
36 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
|
37 and as its function definition. DOC is used as the doc string for SYMBOL. |
6529 | 38 |
39 The first element of MENU must be a string. It is the menu bar item name. | |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
40 It may be followed by the keyword argument pair |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
41 :filter FUNCTION |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
42 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
|
43 menu displayed. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
44 |
6529 | 45 The rest of the elements are menu items. |
46 | |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
47 A menu item is usually a vector of three elements: [NAME CALLBACK ENABLE] |
6529 | 48 |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
49 NAME is a string--the menu item name. |
6529 | 50 |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
51 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
|
52 or a list to evaluate when the item is chosen. |
6529 | 53 |
8541
39e8d792604f
(easy-menu-define): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
8085
diff
changeset
|
54 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
|
55 whenever this expression's value is non-nil. |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
56 |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
57 Alternatively, a menu item may have the form: |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
58 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
59 [ 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
|
60 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
61 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
|
62 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
63 :keys KEYS |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
64 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
65 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
|
66 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
|
67 computed automatically. |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
68 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
69 :active ENABLE |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
70 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
71 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
|
72 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
|
73 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
74 :suffix NAME |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
75 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
76 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
|
77 |
14108 | 78 :style STYLE |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
79 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
80 STYLE is a symbol describing the type of menu item. The following are |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
81 defined: |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
82 |
16812
af96712b7f5d
(easy-menu-create-keymaps): Menu item STYLE toggle (checkbox)
Richard M. Stallman <rms@gnu.org>
parents:
16160
diff
changeset
|
83 toggle: A checkbox. |
af96712b7f5d
(easy-menu-create-keymaps): Menu item STYLE toggle (checkbox)
Richard M. Stallman <rms@gnu.org>
parents:
16160
diff
changeset
|
84 Prepend the name with '(*) ' or '( ) ' depending on if selected or not. |
af96712b7f5d
(easy-menu-create-keymaps): Menu item STYLE toggle (checkbox)
Richard M. Stallman <rms@gnu.org>
parents:
16160
diff
changeset
|
85 radio: A radio button. |
af96712b7f5d
(easy-menu-create-keymaps): Menu item STYLE toggle (checkbox)
Richard M. Stallman <rms@gnu.org>
parents:
16160
diff
changeset
|
86 Prepend the name with '[X] ' or '[ ] ' depending on if selected or not. |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
87 nil: An ordinary menu item. |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
88 |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
89 :selected SELECTED |
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 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
|
92 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
|
93 |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
94 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
|
95 unselectable text. A string consisting solely of hyphens is displayed |
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
96 as a solid horizontal line. |
6529 | 97 |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
98 A menu item can be a list. It is treated as a submenu. |
6529 | 99 The first element should be the submenu name. That's used as the |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
100 menu item name in the top-level menu. It may be followed by the :filter |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
101 FUNCTION keyword argument pair. The rest of the submenu list are menu items, |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
102 as above." |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
103 `(progn |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
104 (defvar ,symbol nil ,doc) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
105 (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
|
106 |
11860
0c39d1945e5e
(easy-menu-do-define): Add autoload cookie.
Karl Heuer <kwzh@gnu.org>
parents:
11833
diff
changeset
|
107 ;;;###autoload |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
108 (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
|
109 ;; 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
|
110 ;; `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
|
111 ;; compatible. Therefore everything interesting is done in this |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
112 ;; function. |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
113 (set symbol (easy-menu-create-menu (car menu) (cdr menu))) |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
114 (fset symbol (` (lambda (event) (, doc) (interactive "@e") |
16160
9acae440fe98
(easy-menu-do-define): Use `x-popup-menu' instead of
Richard M. Stallman <rms@gnu.org>
parents:
15429
diff
changeset
|
115 (x-popup-menu event (, symbol))))) |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
116 (mapcar (function (lambda (map) |
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
117 (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
|
118 (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
|
119 (if (keymapp maps) (list maps) maps))) |
6542
1d9da8160357
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6529
diff
changeset
|
120 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
121 (defun easy-menu-filter-return (menu) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
122 "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
|
123 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
|
124 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
|
125 In Emacs a menu filter must return a menu (a keymap), in XEmacs a filter must |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
126 return a menu items list (without menu name and keywords). This function |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
127 returns the right thing in the two cases." |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
128 (easy-menu-get-map menu nil)) ; Get past indirections. |
6529 | 129 |
9586
bada2dc32adc
(easy-menu-create-keymaps): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
8541
diff
changeset
|
130 ;;;###autoload |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
131 (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
|
132 "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
|
133 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
|
134 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
|
135 (let ((menu (make-sparse-keymap menu-name)) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
136 prop keyword arg label enable filter visible) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
137 ;; Look for keywords. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
138 (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
|
139 (symbolp (setq keyword (car menu-items))) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
140 (= ?: (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
|
141 (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
|
142 (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
|
143 (cond |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
144 ((eq keyword ':filter) (setq filter arg)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
145 ((eq keyword ':active) (setq enable (or arg ''nil))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
146 ((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
|
147 ((eq keyword ':visible) (setq visible (or arg ''nil))))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
148 (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
|
149 (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
|
150 (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
|
151 (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
|
152 (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
|
153 (if filter (setq prop (cons :filter (cons filter prop)))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
154 (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
|
155 (while menu-items |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
156 (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
|
157 (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
|
158 (when prop |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
159 (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
|
160 (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
|
161 menu))) |
6529 | 162 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
163 |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
164 ;; Button prefixes. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
165 (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
|
166 '((radio . :radio) (toggle . :toggle))) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
167 |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
168 (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
|
169 ;; 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
|
170 ;; 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
|
171 ;; functions. |
20801
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
172 ;; 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
|
173 ;; 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
|
174 ;; 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
|
175 ;; 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
|
176 ;; MENU, just change it, otherwise put it last in MENU. |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
177 (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
|
178 (cond |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
179 ((stringp item) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
180 (setq label |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
181 (if (string-match ; If an XEmacs separator |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
182 "^\\(-+\\|\ |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
183 --:\\(\\(no\\|\\(sing\\|doub\\)le\\(Dashed\\)?\\)Line\\|\ |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
184 shadow\\(Double\\)?Etched\\(In\\|Out\\)\\(Dash\\)?\\)\\)$" |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
185 item) "" ; use a single line separator. |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
186 item))) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
187 ((consp item) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
188 (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
|
189 (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
|
190 (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
|
191 (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
|
192 (if (null command) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
193 ;; 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
|
194 (setq remove t) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
195 (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
|
196 (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
|
197 (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
|
198 (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
|
199 (setq command (symbol-function command))))) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
200 ((vectorp item) |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
201 (let ((active (if (> (length item) 2) (or (aref item 2) ''nil) t)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
202 (no-name (not (symbolp (setq command (aref item 1))))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
203 cache cache-specified |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
204 (count 2)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
205 (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
|
206 (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
|
207 (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
|
208 (let ((count 2) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
209 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
|
210 (setq active nil) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
211 (while (> (length item) count) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
212 (setq keyword (aref item count)) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
213 (setq arg (aref item (1+ count))) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
214 (setq count (+ 2 count)) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
215 (cond |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
216 ((eq keyword :visible) (setq visible (or arg ''nil))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
217 ((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
|
218 (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
|
219 ((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
|
220 ((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
|
221 ((eq keyword :active) (setq active (or arg ''nil))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
222 ((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
|
223 ((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
|
224 ((eq keyword :selected) (setq selected (or arg ''nil))))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
225 (if (stringp suffix) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
226 (setq label (if (stringp label) (concat label " " suffix) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
227 (list 'concat label (concat " " suffix))))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
228 (if (and selected |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
229 (setq style (assq style easy-menu-button-prefix))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
230 (setq prop (cons :button |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
231 (cons (cons (cdr style) (or selected ''nil)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
232 prop)))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
233 (when (stringp keys) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
234 (if (string-match "^[^\\]*\\(\\\\\\[\\([^]]+\\)]\\)[^\\]*$" |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
235 keys) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
236 (let ((prefix |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
237 (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
|
238 (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
|
239 (postfix |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
240 (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
|
241 (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
|
242 (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
|
243 (match-end 2))))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
244 (setq keys |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
245 (and (or prefix postfix (not (eq command cmd))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
246 (cons cmd |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
247 (and (or prefix postfix) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
248 (cons prefix postfix)))))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
249 (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
|
250 (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
|
251 (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
|
252 (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
|
253 ;; 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
|
254 (setq remove t) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
255 (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
|
256 (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
|
257 (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
|
258 (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
|
259 (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
|
260 (setq prop (cons :key-sequence (cons cache prop)))))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
261 (t (error "Invalid menu item in easymenu."))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
262 (easy-menu-define-key menu (if (stringp name) (intern name) name) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
263 (and (not remove) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
264 (cons 'menu-item |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
265 (cons label |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
266 (and name (cons command prop))))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
267 (if (stringp before) (intern before) before)))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
268 |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
269 (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
|
270 ;; 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
|
271 ;; 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
|
272 ;; 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
|
273 ;; 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
|
274 ;; 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
|
275 ;; present in MENU, just change it, otherwise put it last in MENU. |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
276 (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
|
277 tail done) |
20801
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
278 (while (not done) |
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
279 (cond |
8aeddd528f57
(easy-menu-add-item); The BEFORE argument works
Richard M. Stallman <rms@gnu.org>
parents:
20791
diff
changeset
|
280 ((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
|
281 (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
|
282 ;; 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
|
283 ;; 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
|
284 ;; later. |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
285 (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
|
286 (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
|
287 (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
|
288 (setq inserted t) |
21807
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
289 (setq menu (cdr menu))) |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
290 (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
|
291 ((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
|
292 (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
|
293 (and before ; wanted elsewhere and |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
294 (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
|
295 (not (keymapp tail)) |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
296 (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
|
297 (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
|
298 (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
|
299 (setq inserted t) |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
300 (setq menu (cdr menu)))) |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
301 (t (setq menu (cdr menu))))))) |
c62197b13ece
(easy-menu-define-key): Fixed bug with BEFORE
Richard M. Stallman <rms@gnu.org>
parents:
21745
diff
changeset
|
302 |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
303 (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
|
304 ;; 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
|
305 (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
|
306 (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
|
307 |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
308 (defvar easy-menu-item-count 0) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
309 |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
310 (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
|
311 ;; 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
|
312 (let ((command |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
313 (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
|
314 (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
|
315 (fset command |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
316 (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
|
317 `(lambda () (interactive) ,callback))) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
318 command)) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
319 |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
320 (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
|
321 "Change menu found at PATH as item NAME to contain ITEMS. |
c7eb887a1e78
(easy-menu-change): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7614
diff
changeset
|
322 PATH is a list of strings for locating the menu containing NAME in the |
c7eb887a1e78
(easy-menu-change): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7614
diff
changeset
|
323 menu bar. ITEMS is a list of menu items, as in `easy-menu-define'. |
c7eb887a1e78
(easy-menu-change): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7614
diff
changeset
|
324 These items entirely replace the previous items in that map. |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
325 If NAME is not present in the menu located by PATH, then add item NAME to |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
326 that menu. If the optional argument BEFORE is present add NAME in menu |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
327 just before BEFORE, otherwise add at end of menu. |
8085
c7eb887a1e78
(easy-menu-change): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7614
diff
changeset
|
328 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
329 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
|
330 to implement dynamic menus." |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
331 (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
|
332 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
333 ;; 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
|
334 ;; In Emacs this is done automatically when switching keymaps, so |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
335 ;; here these functions are noops. |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
336 (defun easy-menu-remove (menu)) |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
337 |
9733
a721dbc48e10
(easy-menu-define): Call `easy-menu-do-define' to do
Richard M. Stallman <rms@gnu.org>
parents:
9586
diff
changeset
|
338 (defun easy-menu-add (menu &optional map)) |
6600
f75ac1f3d99c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6542
diff
changeset
|
339 |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
340 (defun easy-menu-add-item (menu path item &optional before) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
341 "At the end of the submenu of MENU with path PATH add ITEM. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
342 If ITEM is already present in this submenu, then this item will be changed. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
343 otherwise ITEM will be added at the end of the submenu, unless the optional |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
344 argument BEFORE is present, in which case ITEM will instead be added |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
345 before the item named BEFORE. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
346 MENU is either a symbol, which have earlier been used as the first |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
347 argument in a call to `easy-menu-define', or the value of such a symbol |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
348 i.e. a menu, or nil which stands for the menu-bar itself. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
349 PATH is a list of strings for locating the submenu where ITEM is to be |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
350 added. If PATH is nil, MENU itself is used. Otherwise, the first |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
351 element should be the name of a submenu directly under MENU. This |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
352 submenu is then traversed recursively with the remaining elements of PATH. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
353 ITEM is either defined as in `easy-menu-define' or a menu defined earlier |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
354 by `easy-menu-define' or `easy-menu-create-menu'." |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
355 (setq menu (easy-menu-get-map menu path)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
356 (if (or (keymapp item) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
357 (and (symbolp item) (keymapp (symbol-value item)))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
358 ;; Item is a keymap, find the prompt string and use as item name. |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
359 (let ((tail (easy-menu-get-map item nil)) name) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
360 (if (not (keymapp item)) (setq item tail)) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
361 (while (and (null name) (consp (setq tail (cdr tail))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
362 (not (keymapp tail))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
363 (if (stringp (car tail)) (setq name (car tail)) ; Got a name. |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
364 (setq tail (cdr tail)))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
365 (setq item (cons name item)))) |
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
366 (easy-menu-do-add-item menu item before)) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
367 |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
368 (defun easy-menu-item-present-p (menu path name) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
369 "In submenu of MENU with path PATH, return true iff item NAME is present. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
370 MENU and PATH are defined as in `easy-menu-add-item'. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
371 NAME should be a string, the name of the element to be looked for." |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
372 (lookup-key (easy-menu-get-map menu path) (vector (intern name)))) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
373 |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
374 (defun easy-menu-remove-item (menu path name) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
375 "From submenu of MENU with path PATH remove item NAME. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
376 MENU and PATH are defined as in `easy-menu-add-item'. |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
377 NAME should be a string, the name of the element to be removed." |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
378 (easy-menu-define-key (easy-menu-get-map menu path) (intern name) nil)) |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
379 |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
380 (defun easy-menu-get-map (menu path) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
381 ;; Return a sparse keymap in which to add or remove an item. |
21745
38a6d62cddb9
Use new menu item format. Don't simulate button prefix.
Richard M. Stallman <rms@gnu.org>
parents:
21689
diff
changeset
|
382 ;; MENU and PATH are as defined in `easy-menu-add-item'. |
20791
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
383 (if (null menu) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
384 (setq menu (key-binding (vconcat '(menu-bar) (mapcar 'intern path)))) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
385 (if (and (symbolp menu) (not (keymapp menu))) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
386 (setq menu (symbol-value menu))) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
387 (if path (setq menu (lookup-key menu (vconcat (mapcar 'intern path)))))) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
388 (while (and (symbolp menu) (keymapp menu)) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
389 (setq menu (symbol-function menu))) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
390 (or (keymapp menu) (error "Malformed menu in easy-menu: (%s)" menu)) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
391 menu) |
0c51c56d0a4f
easy-menu-define): Use ` and , read-macros
Richard M. Stallman <rms@gnu.org>
parents:
19761
diff
changeset
|
392 |
6529 | 393 (provide 'easymenu) |
394 | |
395 ;;; easymenu.el ends here |