comparison src/xmenu.c @ 32988:c3435dc00ed7

* lisp.h (KEYMAPP): New macro. (get_keymap): Remove. (get_keymap_1): Rename get_keymap. * keyboard.h (get_keymap_1, Fkeymapp): Remove prototype. * xterm.c (note_mode_line_highlight): Use KEYMAPP. * xmenu.c (single_submenu): Use KEYMAPP. (Fx_popup_menu): Fetch keymaps rather than checking Fkeymapp. Use KEYMAPP rather than Fkeymapp. * w32term.c (note_mode_line_highlight): Use KEYMAPP. * w32menu.c (True, False): Remove (use TRUE and FALSE instead). (Fx_popup_menu): Fetch keymaps rather than checking Fkeymapp. Use KEYMAPP rather than Fkeymapp. (single_submenu): Use KEYMAPP. (w32_menu_show, w32_dialog_show): Use TRUE. * minibuf.c (Fread_from_minibuffer): Update call to get_keymap. * keymap.c (KEYMAPP): Remove (moved to lisp.h). (Fkeymapp): Use KEYMAPP. (get_keymap): Rename from get_keymap_1. Remove old def. Return t when autoload=0 and error=0 and the keymap needs autoloading. (Fcopy_keymap): Check (eq (car x) 'keymap) rather than using Fkeymapp. (Fminor_mode_key_binding): Don't raise an error if the binding is not a keymap. (Fuse_global_map, Fuse_local_map): Allow autoloading. (Faccessible_keymaps): Fetch keymaps rather than checking Fkeymapp. * keyboard.c (read_char): get_keymap_1 -> get_keymap. Allow Vspecial_event_map to be autoloaded. (menu_bar_items): Fetch the keymap rather than using keymapp. (menu_bar_one_keymap): No need to follow func-indirect any more. (parse_menu_item): get_keymap_1 -> get_keymap. (tool_bar_items): Fetch the keymap rather than using keymapp. (read_key_sequence): Use KEYMAPP. * intervals.c (get_local_map): Use get_keymap rather than following function-indirections explicitly. * doc.c (Fsubstitute_command_keys): get_keymap_1 -> get_keymap.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 27 Oct 2000 22:20:19 +0000
parents 15fe3fd7b8fc
children 743849495725
comparison
equal deleted inserted replaced
32987:a2813d16337d 32988:c3435dc00ed7
36 #include <signal.h> 36 #include <signal.h>
37 37
38 #include <stdio.h> 38 #include <stdio.h>
39 #include "lisp.h" 39 #include "lisp.h"
40 #include "termhooks.h" 40 #include "termhooks.h"
41 #include "keyboard.h"
41 #include "frame.h" 42 #include "frame.h"
42 #include "window.h" 43 #include "window.h"
43 #include "keyboard.h"
44 #include "blockinput.h" 44 #include "blockinput.h"
45 #include "buffer.h" 45 #include "buffer.h"
46 46
47 #ifdef MSDOS 47 #ifdef MSDOS
48 #include "msdos.h" 48 #include "msdos.h"
786 title = Qnil; 786 title = Qnil;
787 GCPRO1 (title); 787 GCPRO1 (title);
788 788
789 /* Decode the menu items from what was specified. */ 789 /* Decode the menu items from what was specified. */
790 790
791 keymap = Fkeymapp (menu); 791 keymap = get_keymap (menu, 0, 0);
792 tem = Qnil; 792 if (CONSP (keymap))
793 if (CONSP (menu))
794 tem = Fkeymapp (Fcar (menu));
795 if (!NILP (keymap))
796 { 793 {
797 /* We were given a keymap. Extract menu info from the keymap. */ 794 /* We were given a keymap. Extract menu info from the keymap. */
798 Lisp_Object prompt; 795 Lisp_Object prompt;
799 keymap = get_keymap (menu);
800 796
801 /* Extract the detailed info to make one pane. */ 797 /* Extract the detailed info to make one pane. */
802 keymap_panes (&menu, 1, NILP (position)); 798 keymap_panes (&menu, 1, NILP (position));
803 799
804 /* Search for a string appearing directly as an element of the keymap. 800 /* Search for a string appearing directly as an element of the keymap.
811 if (!NILP (prompt) && menu_items_n_panes >= 0) 807 if (!NILP (prompt) && menu_items_n_panes >= 0)
812 XVECTOR (menu_items)->contents[MENU_ITEMS_PANE_NAME] = prompt; 808 XVECTOR (menu_items)->contents[MENU_ITEMS_PANE_NAME] = prompt;
813 809
814 keymaps = 1; 810 keymaps = 1;
815 } 811 }
816 else if (!NILP (tem)) 812 else if (CONSP (menu) && KEYMAPP (XCAR (menu)))
817 { 813 {
818 /* We were given a list of keymaps. */ 814 /* We were given a list of keymaps. */
819 int nmaps = XFASTINT (Flength (menu)); 815 int nmaps = XFASTINT (Flength (menu));
820 Lisp_Object *maps 816 Lisp_Object *maps
821 = (Lisp_Object *) alloca (nmaps * sizeof (Lisp_Object)); 817 = (Lisp_Object *) alloca (nmaps * sizeof (Lisp_Object));
827 supplies the menu title. */ 823 supplies the menu title. */
828 for (tem = menu, i = 0; CONSP (tem); tem = Fcdr (tem)) 824 for (tem = menu, i = 0; CONSP (tem); tem = Fcdr (tem))
829 { 825 {
830 Lisp_Object prompt; 826 Lisp_Object prompt;
831 827
832 maps[i++] = keymap = get_keymap (Fcar (tem)); 828 maps[i++] = keymap = get_keymap (Fcar (tem), 1, 0);
833 829
834 prompt = map_prompt (keymap); 830 prompt = map_prompt (keymap);
835 if (NILP (title) && !NILP (prompt)) 831 if (NILP (title) && !NILP (prompt))
836 title = prompt; 832 title = prompt;
837 } 833 }
1394 /* Loop over the given keymaps, making a pane for each map. 1390 /* Loop over the given keymaps, making a pane for each map.
1395 But don't make a pane that is empty--ignore that map instead. */ 1391 But don't make a pane that is empty--ignore that map instead. */
1396 for (i = 0; i < len; i++) 1392 for (i = 0; i < len; i++)
1397 { 1393 {
1398 if (SYMBOLP (mapvec[i]) 1394 if (SYMBOLP (mapvec[i])
1399 || (CONSP (mapvec[i]) 1395 || (CONSP (mapvec[i]) && !KEYMAPP (mapvec[i])))
1400 && NILP (Fkeymapp (mapvec[i]))))
1401 { 1396 {
1402 /* Here we have a command at top level in the menu bar 1397 /* Here we have a command at top level in the menu bar
1403 as opposed to a submenu. */ 1398 as opposed to a submenu. */
1404 top_level_items = 1; 1399 top_level_items = 1;
1405 push_menu_pane (Qnil, Qnil); 1400 push_menu_pane (Qnil, Qnil);