From 5ade0f082e28bfb109a8759f0c81772d046d4ef1 Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Mon, 29 Oct 2018 09:19:34 +0100 Subject: Show unbound actions in help --- nncmpp.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/nncmpp.c b/nncmpp.c index 2a8529c..fc2d742 100644 --- a/nncmpp.c +++ b/nncmpp.c @@ -3071,7 +3071,8 @@ help_tab_strfkey (const termo_key_t *key, struct strv *out) } static void -help_tab_group (struct binding *keys, size_t len, struct strv *out) +help_tab_group (struct binding *keys, size_t len, struct strv *out, + bool bound[ACTION_COUNT]) { for (enum action i = 0; i < ACTION_COUNT; i++) { @@ -3085,11 +3086,24 @@ help_tab_group (struct binding *keys, size_t len, struct strv *out) strv_append_owned (out, xstrdup_printf (" %-30s %s", g_actions[i].description, joined)); free (joined); + + bound[i] = true; } strv_free (&ass); } } +static void +help_tab_unbound (struct strv *out, bool bound[ACTION_COUNT]) +{ + for (enum action i = 0; i < ACTION_COUNT; i++) + if (!bound[i]) + { + strv_append_owned (out, + xstrdup_printf (" %-30s", g_actions[i].description)); + } +} + static void help_tab_on_item_draw (size_t item_index, struct row_buffer *buffer, int width) { @@ -3104,15 +3118,28 @@ static struct tab * help_tab_init (void) { g_help_tab_lines = strv_make (); + bool bound[ACTION_COUNT] = { [ACTION_NONE] = true }; strv_append (&g_help_tab_lines, "Normal mode actions"); - help_tab_group (g_normal_keys, g_normal_keys_len, &g_help_tab_lines); + help_tab_group (g_normal_keys, g_normal_keys_len, &g_help_tab_lines, bound); strv_append (&g_help_tab_lines, ""); strv_append (&g_help_tab_lines, "Editor mode actions"); - help_tab_group (g_editor_keys, g_editor_keys_len, &g_help_tab_lines); + help_tab_group (g_editor_keys, g_editor_keys_len, &g_help_tab_lines, bound); strv_append (&g_help_tab_lines, ""); + bool have_unbound = false; + for (enum action i = 0; i < ACTION_COUNT; i++) + if (!bound[i]) + have_unbound = true; + + if (have_unbound) + { + strv_append (&g_help_tab_lines, "Unbound actions"); + help_tab_unbound (&g_help_tab_lines, bound); + strv_append (&g_help_tab_lines, ""); + } + static struct tab super; tab_init (&super, "Help"); super.on_item_draw = help_tab_on_item_draw; -- cgit v1.2.3-70-g09d2