Re: [PATCH] kconfig: menuconfig: Make hidden options show as dim

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Dec 28, 2023 at 2:46 PM Tomasz Figa <tfiga@xxxxxxxxxxxx> wrote:
>
> When hidden options are toggled on (using 'z'), the number of options
> on the screen can be overwhelming and may make it hard to distinguish
> between available and hidden ones. Make them easier to distinguish by
> displaying the hidden one as dim (using the A_DIM curses attribute).
>
> Signed-off-by: Tomasz Figa <tfiga@xxxxxxxxxxxx>



Do you think this is useful?

This changes the color only when you select a hidden item.


For unselected items, you cannot distinguish hidden ones,
as A_DIM has no effect to black text.









> ---
>  scripts/kconfig/lxdialog/dialog.h  |  3 +++
>  scripts/kconfig/lxdialog/menubox.c | 11 +++++++----
>  scripts/kconfig/lxdialog/util.c    | 10 ++++++++++
>  scripts/kconfig/mconf.c            | 18 ++++++++++++++++++
>  4 files changed, 38 insertions(+), 4 deletions(-)
>
> diff --git a/scripts/kconfig/lxdialog/dialog.h b/scripts/kconfig/lxdialog/dialog.h
> index a501abf9fa31..d2ebdc6e2e28 100644
> --- a/scripts/kconfig/lxdialog/dialog.h
> +++ b/scripts/kconfig/lxdialog/dialog.h
> @@ -128,6 +128,7 @@ void item_add_str(const char *fmt, ...);
>  void item_set_tag(char tag);
>  void item_set_data(void *p);
>  void item_set_selected(int val);
> +void item_set_hidden(int val);
>  int item_activate_selected(void);
>  void *item_data(void);
>  char item_tag(void);
> @@ -139,6 +140,7 @@ struct dialog_item {
>         char tag;
>         void *data;     /* pointer to menu item - used by menubox+checklist */
>         int selected;   /* Set to 1 by dialog_*() function if selected. */
> +       int hidden;     /* Set to 1 if hidden. */
>  };
>
>  /* list of lialog_items */
> @@ -157,6 +159,7 @@ int item_n(void);
>  const char *item_str(void);
>  int item_is_selected(void);
>  int item_is_tag(char tag);
> +int item_is_hidden(void);
>  #define item_foreach() \
>         for (item_cur = item_head ? item_head: item_cur; \
>              item_cur && (item_cur != &item_nil); item_cur = item_cur->next)
> diff --git a/scripts/kconfig/lxdialog/menubox.c b/scripts/kconfig/lxdialog/menubox.c
> index 0e333284e947..2cf1f24f67b6 100644
> --- a/scripts/kconfig/lxdialog/menubox.c
> +++ b/scripts/kconfig/lxdialog/menubox.c
> @@ -51,9 +51,9 @@ static int menu_width, item_x;
>   * Print menu item
>   */
>  static void do_print_item(WINDOW * win, const char *item, int line_y,
> -                         int selected, int hotkey)
> +                         int selected, int hotkey, int hidden)
>  {
> -       int j;
> +       int j, attrs;
>         char *menu_item = malloc(menu_width + 1);
>
>         strncpy(menu_item, item, menu_width - item_x);
> @@ -64,7 +64,10 @@ static void do_print_item(WINDOW * win, const char *item, int line_y,
>         wattrset(win, dlg.menubox.atr);
>         wmove(win, line_y, 0);
>         wclrtoeol(win);
> -       wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr);
> +       attrs = selected ? dlg.item_selected.atr : dlg.item.atr;
> +       if (hidden)
> +               attrs |= A_DIM;
> +       wattrset(win, attrs);
>         mvwaddstr(win, line_y, item_x, menu_item);
>         if (hotkey) {
>                 wattrset(win, selected ? dlg.tag_key_selected.atr
> @@ -81,7 +84,7 @@ static void do_print_item(WINDOW * win, const char *item, int line_y,
>  #define print_item(index, choice, selected)                            \
>  do {                                                                   \
>         item_set(index);                                                \
> -       do_print_item(menu, item_str(), choice, selected, !item_is_tag(':')); \
> +       do_print_item(menu, item_str(), choice, selected, !item_is_tag(':'), item_is_hidden()); \
>  } while (0)
>
>  /*
> diff --git a/scripts/kconfig/lxdialog/util.c b/scripts/kconfig/lxdialog/util.c
> index 3f78fb265136..58d6ee96f7ec 100644
> --- a/scripts/kconfig/lxdialog/util.c
> +++ b/scripts/kconfig/lxdialog/util.c
> @@ -635,6 +635,11 @@ void item_set_selected(int val)
>         item_cur->node.selected = val;
>  }
>
> +void item_set_hidden(int val)
> +{
> +       item_cur->node.hidden = val;
> +}
> +
>  int item_activate_selected(void)
>  {
>         item_foreach()
> @@ -698,3 +703,8 @@ int item_is_tag(char tag)
>  {
>         return (item_cur->node.tag == tag);
>  }
> +
> +int item_is_hidden(void)
> +{
> +       return (item_cur->node.hidden != 0);
> +}
> diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
> index eccc87a441e7..090121a1e5b6 100644
> --- a/scripts/kconfig/mconf.c
> +++ b/scripts/kconfig/mconf.c
> @@ -539,6 +539,8 @@ static void build_conf(struct menu *menu)
>                                                   menu_is_empty(menu) ? "----" : "--->");
>                                 item_set_tag('m');
>                                 item_set_data(menu);
> +                               if (!visible)
> +                                       item_set_hidden(TRUE);
>                                 if (single_menu_mode && menu->data)
>                                         goto conf_childs;
>                                 return;
> @@ -548,6 +550,8 @@ static void build_conf(struct menu *menu)
>                                         item_make("   %*c*** %s ***", indent + 1, ' ', prompt);
>                                         item_set_tag(':');
>                                         item_set_data(menu);
> +                                       if (!visible)
> +                                               item_set_hidden(TRUE);
>                                 }
>                                 break;
>                         default:
> @@ -556,6 +560,8 @@ static void build_conf(struct menu *menu)
>                                         item_make("---%*c%s", indent + 1, ' ', prompt);
>                                         item_set_tag(':');
>                                         item_set_data(menu);
> +                                       if (!visible)
> +                                               item_set_hidden(TRUE);
>                                 }
>                         }
>                 } else
> @@ -591,10 +597,14 @@ static void build_conf(struct menu *menu)
>                         }
>                         item_set_tag('t');
>                         item_set_data(menu);
> +                       if (!visible)
> +                               item_set_hidden(TRUE);
>                 } else {
>                         item_make("   ");
>                         item_set_tag(def_menu ? 't' : ':');
>                         item_set_data(menu);
> +                       if (!visible)
> +                               item_set_hidden(TRUE);
>                 }
>
>                 item_add_str("%*c%s", indent + 1, ' ', menu_get_prompt(menu));
> @@ -615,6 +625,8 @@ static void build_conf(struct menu *menu)
>                         item_make("---%*c%s", indent + 1, ' ', menu_get_prompt(menu));
>                         item_set_tag(':');
>                         item_set_data(menu);
> +                       if (!visible)
> +                               item_set_hidden(TRUE);
>                         goto conf_childs;
>                 }
>                 child_count++;
> @@ -632,6 +644,8 @@ static void build_conf(struct menu *menu)
>                                         item_make("-%c-", val == no ? ' ' : '*');
>                                 item_set_tag('t');
>                                 item_set_data(menu);
> +                               if (!visible)
> +                                       item_set_hidden(TRUE);
>                                 break;
>                         case S_TRISTATE:
>                                 switch (val) {
> @@ -648,6 +662,8 @@ static void build_conf(struct menu *menu)
>                                         item_make("-%c-", ch);
>                                 item_set_tag('t');
>                                 item_set_data(menu);
> +                               if (!visible)
> +                                       item_set_hidden(TRUE);
>                                 break;
>                         default:
>                                 tmp = 2 + strlen(sym_get_string_value(sym)); /* () = 2 */
> @@ -660,6 +676,8 @@ static void build_conf(struct menu *menu)
>                                              "" : " (NEW)");
>                                 item_set_tag('s');
>                                 item_set_data(menu);
> +                               if (!visible)
> +                                       item_set_hidden(TRUE);
>                                 goto conf_childs;
>                         }
>                 }
> --
> 2.43.0.472.g3155946c3a-goog
>
>


-- 
Best Regards
Masahiro Yamada





[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux