summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1993-03-15 06:00:04 +0000
committerRichard M. Stallman <rms@gnu.org>1993-03-15 06:00:04 +0000
commit24af387fb2eedffca32e5962d3e48cb5bf2c1ccf (patch)
tree6c77adefa68c33da7a11496814d229d8a577ec38 /src
parent70728a80cb7f0cf5ce5259f5e655113e4973fd07 (diff)
downloademacs-24af387fb2eedffca32e5962d3e48cb5bf2c1ccf.tar.gz
(list_of_items): Allow strings among the alist items;
they make nonselectable lines. (single_keymap_panes): When storing in ENABLES, check def before enabled.
Diffstat (limited to 'src')
-rw-r--r--src/xmenu.c43
1 files changed, 22 insertions, 21 deletions
diff --git a/src/xmenu.c b/src/xmenu.c
index fde58fbf416..8c1f8a5ba24 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -101,10 +101,11 @@ the keymap as a top-level element.\n\n\
You can also use a list of keymaps as MENU.\n\
Then each keymap makes a separate pane.\n\n\
Alternatively, you can specify a menu of multiple panes\n\
- with a list of the form\n\
-\(TITLE PANE1 PANE2...), where each pane is a list of form\n\
-\(TITLE (LINE ITEM)...). Each line should be a string, and item should\n\
-be the return value for that line (i.e. if it is selected).")
+ with a list of the form (TITLE PANE1 PANE2...),\n\
+where each pane is a list of form (TITLE ITEM1 ITEM2...).\n\
+Each ITEM is normally a cons cell (STRING . VALUE);\n\
+but a string can appear as an item--that makes a nonselectable line\n\
+in the menu.")
(position, menu)
Lisp_Object position, menu;
{
@@ -567,8 +568,7 @@ single_keymap_panes (keymap, panes, vector, names, enables, items,
/* The menu item "value" is the key bound here. */
(*vector)[*p_ptr][i] = XCONS (item)->car;
(*enables)[*p_ptr][i]
- = (!NILP (enabled) ? 1
- : NILP (def) ? -1 : 0);
+ = (NILP (def) ? -1 : !NILP (enabled) ? 1 : 0);
i++;
}
}
@@ -614,8 +614,7 @@ single_keymap_panes (keymap, panes, vector, names, enables, items,
/* The menu item "value" is the key bound here. */
(*vector)[*p_ptr][i] = character;
(*enables)[*p_ptr][i]
- = (!NILP (enabled) ? 1
- : NILP (def) ? -1 : 0);
+ = (NILP (def) ? -1 : !NILP (enabled) ? 1 : 0);
i++;
}
}
@@ -726,19 +725,21 @@ list_of_items (vector, names, enables, pane)
for (i = 0, tail = pane; !NILP (tail); tail = Fcdr (tail), i++)
{
item = Fcar (tail);
- if (XTYPE (item) != Lisp_Cons) (void) wrong_type_argument (Qlistp, item);
-#ifdef XDEBUG
- fprintf (stderr, "list_of_items check tail, i=%d\n", i);
-#endif
- (*vector)[i] = Fcdr (item);
- item1 = Fcar (item);
- CHECK_STRING (item1, 1);
-#ifdef XDEBUG
- fprintf (stderr, "list_of_items check item, i=%d%s\n", i,
- XSTRING (item1)->data);
-#endif
- (*names)[i] = (char *) XSTRING (item1)->data;
- (*enables)[i] = 1;
+ if (STRINGP (item))
+ {
+ (*vector)[i] = Qnil;
+ (*names)[i] = (char *) XSTRING (item)->data;
+ (*enables)[i] = -1;
+ }
+ else
+ {
+ CHECK_CONS (item, 0);
+ (*vector)[i] = Fcdr (item);
+ item1 = Fcar (item);
+ CHECK_STRING (item1, 1);
+ (*names)[i] = (char *) XSTRING (item1)->data;
+ (*enables)[i] = 1;
+ }
}
return i;
}