void mutt_make_help (char *d, size_t dlen, char *txt, int menu, int op) { char buf[SHORT_STRING]; if (km_expand_key (buf, sizeof (buf), km_find_func (menu, op)) || km_expand_key (buf, sizeof (buf), km_find_func (MENU_GENERIC, op))) snprintf (d, dlen, "%s:%s", buf, txt); else d[0] = 0; }
/** * dump_bind - Dump a bind map to a buffer * @param buf Output buffer * @param menu Map menu * @param map Bind keymap */ static void dump_bind(struct Buffer *buf, struct Mapping *menu, struct Keymap *map) { char key_binding[MAX_SEQ]; const char *fn_name = NULL; km_expand_key(key_binding, MAX_SEQ, map); if (map->op == OP_NULL) { mutt_buffer_add_printf(buf, "bind %s %s noop\n", menu->name, key_binding); return; } /* The pager and editor menus don't use the generic map, * however for other menus try generic first. */ if ((menu->value != MENU_PAGER) && (menu->value != MENU_EDITOR) && (menu->value != MENU_GENERIC)) { fn_name = mutt_get_func(OpGeneric, map->op); } /* if it's one of the menus above or generic doesn't find * the function, try with its own menu. */ if (!fn_name) { const struct Binding *bindings = km_get_table(menu->value); if (!bindings) return; fn_name = mutt_get_func(bindings, map->op); } mutt_buffer_add_printf(buf, "bind %s %s %s\n", menu->name, key_binding, fn_name); }
static void dump_menu (FILE *f, int menu) { struct keymap_t *map; const struct binding_t *b; char buf[SHORT_STRING]; /* browse through the keymap table */ for (map = Keymaps[menu]; map; map = map->next) { if (map->op != OP_NULL) { km_expand_key (buf, sizeof (buf), map); if (map->op == OP_MACRO) { if (map->descr == NULL) format_line (f, -1, buf, "macro", map->macro); else format_line (f, 1, buf, map->macro, map->descr); } else { b = help_lookupFunction (map->op, menu); format_line (f, 0, buf, b ? b->name : "UNKNOWN", b ? _(HelpStrings[b->op]) : _("ERROR: please report this bug")); } } } }
/** * dump_macro - Dump a macro map to a buffer * @param buf Output buffer * @param menu Map menu * @param map Macro keymap */ static void dump_macro(struct Buffer *buf, struct Mapping *menu, struct Keymap *map) { char key_binding[MAX_SEQ]; km_expand_key(key_binding, MAX_SEQ, map); struct Buffer *tmp = mutt_buffer_new(); escape_string(tmp, map->macro); if (map->desc) { mutt_buffer_add_printf(buf, "macro %s %s \"%s\" \"%s\"\n", menu->name, key_binding, tmp->data, map->desc); } else { mutt_buffer_add_printf(buf, "macro %s %s \"%s\"\n", menu->name, key_binding, tmp->data); } mutt_buffer_free(&tmp); }