From: Randy Dunlap Extend 'make menuconfig' to support an alternate color theme or monochrome mode by using make menuconfig MENUCONFIG_COLOR=monochrome|mono|alternate|alt This is a merger of patches by Han Boetes (alternate color theme) and Jan Benedict Glaw (monochrome). Signed-off-by: Randy Dunlap --- scripts/kconfig/lxdialog/colors.h | 89 +++++++++++++++++++++++++++++++++- scripts/kconfig/lxdialog/dialog.h | 2 scripts/kconfig/lxdialog/util.c | 99 ++++++++++++++++++++++++++++++++------ scripts/kconfig/mconf.c | 15 ++++- 4 files changed, 187 insertions(+), 18 deletions(-) --- linux-2617-rc1.orig/scripts/kconfig/lxdialog/dialog.h +++ linux-2617-rc1/scripts/kconfig/lxdialog/dialog.h @@ -142,7 +142,7 @@ void init_dialog(void); void end_dialog(void); void attr_clear(WINDOW * win, int height, int width, chtype attr); void dialog_clear(void); -void color_setup(void); +void color_setup(int which); void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x); void print_button(WINDOW * win, const char *label, int y, int x, int selected); void print_title(WINDOW *dialog, const char *title, int width); --- linux-2617-rc1.orig/scripts/kconfig/mconf.c +++ linux-2617-rc1/scripts/kconfig/mconf.c @@ -146,7 +146,7 @@ static const char mconf_readme[] = N_( "become confused when those variables (LINES & COLUMNS) don't reflect\n" "the true screen size.\n" "\n" -"Optional personality available\n" +"Optional personalities available\n" "------------------------------\n" "If you prefer to have all of the kernel options listed in a single\n" "menu, rather than the default multimenu hierarchy, run the menuconfig\n" @@ -159,7 +159,18 @@ static const char mconf_readme[] = N_( "\n" "Note that this mode can eventually be a little more CPU expensive\n" "(especially with a larger number of unrolled categories) than the\n" -"default mode.\n"), +"default mode.\n" +"\n" +"Another personality is alternate colors or monochromatic display.\n" +"You can select these by using the MENUCONFIG_COLOR environment\n" +"variable, for example:\n" +"\n" +"make MENUCONFIG_COLOR=alternate menuconfig\n" +"or\n" +"make MENUCONFIG_COLOR=monochrome menuconfig\n" +"\n" +"You can specify 'alternate' as 'alt' and 'monochrome' as 'mono'.\n" +), menu_instructions[] = N_( "Arrow keys navigate the menu. " " selects submenus --->. " --- linux-2617-rc1.orig/scripts/kconfig/lxdialog/colors.h +++ linux-2617-rc1/scripts/kconfig/lxdialog/colors.h @@ -23,123 +23,210 @@ * * *_FG = foreground * *_BG = background - * *_HL = highlight? + * *_HL = highlight */ #define SCREEN_FG COLOR_CYAN #define SCREEN_BG COLOR_BLUE #define SCREEN_HL TRUE +#define SCREEN_FG_ALT COLOR_BLACK +#define SCREEN_BG_ALT COLOR_BLACK +#define SCREEN_HL_ALT TRUE #define SHADOW_FG COLOR_BLACK #define SHADOW_BG COLOR_BLACK #define SHADOW_HL TRUE +#define SHADOW_FG_ALT COLOR_BLACK +#define SHADOW_BG_ALT COLOR_BLACK +#define SHADOW_HL_ALT FALSE #define DIALOG_FG COLOR_BLACK #define DIALOG_BG COLOR_WHITE #define DIALOG_HL FALSE +#define DIALOG_FG_ALT COLOR_WHITE +#define DIALOG_BG_ALT COLOR_BLACK +#define DIALOG_HL_ALT FALSE #define TITLE_FG COLOR_YELLOW #define TITLE_BG COLOR_WHITE #define TITLE_HL TRUE +#define TITLE_FG_ALT COLOR_RED +#define TITLE_BG_ALT COLOR_BLACK +#define TITLE_HL_ALT FALSE #define BORDER_FG COLOR_WHITE #define BORDER_BG COLOR_WHITE #define BORDER_HL TRUE +#define BORDER_FG_ALT COLOR_BLACK +#define BORDER_BG_ALT COLOR_BLACK +#define BORDER_HL_ALT TRUE #define BUTTON_ACTIVE_FG COLOR_WHITE #define BUTTON_ACTIVE_BG COLOR_BLUE #define BUTTON_ACTIVE_HL TRUE +#define BUTTON_ACTIVE_FG_ALT COLOR_YELLOW +#define BUTTON_ACTIVE_BG_ALT COLOR_RED +#define BUTTON_ACTIVE_HL_ALT FALSE #define BUTTON_INACTIVE_FG COLOR_BLACK #define BUTTON_INACTIVE_BG COLOR_WHITE #define BUTTON_INACTIVE_HL FALSE +#define BUTTON_INACTIVE_FG_ALT COLOR_YELLOW +#define BUTTON_INACTIVE_BG_ALT COLOR_BLACK +#define BUTTON_INACTIVE_HL_ALT FALSE #define BUTTON_KEY_ACTIVE_FG COLOR_WHITE #define BUTTON_KEY_ACTIVE_BG COLOR_BLUE #define BUTTON_KEY_ACTIVE_HL TRUE +#define BUTTON_KEY_ACTIVE_FG_ALT COLOR_YELLOW +#define BUTTON_KEY_ACTIVE_BG_ALT COLOR_RED +#define BUTTON_KEY_ACTIVE_HL_ALT TRUE #define BUTTON_KEY_INACTIVE_FG COLOR_RED #define BUTTON_KEY_INACTIVE_BG COLOR_WHITE #define BUTTON_KEY_INACTIVE_HL FALSE +#define BUTTON_KEY_INACTIVE_FG_ALT COLOR_RED +#define BUTTON_KEY_INACTIVE_BG_ALT COLOR_BLACK +#define BUTTON_KEY_INACTIVE_HL_ALT FALSE #define BUTTON_LABEL_ACTIVE_FG COLOR_YELLOW #define BUTTON_LABEL_ACTIVE_BG COLOR_BLUE #define BUTTON_LABEL_ACTIVE_HL TRUE +#define BUTTON_LABEL_ACTIVE_FG_ALT COLOR_WHITE +#define BUTTON_LABEL_ACTIVE_BG_ALT COLOR_RED +#define BUTTON_LABEL_ACTIVE_HL_ALT FALSE #define BUTTON_LABEL_INACTIVE_FG COLOR_BLACK #define BUTTON_LABEL_INACTIVE_BG COLOR_WHITE #define BUTTON_LABEL_INACTIVE_HL TRUE +#define BUTTON_LABEL_INACTIVE_FG_ALT COLOR_BLACK +#define BUTTON_LABEL_INACTIVE_BG_ALT COLOR_BLACK +#define BUTTON_LABEL_INACTIVE_HL_ALT TRUE #define INPUTBOX_FG COLOR_BLACK #define INPUTBOX_BG COLOR_WHITE #define INPUTBOX_HL FALSE +#define INPUTBOX_FG_ALT COLOR_YELLOW +#define INPUTBOX_BG_ALT COLOR_BLACK +#define INPUTBOX_HL_ALT FALSE #define INPUTBOX_BORDER_FG COLOR_BLACK #define INPUTBOX_BORDER_BG COLOR_WHITE #define INPUTBOX_BORDER_HL FALSE +#define INPUTBOX_BORDER_FG_ALT COLOR_YELLOW +#define INPUTBOX_BORDER_BG_ALT COLOR_BLACK +#define INPUTBOX_BORDER_HL_ALT FALSE #define SEARCHBOX_FG COLOR_BLACK #define SEARCHBOX_BG COLOR_WHITE #define SEARCHBOX_HL FALSE +#define SEARCHBOX_FG_ALT COLOR_YELLOW +#define SEARCHBOX_BG_ALT COLOR_BLACK +#define SEARCHBOX_HL_ALT FALSE #define SEARCHBOX_TITLE_FG COLOR_YELLOW #define SEARCHBOX_TITLE_BG COLOR_WHITE #define SEARCHBOX_TITLE_HL TRUE +#define SEARCHBOX_TITLE_FG_ALT COLOR_YELLOW +#define SEARCHBOX_TITLE_BG_ALT COLOR_BLACK +#define SEARCHBOX_TITLE_HL_ALT TRUE #define SEARCHBOX_BORDER_FG COLOR_WHITE #define SEARCHBOX_BORDER_BG COLOR_WHITE #define SEARCHBOX_BORDER_HL TRUE +#define SEARCHBOX_BORDER_FG_ALT COLOR_BLACK +#define SEARCHBOX_BORDER_BG_ALT COLOR_BLACK +#define SEARCHBOX_BORDER_HL_ALT TRUE #define POSITION_INDICATOR_FG COLOR_YELLOW #define POSITION_INDICATOR_BG COLOR_WHITE #define POSITION_INDICATOR_HL TRUE +#define POSITION_INDICATOR_FG_ALT COLOR_RED +#define POSITION_INDICATOR_BG_ALT COLOR_BLACK +#define POSITION_INDICATOR_HL_ALT FALSE #define MENUBOX_FG COLOR_BLACK #define MENUBOX_BG COLOR_WHITE #define MENUBOX_HL FALSE +#define MENUBOX_FG_ALT COLOR_YELLOW +#define MENUBOX_BG_ALT COLOR_BLACK +#define MENUBOX_HL_ALT FALSE #define MENUBOX_BORDER_FG COLOR_WHITE #define MENUBOX_BORDER_BG COLOR_WHITE #define MENUBOX_BORDER_HL TRUE +#define MENUBOX_BORDER_FG_ALT COLOR_BLACK +#define MENUBOX_BORDER_BG_ALT COLOR_BLACK +#define MENUBOX_BORDER_HL_ALT TRUE #define ITEM_FG COLOR_BLACK #define ITEM_BG COLOR_WHITE #define ITEM_HL FALSE +#define ITEM_FG_ALT COLOR_WHITE +#define ITEM_BG_ALT COLOR_BLACK +#define ITEM_HL_ALT FALSE #define ITEM_SELECTED_FG COLOR_WHITE #define ITEM_SELECTED_BG COLOR_BLUE #define ITEM_SELECTED_HL TRUE +#define ITEM_SELECTED_FG_ALT COLOR_WHITE +#define ITEM_SELECTED_BG_ALT COLOR_RED +#define ITEM_SELECTED_HL_ALT FALSE #define TAG_FG COLOR_YELLOW #define TAG_BG COLOR_WHITE #define TAG_HL TRUE +#define TAG_FG_ALT COLOR_RED +#define TAG_BG_ALT COLOR_BLACK +#define TAG_HL_ALT FALSE #define TAG_SELECTED_FG COLOR_YELLOW #define TAG_SELECTED_BG COLOR_BLUE #define TAG_SELECTED_HL TRUE +#define TAG_SELECTED_FG_ALT COLOR_YELLOW +#define TAG_SELECTED_BG_ALT COLOR_RED +#define TAG_SELECTED_HL_ALT TRUE #define TAG_KEY_FG COLOR_YELLOW #define TAG_KEY_BG COLOR_WHITE #define TAG_KEY_HL TRUE +#define TAG_KEY_FG_ALT COLOR_RED +#define TAG_KEY_BG_ALT COLOR_BLACK +#define TAG_KEY_HL_ALT FALSE #define TAG_KEY_SELECTED_FG COLOR_YELLOW #define TAG_KEY_SELECTED_BG COLOR_BLUE #define TAG_KEY_SELECTED_HL TRUE +#define TAG_KEY_SELECTED_FG_ALT COLOR_YELLOW +#define TAG_KEY_SELECTED_BG_ALT COLOR_RED +#define TAG_KEY_SELECTED_HL_ALT TRUE #define CHECK_FG COLOR_BLACK #define CHECK_BG COLOR_WHITE #define CHECK_HL FALSE +#define CHECK_FG_ALT COLOR_YELLOW +#define CHECK_BG_ALT COLOR_BLACK +#define CHECK_HL_ALT FALSE #define CHECK_SELECTED_FG COLOR_WHITE #define CHECK_SELECTED_BG COLOR_BLUE #define CHECK_SELECTED_HL TRUE +#define CHECK_SELECTED_FG_ALT COLOR_YELLOW +#define CHECK_SELECTED_BG_ALT COLOR_RED +#define CHECK_SELECTED_HL_ALT TRUE #define UARROW_FG COLOR_GREEN #define UARROW_BG COLOR_WHITE #define UARROW_HL TRUE +#define UARROW_FG_ALT COLOR_RED +#define UARROW_BG_ALT COLOR_BLACK +#define UARROW_HL_ALT FALSE #define DARROW_FG COLOR_GREEN #define DARROW_BG COLOR_WHITE #define DARROW_HL TRUE +#define DARROW_FG_ALT COLOR_RED +#define DARROW_BG_ALT COLOR_BLACK +#define DARROW_HL_ALT FALSE /* End of default color definitions */ --- linux-2617-rc1.orig/scripts/kconfig/lxdialog/util.c +++ linux-2617-rc1/scripts/kconfig/lxdialog/util.c @@ -21,9 +21,6 @@ #include "dialog.h" -/* use colors by default? */ -bool use_colors = 1; - const char *backtitle = NULL; /* @@ -63,10 +60,12 @@ chtype attributes[] = { #include "colors.h" +#define ROW_SIZE 3 + /* * Table of color values */ -int color_table[][3] = { +int color_table[ATTRIBUTE_COUNT][ROW_SIZE] = { {SCREEN_FG, SCREEN_BG, SCREEN_HL}, {SHADOW_FG, SHADOW_BG, SHADOW_HL}, {DIALOG_FG, DIALOG_BG, DIALOG_HL}, @@ -101,6 +100,49 @@ int color_table[][3] = { {DARROW_FG, DARROW_BG, DARROW_HL}, }; /* color_table */ + /* ++ * Alternate Table of color values ++ */ +int color_table_alt [ATTRIBUTE_COUNT][ROW_SIZE] = +{ + {SCREEN_FG_ALT, SCREEN_BG_ALT, SCREEN_HL_ALT}, + {SHADOW_FG_ALT, SHADOW_BG_ALT, SHADOW_HL_ALT}, + {DIALOG_FG_ALT, DIALOG_BG_ALT, DIALOG_HL_ALT}, + {TITLE_FG_ALT, TITLE_BG_ALT, TITLE_HL_ALT}, + {BORDER_FG_ALT, BORDER_BG_ALT, BORDER_HL_ALT}, + {BUTTON_ACTIVE_FG_ALT, BUTTON_ACTIVE_BG_ALT, BUTTON_ACTIVE_HL_ALT}, + {BUTTON_INACTIVE_FG_ALT, BUTTON_INACTIVE_BG_ALT, BUTTON_INACTIVE_HL_ALT}, + {BUTTON_KEY_ACTIVE_FG_ALT, BUTTON_KEY_ACTIVE_BG_ALT, + BUTTON_KEY_ACTIVE_HL_ALT}, + {BUTTON_KEY_INACTIVE_FG_ALT, BUTTON_KEY_INACTIVE_BG_ALT, + BUTTON_KEY_INACTIVE_HL_ALT}, + {BUTTON_LABEL_ACTIVE_FG_ALT, BUTTON_LABEL_ACTIVE_BG_ALT, + BUTTON_LABEL_ACTIVE_HL_ALT}, + {BUTTON_LABEL_INACTIVE_FG_ALT, BUTTON_LABEL_INACTIVE_BG_ALT, + BUTTON_LABEL_INACTIVE_HL_ALT}, + {INPUTBOX_FG_ALT, INPUTBOX_BG_ALT, INPUTBOX_HL_ALT}, + {INPUTBOX_BORDER_FG_ALT, INPUTBOX_BORDER_BG_ALT, INPUTBOX_BORDER_HL_ALT}, + {SEARCHBOX_FG_ALT, SEARCHBOX_BG_ALT, SEARCHBOX_HL_ALT}, + {SEARCHBOX_TITLE_FG_ALT, SEARCHBOX_TITLE_BG_ALT, SEARCHBOX_TITLE_HL_ALT}, + {SEARCHBOX_BORDER_FG_ALT, SEARCHBOX_BORDER_BG_ALT, + SEARCHBOX_BORDER_HL_ALT}, + {POSITION_INDICATOR_FG_ALT, POSITION_INDICATOR_BG_ALT, + POSITION_INDICATOR_HL_ALT}, + {MENUBOX_FG_ALT, MENUBOX_BG_ALT, MENUBOX_HL_ALT}, + {MENUBOX_BORDER_FG_ALT, MENUBOX_BORDER_BG_ALT, MENUBOX_BORDER_HL_ALT}, + {ITEM_FG_ALT, ITEM_BG_ALT, ITEM_HL_ALT}, + {ITEM_SELECTED_FG_ALT, ITEM_SELECTED_BG_ALT, ITEM_SELECTED_HL_ALT}, + {TAG_FG_ALT, TAG_BG_ALT, TAG_HL_ALT}, + {TAG_SELECTED_FG_ALT, TAG_SELECTED_BG_ALT, TAG_SELECTED_HL_ALT}, + {TAG_KEY_FG_ALT, TAG_KEY_BG_ALT, TAG_KEY_HL_ALT}, + {TAG_KEY_SELECTED_FG_ALT, TAG_KEY_SELECTED_BG_ALT, + TAG_KEY_SELECTED_HL_ALT}, + {CHECK_FG_ALT, CHECK_BG_ALT, CHECK_HL_ALT}, + {CHECK_SELECTED_FG_ALT, CHECK_SELECTED_BG_ALT, CHECK_SELECTED_HL_ALT}, + {UARROW_FG_ALT, UARROW_BG_ALT, UARROW_HL_ALT}, + {DARROW_FG_ALT, DARROW_BG_ALT, DARROW_HL_ALT}, +}; /* color_table_alt */ + /* * Set window to attribute 'attr' */ @@ -138,13 +180,28 @@ void dialog_clear(void) */ void init_dialog(void) { + /* "mono" ==> -1, 0 ==> default, "alternate" ==> 1 */ + int color_which = 0; + char *colormode; + initscr(); /* Init curses */ keypad(stdscr, TRUE); cbreak(); noecho(); - if (use_colors) /* Set up colors */ - color_setup(); + /* check for MENUCONFIG_COLOR = mono(chrome) | alt(ernate) */ + colormode = getenv("MENUCONFIG_COLOR"); + if (colormode) { + if (!strcasecmp (colormode, "alt") + || !strcasecmp (colormode, "alternate")) + color_which = 1; + else if (!strcasecmp (colormode, "mono") + || !strcasecmp (colormode, "monochrome")) + color_which = -1; + } + + if (color_which >= 0) + color_setup (color_which); dialog_clear(); } @@ -152,20 +209,34 @@ void init_dialog(void) /* * Setup for color display */ -void color_setup(void) +void color_setup(int which) { int i; if (has_colors()) { /* Terminal supports color? */ start_color(); - /* Initialize color pairs */ - for (i = 0; i < ATTRIBUTE_COUNT; i++) - init_pair(i + 1, color_table[i][0], color_table[i][1]); - - /* Setup color attributes */ - for (i = 0; i < ATTRIBUTE_COUNT; i++) - attributes[i] = C_ATTR(color_table[i][2], i + 1); + if (which == 0) { + /* Initialize color pairs */ + for (i = 0; i < ATTRIBUTE_COUNT; i++) + init_pair(i + 1, color_table[i][0], + color_table[i][1]); + + /* Setup color attributes */ + for (i = 0; i < ATTRIBUTE_COUNT; i++) + attributes[i] = C_ATTR(color_table[i][2], i + 1); + } + else { /* alternate color table */ + /* Initialize color pairs */ + for (i = 0; i < ATTRIBUTE_COUNT; i++) + init_pair (i + 1, color_table_alt[i][0], + color_table_alt[i][1]); + + /* Setup color attributes */ + for (i = 0; i < ATTRIBUTE_COUNT; i++) + attributes[i] = C_ATTR (color_table_alt[i][2], + i + 1); + } } }