From: NeilBrown Date: Sun, 1 Oct 2023 23:39:25 +0000 (+1100) Subject: menubar: allow ancestor pane to add menus X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=90a45d7d813b48e4fc46e8135a4c54fba5db4b22;p=edlib.git menubar: allow ancestor pane to add menus THe current ordering requirement for emacs and menubar are odd. emacs handling must be below menubar so that menus can understand basic mouse and keystrokes. But emacs must be initialised after menubar so it can register. Break this requirement by having menubar tell any ancestor that they can configure now. Signed-off-by: NeilBrown --- diff --git a/data/edlib.ini b/data/edlib.ini index fcbddd82..0b23e093 100644 --- a/data/edlib.ini +++ b/data/edlib.ini @@ -6,8 +6,8 @@ include = modules.ini editor-initial-panes = input DISPLAY " x11selection messageline" " global-keymap" - " menubar" " mode-emacs" + " menubar" " tile" TESTING menubar-visible = no diff --git a/lib-menubar.c b/lib-menubar.c index 69c6b508..38465f89 100644 --- a/lib-menubar.c +++ b/lib-menubar.c @@ -431,7 +431,10 @@ DEF_CMD(menubar_attach) mbi->bar = mbp; pane_add_notify(ret, mbp, "Notify:Close"); pane_damaged(ret, DAMAGED_VIEW); - return comm_call(ci->comm2, "callback:attach", ret); + comm_call(ci->comm2, "callback:attach", ret); + /* Allow pane close to root to register */ + call("menubar:ready", ret); + return 1; } void edlib_init(struct pane *ed safe) diff --git a/mode-emacs.c b/mode-emacs.c index 8e570cc6..9061bc02 100644 --- a/mode-emacs.c +++ b/mode-emacs.c @@ -3381,6 +3381,28 @@ DEF_CMD(emacs_menu_refresh) return 1; } +static char *menus[][3] = { + { "Help/Recent", ":F1 l", "R" }, + { "Documents/List all", ":C-X :C-B", "R"}, + { "File/Open", ":C-X :C-F", "L"}, + { "File/Save", ":C-X :C-S", "L"}, + { "File/Exit", ":C-X :C-C", "L"}, + { "Edit/Copy", ":A-w", "L"}, +}; + +DEF_CMD(emacs_menubar_configure) +{ + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(menus); i++) + call("menubar-add", ci->focus, + menus[i][2][0] == 'R' ? 2 : 0, + NULL, menus[i][0], + 0, NULL, menus[i][1]); + /* Allow other ancestor to configure */ + return Efallthrough; +} + DEF_PFX_CMD(cx_cmd, ":CX"); DEF_PFX_CMD(cx4_cmd, ":CX4"); DEF_PFX_CMD(cx5_cmd, ":CX5"); @@ -3574,29 +3596,16 @@ static void emacs_init(void) key_add(m, "menu:refresh", &emacs_menu_refresh); key_add_prefix(m, "emacs:doc-menu:", &emacs_doc_menu); + key_add(m, "menubar:ready", &emacs_menubar_configure); + emacs_map = m; } DEF_LOOKUP_CMD(mode_emacs, emacs_map); -static char *menus[][3] = { - { "Help/Recent", ":F1 l", "R" }, - { "Documents/List all", ":C-X :C-B", "R"}, - { "File/Open", ":C-X :C-F", "L"}, - { "File/Save", ":C-X :C-S", "L"}, - { "File/Exit", ":C-X :C-C", "L"}, - { "Edit/Copy", ":A-w", "L"}, -}; - DEF_CMD(attach_mode_emacs) { - unsigned int i; call_comm("global-set-keymap", ci->focus, &mode_emacs.c); - for (i = 0; i < ARRAY_SIZE(menus); i++) - call("menubar-add", ci->focus, - menus[i][2][0] == 'R' ? 2 : 0, - NULL, menus[i][0], - 0, NULL, menus[i][1]); return 1; }