* [PATCH] allow user-configurable menucolor
@ 2008-01-01 12:47 Robert Millan
2008-01-01 13:14 ` Vesa Jääskeläinen
2008-01-02 23:42 ` Yoshinori K. Okuji
0 siblings, 2 replies; 24+ messages in thread
From: Robert Millan @ 2008-01-01 12:47 UTC (permalink / raw)
To: grub-devel
[-- Attachment #1: Type: text/plain, Size: 691 bytes --]
This patch allows the following to work:
set color_normal=cyan/blue
set color_highlight=white/blue
which is equivalent to this command in GRUB Legacy:
color cyan/blue white/blue
I haven't written a ChangeLog entry yet, because I'd like to receive comments
on the function names. I don't really like `parse_single_color_name' and
`parse_color_name' but I don't know what to call them :-(. What conventions
are there for referring to single colors (i.e. those that describe only FG or
only BG, not both) and complete colors (FG + BG) ?
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
[-- Attachment #2: menucolor.diff --]
[-- Type: text/x-diff, Size: 4285 bytes --]
diff -ur grub2.vesa/normal/menu.c grub2.gfxterm/normal/menu.c
--- grub2.vesa/normal/menu.c 2007-12-25 12:10:46.000000000 +0100
+++ grub2.gfxterm/normal/menu.c 2008-01-01 13:44:15.000000000 +0100
@@ -1,6 +1,6 @@
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 2003,2004,2005,2006,2007 Free Software Foundation, Inc.
+ * Copyright (C) 2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc.
*
* GRUB is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -28,6 +28,76 @@
#define GRUB_COLOR_MENU_NORMAL 0x07
#define GRUB_COLOR_MENU_HIGHLIGHT 0x70
+static grub_uint8_t grub_color_menu_normal = GRUB_COLOR_MENU_NORMAL;
+static grub_uint8_t grub_color_menu_highlight = GRUB_COLOR_MENU_HIGHLIGHT;
+
+static void
+wait_after_message (void)
+{
+ /* Wait until the user pushes any key so that the user
+ can see what happened. */
+ grub_printf ("\nPress any key to continue...");
+ (void) grub_getkey ();
+}
+
+/* Borrowed from GRUB Legacy */
+static char *color_list[16] =
+{
+ "black",
+ "blue",
+ "green",
+ "cyan",
+ "red",
+ "magenta",
+ "brown",
+ "light-gray",
+ "dark-gray",
+ "light-blue",
+ "light-green",
+ "light-cyan",
+ "light-red",
+ "light-magenta",
+ "yellow",
+ "white"
+};
+
+static grub_uint8_t
+parse_single_color_name (char *name)
+{
+ grub_uint8_t i;
+ for (i = 0; i < 0x10; i++)
+ if (! grub_strcmp (name, color_list[i]))
+ break;
+ return i;
+}
+
+static grub_uint8_t
+parse_color_name (char *name)
+{
+ grub_uint8_t ret_fg, ret_bg;
+ char *fg, *bg;
+
+ /* not specified by user */
+ if (name == NULL)
+ return GRUB_COLOR_MENU_NORMAL;
+
+ fg = grub_strdup (name);
+ bg = grub_strchr (fg, '/');
+ *(bg++) = '\0';
+ ret_fg = parse_single_color_name (fg);
+ ret_bg = parse_single_color_name (bg);
+ grub_free (fg);
+
+ if ((ret_fg | ret_bg) > 0x0f)
+ {
+ grub_printf ("Warning: invalid color name, reverting to defaults\n");
+ wait_after_message ();
+ return GRUB_COLOR_MENU_NORMAL;
+ }
+ else
+ return (ret_bg << 4) | ret_fg;
+}
+
static void
draw_border (void)
{
@@ -108,7 +178,7 @@
grub_ssize_t len;
grub_uint32_t *unicode_title;
grub_ssize_t i;
- grub_uint8_t normal_code, highlight_code;
+ grub_uint8_t old_color_normal, old_color_highlight;
title = entry ? entry->title : "";
unicode_title = grub_malloc (grub_strlen (title) * sizeof (*unicode_title));
@@ -125,8 +195,8 @@
return;
}
- grub_getcolor (&normal_code, &highlight_code);
- grub_setcolor (GRUB_COLOR_MENU_NORMAL, GRUB_COLOR_MENU_HIGHLIGHT);
+ grub_getcolor (&old_color_normal, &old_color_highlight);
+ grub_setcolor (grub_color_menu_normal, grub_color_menu_highlight);
grub_setcolorstate (highlight
? GRUB_TERM_COLOR_HIGHLIGHT
: GRUB_TERM_COLOR_NORMAL);
@@ -164,7 +234,7 @@
grub_gotoxy (GRUB_TERM_CURSOR_X, y);
- grub_setcolor (normal_code, highlight_code);
+ grub_setcolor (old_color_normal, old_color_highlight);
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
grub_free (unicode_title);
}
@@ -209,15 +279,19 @@
void
grub_menu_init_page (int nested, int edit)
{
- grub_uint8_t normal_code, highlight_code;
- grub_getcolor (&normal_code, &highlight_code);
- grub_setcolor (GRUB_COLOR_MENU_NORMAL, GRUB_COLOR_MENU_HIGHLIGHT);
+ grub_uint8_t old_color_normal, old_color_highlight;
+
+ grub_color_menu_normal = parse_color_name (grub_env_get ("color_normal"));
+ grub_color_menu_highlight = parse_color_name (grub_env_get ("color_highlight"));
+
+ grub_getcolor (&old_color_normal, &old_color_highlight);
+ grub_setcolor (grub_color_menu_normal, grub_color_menu_highlight);
grub_normal_init_page ();
draw_border ();
print_message (nested, edit);
- grub_setcolor (normal_code, highlight_code);
+ grub_setcolor (old_color_normal, old_color_highlight);
}
/* Return the current timeout. If the variable "timeout" is not set or
@@ -501,10 +575,7 @@
grub_print_error ();
grub_errno = GRUB_ERR_NONE;
- /* Wait until the user pushes any key so that the user
- can see what happened. */
- grub_printf ("\nPress any key to continue...");
- (void) grub_getkey ();
+ wait_after_message ();
}
}
}
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-01 12:47 [PATCH] allow user-configurable menucolor Robert Millan
@ 2008-01-01 13:14 ` Vesa Jääskeläinen
2008-01-01 13:40 ` Robert Millan
2008-01-02 23:42 ` Yoshinori K. Okuji
1 sibling, 1 reply; 24+ messages in thread
From: Vesa Jääskeläinen @ 2008-01-01 13:14 UTC (permalink / raw)
To: The development of GRUB 2
Robert Millan wrote:
> This patch allows the following to work:
>
> set color_normal=cyan/blue
> set color_highlight=white/blue
>
> which is equivalent to this command in GRUB Legacy:
>
> color cyan/blue white/blue
>
> I haven't written a ChangeLog entry yet, because I'd like to receive comments
> on the function names. I don't really like `parse_single_color_name' and
> `parse_color_name' but I don't know what to call them :-(. What conventions
> are there for referring to single colors (i.e. those that describe only FG or
> only BG, not both) and complete colors (FG + BG) ?
First some questions ;)
- What happens when you forgot to provide / in this string ;) ?
- What happens when all memory is used?
- What happens when you alter list of colors... remove one entry of it
or add one. (eg. hard coding is bad... sizeof...)
Now to your naming issue...
This code is quite specific to be only local so I would propose following:
parse_single_color_name -> parse_color_name
parse_color_name -> parse_color_tuple, parse_color_pair,
parse_text_color or parse_menu_color
Ideally these would be superseded by theming but should work as
temporary code until this feature is implemented. That being said... I
would be too concerned about its naming :)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-01 13:14 ` Vesa Jääskeläinen
@ 2008-01-01 13:40 ` Robert Millan
2008-01-01 13:51 ` Vesa Jääskeläinen
0 siblings, 1 reply; 24+ messages in thread
From: Robert Millan @ 2008-01-01 13:40 UTC (permalink / raw)
To: The development of GRUB 2
On Tue, Jan 01, 2008 at 03:14:50PM +0200, Vesa Jääskeläinen wrote:
>
> First some questions ;)
>
> - What happens when you forgot to provide / in this string ;) ?
grub_strchr() returns NULL and... whoops! I'll fix that :-)
> - What happens when all memory is used?
What do you mean?
> - What happens when you alter list of colors... remove one entry of it
> or add one.
This should never happen. The list is just a human description of GRUB color
codes. GRUB VGA-style color codes are never changed in runtime, so neither
should this list.
> (eg. hard coding is bad... sizeof...)
Where can sizeof be used?
> Now to your naming issue...
>
> This code is quite specific to be only local so I would propose following:
>
> parse_single_color_name -> parse_color_name
>
> parse_color_name -> parse_color_tuple, parse_color_pair,
> parse_text_color or parse_menu_color
How about `parse_color_name_pair' ?
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-01 13:40 ` Robert Millan
@ 2008-01-01 13:51 ` Vesa Jääskeläinen
2008-01-01 14:45 ` Robert Millan
0 siblings, 1 reply; 24+ messages in thread
From: Vesa Jääskeläinen @ 2008-01-01 13:51 UTC (permalink / raw)
To: The development of GRUB 2
Robert Millan wrote:
> On Tue, Jan 01, 2008 at 03:14:50PM +0200, Vesa Jääskeläinen wrote:
>> First some questions ;)
>>
>> - What happens when you forgot to provide / in this string ;) ?
>
> grub_strchr() returns NULL and... whoops! I'll fix that :-)
>
>> - What happens when all memory is used?
>
> What do you mean?
strdup() == NULL
>> - What happens when you alter list of colors... remove one entry of it
>> or add one.
>
> This should never happen. The list is just a human description of GRUB color
> codes. GRUB VGA-style color codes are never changed in runtime, so neither
> should this list.
Yes, but... (below)
>> (eg. hard coding is bad... sizeof...)
>
> Where can sizeof be used?
for (i = 0; i < 0x10; i++)
->
for (i = 0; i < sizeof(color_list) / sizeof(*color_list); i++)
or similar compile time calculation for it. If you are using construct
like this then your code always indexes array correctly. This of course
requires that color_list is local to source file being compiled. Point
being taken here is that never use hard-coded indexes to some arrays
when there is even slight possibility that it can change.
>> Now to your naming issue...
>>
>> This code is quite specific to be only local so I would propose following:
>>
>> parse_single_color_name -> parse_color_name
>>
>> parse_color_name -> parse_color_tuple, parse_color_pair,
>> parse_text_color or parse_menu_color
>
> How about `parse_color_name_pair' ?
this name is good as any and goes well with parse_color_name name.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-01 13:51 ` Vesa Jääskeläinen
@ 2008-01-01 14:45 ` Robert Millan
2008-01-01 17:38 ` Robert Millan
0 siblings, 1 reply; 24+ messages in thread
From: Robert Millan @ 2008-01-01 14:45 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 388 bytes --]
Thanks for the pointers. While fixing them I found other mistakes, then
started "torturing" the code with ill user input, found more mistakes, and
ended up refactoring most of it.
See attached new patch, this time including ChangeLog entry.
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
[-- Attachment #2: menucolor.diff --]
[-- Type: text/x-diff, Size: 5703 bytes --]
2008-01-01 Robert Millan <rmh@aybabtu.com>
* normal/menu.c (grub_color_menu_normal): New variable.
(grub_color_menu_highlight): Likewise.
(grub_menu_run): Split `press any key' prompt from here ...
(wait_after_message): ... to here (new function).
(color_list): New variable (copied from grub/stage2/builtins.c).
(parse_color_name): New function.
(parse_color_name_pair): New function.
(print_entry): Rename `normal_code' to `old_color_normal'.
Rename `highlight_code' to `old_color_highlight'.
(grub_menu_init_page): Use parse_color_name_pair() to update
`grub_color_menu_normal' and `grub_color_menu_highlight' from user
input, if applicable.
diff -urp grub2/normal/menu.c grub2.color/normal/menu.c
--- grub2/normal/menu.c 2007-12-25 12:10:46.000000000 +0100
+++ grub2.color/normal/menu.c 2008-01-01 15:34:15.000000000 +0100
@@ -1,6 +1,6 @@
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 2003,2004,2005,2006,2007 Free Software Foundation, Inc.
+ * Copyright (C) 2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc.
*
* GRUB is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -28,6 +28,99 @@
#define GRUB_COLOR_MENU_NORMAL 0x07
#define GRUB_COLOR_MENU_HIGHLIGHT 0x70
+static grub_uint8_t grub_color_menu_normal = GRUB_COLOR_MENU_NORMAL;
+static grub_uint8_t grub_color_menu_highlight = GRUB_COLOR_MENU_HIGHLIGHT;
+
+static void
+wait_after_message (void)
+{
+ /* Wait until the user pushes any key so that the user
+ can see what happened. */
+ grub_printf ("\nPress any key to continue...");
+ (void) grub_getkey ();
+}
+
+/* Borrowed from GRUB Legacy */
+static char *color_list[16] =
+{
+ "black",
+ "blue",
+ "green",
+ "cyan",
+ "red",
+ "magenta",
+ "brown",
+ "light-gray",
+ "dark-gray",
+ "light-blue",
+ "light-green",
+ "light-cyan",
+ "light-red",
+ "light-magenta",
+ "yellow",
+ "white"
+};
+
+static int
+parse_color_name (grub_uint8_t *ret, char *name)
+{
+ grub_uint8_t i;
+ for (i = 0; i < sizeof (color_list) / sizeof (*color_list); i++)
+ if (! grub_strcmp (name, color_list[i]))
+ {
+ *ret = i;
+ return 0;
+ }
+ return -1;
+}
+
+static void
+parse_color_name_pair (grub_uint8_t *ret, char *name)
+{
+ grub_uint8_t fg, bg;
+ char *fg_name, *bg_name;
+
+ /* nothing specified by user */
+ if (name == NULL)
+ return;
+
+ fg_name = grub_strdup (name);
+ if (fg_name == NULL)
+ {
+ /* "out of memory" message was printed by grub_strdup() */
+ wait_after_message ();
+ return;
+ }
+
+ bg_name = grub_strchr (fg_name, '/');
+ if (bg_name == NULL)
+ {
+ grub_printf ("Warning: syntax error (missing slash) in `%s'\n", fg_name);
+ wait_after_message ();
+ goto free_and_return;
+ }
+
+ *(bg_name++) = '\0';
+
+ if (parse_color_name (&fg, fg_name) == -1)
+ {
+ grub_printf ("Warning: invalid foreground color `%s'\n", fg_name);
+ wait_after_message ();
+ goto free_and_return;
+ }
+ if (parse_color_name (&bg, bg_name) == -1)
+ {
+ grub_printf ("Warning: invalid background color `%s'\n", bg_name);
+ wait_after_message ();
+ goto free_and_return;
+ }
+
+ *ret = (bg << 4) | fg;
+
+free_and_return:
+ grub_free (fg_name);
+}
+
static void
draw_border (void)
{
@@ -108,7 +201,7 @@ print_entry (int y, int highlight, grub_
grub_ssize_t len;
grub_uint32_t *unicode_title;
grub_ssize_t i;
- grub_uint8_t normal_code, highlight_code;
+ grub_uint8_t old_color_normal, old_color_highlight;
title = entry ? entry->title : "";
unicode_title = grub_malloc (grub_strlen (title) * sizeof (*unicode_title));
@@ -125,8 +218,8 @@ print_entry (int y, int highlight, grub_
return;
}
- grub_getcolor (&normal_code, &highlight_code);
- grub_setcolor (GRUB_COLOR_MENU_NORMAL, GRUB_COLOR_MENU_HIGHLIGHT);
+ grub_getcolor (&old_color_normal, &old_color_highlight);
+ grub_setcolor (grub_color_menu_normal, grub_color_menu_highlight);
grub_setcolorstate (highlight
? GRUB_TERM_COLOR_HIGHLIGHT
: GRUB_TERM_COLOR_NORMAL);
@@ -164,7 +257,7 @@ print_entry (int y, int highlight, grub_
grub_gotoxy (GRUB_TERM_CURSOR_X, y);
- grub_setcolor (normal_code, highlight_code);
+ grub_setcolor (old_color_normal, old_color_highlight);
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
grub_free (unicode_title);
}
@@ -209,15 +302,19 @@ print_entries (grub_menu_t menu, int fir
void
grub_menu_init_page (int nested, int edit)
{
- grub_uint8_t normal_code, highlight_code;
- grub_getcolor (&normal_code, &highlight_code);
- grub_setcolor (GRUB_COLOR_MENU_NORMAL, GRUB_COLOR_MENU_HIGHLIGHT);
+ grub_uint8_t old_color_normal, old_color_highlight;
+
+ parse_color_name_pair (&grub_color_menu_normal, grub_env_get ("color_normal"));
+ parse_color_name_pair (&grub_color_menu_highlight, grub_env_get ("color_highlight"));
+
+ grub_getcolor (&old_color_normal, &old_color_highlight);
+ grub_setcolor (grub_color_menu_normal, grub_color_menu_highlight);
grub_normal_init_page ();
draw_border ();
print_message (nested, edit);
- grub_setcolor (normal_code, highlight_code);
+ grub_setcolor (old_color_normal, old_color_highlight);
}
/* Return the current timeout. If the variable "timeout" is not set or
@@ -501,10 +598,7 @@ grub_menu_run (grub_menu_t menu, int nes
grub_print_error ();
grub_errno = GRUB_ERR_NONE;
- /* Wait until the user pushes any key so that the user
- can see what happened. */
- grub_printf ("\nPress any key to continue...");
- (void) grub_getkey ();
+ wait_after_message ();
}
}
}
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-01 14:45 ` Robert Millan
@ 2008-01-01 17:38 ` Robert Millan
2008-01-02 21:48 ` Robert Millan
0 siblings, 1 reply; 24+ messages in thread
From: Robert Millan @ 2008-01-01 17:38 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 1022 bytes --]
Some rework to support user-defined colors in non-menu as well. This is most
desirable when using the new background image feature implemented by Vesa,
since light-grey may not be properly readable depending on the image you're
using.
Example for bios console, setting up only menu color:
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
Example for gfxterm, setting up white foreground to match with loaded image:
insmod video
insmod vbe
insmod gfxterm
insmod tga
font (hd0)/unifont.pff
terminal gfxterm
set color_normal=white/black
set color_highlight=black/white
color
background_image (hd0)/bg.tga
`color' command is necessary to propagate user setting from environment
variables to the internal color of our current terminal.
Please comment on the design, etc first. I still have to write a ChangeLog
entry, update the missing *.rmk files, etc.
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
[-- Attachment #2: menucolor.diff --]
[-- Type: text/x-diff, Size: 11047 bytes --]
diff -x '*.mk' -Nurp grub2/conf/i386-pc.rmk grub2.color/conf/i386-pc.rmk
--- grub2/conf/i386-pc.rmk 2007-12-26 08:51:18.000000000 +0100
+++ grub2.color/conf/i386-pc.rmk 2008-01-01 17:43:27.000000000 +0100
@@ -111,7 +111,7 @@ grub_emu_SOURCES = commands/boot.c comma
kern/loader.c kern/main.c kern/misc.c kern/parser.c \
grub_script.tab.c kern/partition.c kern/rescue.c kern/term.c \
normal/arg.c normal/cmdline.c normal/command.c normal/function.c\
- normal/completion.c normal/main.c \
+ normal/completion.c normal/main.c normal/color.c \
normal/menu.c normal/menu_entry.c normal/misc.c normal/script.c \
partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \
partmap/acorn.c partmap/gpt.c \
@@ -168,6 +168,7 @@ normal_mod_DEPENDENCIES = grub_script.ta
normal_mod_SOURCES = normal/arg.c normal/cmdline.c normal/command.c \
normal/completion.c normal/execute.c \
normal/function.c normal/lexer.c normal/main.c normal/menu.c \
+ normal/color.c \
normal/menu_entry.c normal/misc.c grub_script.tab.c \
normal/script.c normal/i386/setjmp.S
normal_mod_CFLAGS = $(COMMON_CFLAGS)
diff -x '*.mk' -Nurp grub2/include/grub/normal.h grub2.color/include/grub/normal.h
--- grub2/include/grub/normal.h 2007-07-22 01:32:22.000000000 +0200
+++ grub2.color/include/grub/normal.h 2008-01-01 18:06:36.000000000 +0100
@@ -154,6 +154,8 @@ grub_err_t grub_normal_print_device_info
grub_err_t grub_normal_menu_addentry (const char *title,
struct grub_script *script,
const char *sourcecode);
+void grub_normal_color_reload (void);
+void wait_after_message (void);
#ifdef GRUB_UTIL
void grub_normal_init (void);
diff -x '*.mk' -Nurp grub2/normal/color.c grub2.color/normal/color.c
--- grub2/normal/color.c 1970-01-01 01:00:00.000000000 +0100
+++ grub2.color/normal/color.c 2008-01-01 18:03:28.000000000 +0100
@@ -0,0 +1,119 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 1999,2000,2001,2002,2003,2004,2008 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/misc.h>
+#include <grub/mm.h>
+#include <grub/normal.h>
+#include <grub/term.h>
+
+/* Borrowed from GRUB Legacy */
+static char *color_list[16] =
+{
+ "black",
+ "blue",
+ "green",
+ "cyan",
+ "red",
+ "magenta",
+ "brown",
+ "light-gray",
+ "dark-gray",
+ "light-blue",
+ "light-green",
+ "light-cyan",
+ "light-red",
+ "light-magenta",
+ "yellow",
+ "white"
+};
+
+static int
+parse_color_name (grub_uint8_t *ret, char *name)
+{
+ grub_uint8_t i;
+ for (i = 0; i < sizeof (color_list) / sizeof (*color_list); i++)
+ if (! grub_strcmp (name, color_list[i]))
+ {
+ *ret = i;
+ return 0;
+ }
+ return -1;
+}
+
+void
+grub_parse_color_name_pair (grub_uint8_t *ret, char *name)
+{
+ grub_uint8_t fg, bg;
+ char *fg_name, *bg_name;
+
+ /* nothing specified by user */
+ if (name == NULL)
+ return;
+
+ fg_name = grub_strdup (name);
+ if (fg_name == NULL)
+ {
+ /* "out of memory" message was printed by grub_strdup() */
+ wait_after_message ();
+ return;
+ }
+
+ bg_name = grub_strchr (fg_name, '/');
+ if (bg_name == NULL)
+ {
+ grub_printf ("Warning: syntax error (missing slash) in `%s'\n", fg_name);
+ wait_after_message ();
+ goto free_and_return;
+ }
+
+ *(bg_name++) = '\0';
+
+ if (parse_color_name (&fg, fg_name) == -1)
+ {
+ grub_printf ("Warning: invalid foreground color `%s'\n", fg_name);
+ wait_after_message ();
+ goto free_and_return;
+ }
+ if (parse_color_name (&bg, bg_name) == -1)
+ {
+ grub_printf ("Warning: invalid background color `%s'\n", bg_name);
+ wait_after_message ();
+ goto free_and_return;
+ }
+
+ *ret = (bg << 4) | fg;
+
+free_and_return:
+ grub_free (fg_name);
+}
+
+/* Replace default console colors with the ones specified by
+ user (if any). */
+void
+grub_normal_color_reload (void)
+{
+ grub_uint8_t color_normal, color_highlight;
+
+ grub_getcolor (&color_normal, &color_highlight);
+
+ grub_parse_color_name_pair (&color_normal, grub_env_get ("color_normal"));
+ grub_parse_color_name_pair (&color_highlight, grub_env_get ("color_highlight"));
+
+ grub_setcolor (color_normal, color_highlight);
+ grub_setcolorstate (GRUB_TERM_COLOR_NORMAL);
+}
diff -x '*.mk' -Nurp grub2/normal/command.c grub2.color/normal/command.c
--- grub2/normal/command.c 2007-07-22 01:32:29.000000000 +0200
+++ grub2.color/normal/command.c 2008-01-01 18:06:16.000000000 +0100
@@ -365,6 +365,14 @@ lsmod_command (struct grub_arg_list *sta
return 0;
}
+static grub_err_t
+color_command (struct grub_arg_list *state __attribute__ ((unused)),
+ int argc __attribute__ ((unused)), char **args __attribute__ ((unused)))
+{
+ grub_normal_color_reload ();
+ return 0;
+}
+
void
grub_command_init (void)
{
@@ -391,4 +399,7 @@ grub_command_init (void)
grub_register_command ("lsmod", lsmod_command, GRUB_COMMAND_FLAG_BOTH,
"lsmod", "Show loaded modules.", 0);
+
+ grub_register_command ("color", color_command, GRUB_COMMAND_FLAG_BOTH,
+ "color", "Set colors in the current terminal.", 0);
}
diff -x '*.mk' -Nurp grub2/normal/main.c grub2.color/normal/main.c
--- grub2/normal/main.c 2007-07-22 01:32:29.000000000 +0200
+++ grub2.color/normal/main.c 2008-01-01 18:04:33.000000000 +0100
@@ -268,12 +268,7 @@ read_config_file (const char *config, in
grub_file_close (file);
if (errors > 0)
- {
- /* Wait until the user pushes any key so that the user can
- see what happened. */
- grub_printf ("\nPress any key to continue...");
- (void) grub_getkey ();
- }
+ wait_after_message ();
return newmenu;
}
diff -x '*.mk' -Nurp grub2/normal/menu.c grub2.color/normal/menu.c
--- grub2/normal/menu.c 2007-12-25 12:10:46.000000000 +0100
+++ grub2.color/normal/menu.c 2008-01-01 18:29:05.000000000 +0100
@@ -1,6 +1,6 @@
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 2003,2004,2005,2006,2007 Free Software Foundation, Inc.
+ * Copyright (C) 2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc.
*
* GRUB is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -25,8 +25,17 @@
#include <grub/env.h>
#include <grub/script.h>
-#define GRUB_COLOR_MENU_NORMAL 0x07
-#define GRUB_COLOR_MENU_HIGHLIGHT 0x70
+static grub_uint8_t grub_color_menu_normal;
+static grub_uint8_t grub_color_menu_highlight;
+
+/* Wait until the user pushes any key so that the user
+ can see what happened. */
+void
+wait_after_message (void)
+{
+ grub_printf ("\nPress any key to continue...");
+ (void) grub_getkey ();
+}
static void
draw_border (void)
@@ -57,7 +66,7 @@ draw_border (void)
grub_putcode (GRUB_TERM_DISP_HLINE);
grub_putcode (GRUB_TERM_DISP_LR);
- grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
+ grub_setcolorstate (GRUB_TERM_COLOR_NORMAL);
grub_gotoxy (GRUB_TERM_MARGIN,
(GRUB_TERM_TOP_BORDER_Y + GRUB_TERM_NUM_ENTRIES
@@ -67,6 +76,8 @@ draw_border (void)
static void
print_message (int nested, int edit)
{
+ grub_setcolorstate (GRUB_TERM_COLOR_NORMAL);
+
if (edit)
{
grub_printf ("\n\
@@ -108,7 +119,7 @@ print_entry (int y, int highlight, grub_
grub_ssize_t len;
grub_uint32_t *unicode_title;
grub_ssize_t i;
- grub_uint8_t normal_code, highlight_code;
+ grub_uint8_t old_color_normal, old_color_highlight;
title = entry ? entry->title : "";
unicode_title = grub_malloc (grub_strlen (title) * sizeof (*unicode_title));
@@ -124,9 +135,9 @@ print_entry (int y, int highlight, grub_
grub_free (unicode_title);
return;
}
-
- grub_getcolor (&normal_code, &highlight_code);
- grub_setcolor (GRUB_COLOR_MENU_NORMAL, GRUB_COLOR_MENU_HIGHLIGHT);
+
+ grub_getcolor (&old_color_normal, &old_color_highlight);
+ grub_setcolor (grub_color_menu_normal, grub_color_menu_highlight);
grub_setcolorstate (highlight
? GRUB_TERM_COLOR_HIGHLIGHT
: GRUB_TERM_COLOR_NORMAL);
@@ -164,8 +175,8 @@ print_entry (int y, int highlight, grub_
grub_gotoxy (GRUB_TERM_CURSOR_X, y);
- grub_setcolor (normal_code, highlight_code);
- grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
+ grub_setcolor (old_color_normal, old_color_highlight);
+ grub_setcolorstate (GRUB_TERM_COLOR_NORMAL);
grub_free (unicode_title);
}
@@ -209,15 +220,23 @@ print_entries (grub_menu_t menu, int fir
void
grub_menu_init_page (int nested, int edit)
{
- grub_uint8_t normal_code, highlight_code;
- grub_getcolor (&normal_code, &highlight_code);
- grub_setcolor (GRUB_COLOR_MENU_NORMAL, GRUB_COLOR_MENU_HIGHLIGHT);
+ grub_uint8_t old_color_normal, old_color_highlight;
+
+ grub_getcolor (&old_color_normal, &old_color_highlight);
+
+ /* By default, use the same colors for the menu. */
+ grub_color_menu_normal = old_color_normal;
+ grub_color_menu_highlight = old_color_highlight;
+
+ /* Then give user a chance to replace them. */
+ grub_parse_color_name_pair (&grub_color_menu_normal, grub_env_get ("menu_color_normal"));
+ grub_parse_color_name_pair (&grub_color_menu_highlight, grub_env_get ("menu_color_highlight"));
grub_normal_init_page ();
+ grub_setcolor (grub_color_menu_normal, grub_color_menu_highlight);
draw_border ();
+ grub_setcolor (old_color_normal, old_color_highlight);
print_message (nested, edit);
-
- grub_setcolor (normal_code, highlight_code);
}
/* Return the current timeout. If the variable "timeout" is not set or
@@ -501,10 +520,7 @@ grub_menu_run (grub_menu_t menu, int nes
grub_print_error ();
grub_errno = GRUB_ERR_NONE;
- /* Wait until the user pushes any key so that the user
- can see what happened. */
- grub_printf ("\nPress any key to continue...");
- (void) grub_getkey ();
+ wait_after_message ();
}
}
}
diff -x '*.mk' -Nurp grub2/normal/menu_entry.c grub2.color/normal/menu_entry.c
--- grub2/normal/menu_entry.c 2007-12-30 09:52:05.000000000 +0100
+++ grub2.color/normal/menu_entry.c 2008-01-01 17:30:37.000000000 +0100
@@ -1030,10 +1030,7 @@ run (struct screen *screen)
{
grub_print_error ();
grub_errno = GRUB_ERR_NONE;
- /* Wait until the user pushes any key so that the user
- can see what happened. */
- grub_printf ("\nPress any key to continue...");
- (void) grub_getkey ();
+ wait_after_message ();
}
return 1;
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-01 17:38 ` Robert Millan
@ 2008-01-02 21:48 ` Robert Millan
2008-01-02 23:55 ` Yoshinori K. Okuji
0 siblings, 1 reply; 24+ messages in thread
From: Robert Millan @ 2008-01-02 21:48 UTC (permalink / raw)
To: The development of GRUB 2
On Tue, Jan 01, 2008 at 06:38:06PM +0100, Robert Millan wrote:
>
> `color' command is necessary to propagate user setting from environment
> variables to the internal color of our current terminal.
Vesa suggested (on IRC) to use write hooks (grub_env_write_hook_t) in
variables to avoid this. I tend to agree. What do others think?
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-01 12:47 [PATCH] allow user-configurable menucolor Robert Millan
2008-01-01 13:14 ` Vesa Jääskeläinen
@ 2008-01-02 23:42 ` Yoshinori K. Okuji
2008-01-03 1:04 ` Robert Millan
1 sibling, 1 reply; 24+ messages in thread
From: Yoshinori K. Okuji @ 2008-01-02 23:42 UTC (permalink / raw)
To: The development of GRUB 2
On Tuesday 01 January 2008 13:47, Robert Millan wrote:
> This patch allows the following to work:
>
> set color_normal=cyan/blue
> set color_highlight=white/blue
Although I am not a native speaker, I feel that they should be better
called "normal_color" and "highlight_color".
> which is equivalent to this command in GRUB Legacy:
>
> color cyan/blue white/blue
>
> I haven't written a ChangeLog entry yet, because I'd like to receive
> comments on the function names. I don't really like
> `parse_single_color_name' and `parse_color_name' but I don't know what to
> call them :-(. What conventions are there for referring to single colors
> (i.e. those that describe only FG or only BG, not both) and complete colors
> (FG + BG) ?
No such word, AFAIK. You know, it is ugly, because you want to put two
separate things into one place. ;)
Just look at CSS...
div {
color: black;
background-color: white;
}
So, if you don't hesitate to create so many variables, you can simply
create "normal_color", "normal_background_color", "highlight_color"
and "highlight_background_color", although I don't know who would like it.
Okuji
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-02 21:48 ` Robert Millan
@ 2008-01-02 23:55 ` Yoshinori K. Okuji
2008-01-03 0:56 ` Robert Millan
0 siblings, 1 reply; 24+ messages in thread
From: Yoshinori K. Okuji @ 2008-01-02 23:55 UTC (permalink / raw)
To: The development of GRUB 2
On Wednesday 02 January 2008 22:48, Robert Millan wrote:
> On Tue, Jan 01, 2008 at 06:38:06PM +0100, Robert Millan wrote:
> > `color' command is necessary to propagate user setting from environment
> > variables to the internal color of our current terminal.
>
> Vesa suggested (on IRC) to use write hooks (grub_env_write_hook_t) in
> variables to avoid this. I tend to agree. What do others think?
Generally speaking, if you are planning to read settings by scripting, it is
better to use a variable. If you are planning to change the behavior by
options, it is better to use a command.
Or, semantically, if you want to make an action, a command is suitable. If you
want to set a state, a variable is more appropriate.
Anyway, you can accomplish nearly the same thing with both, thanks to the
hooks, so the choice is mostly a matter of taste.
Personally, I think this should come up with variables. It is just like a
prompt in bash for me.
Okuji
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-02 23:55 ` Yoshinori K. Okuji
@ 2008-01-03 0:56 ` Robert Millan
0 siblings, 0 replies; 24+ messages in thread
From: Robert Millan @ 2008-01-03 0:56 UTC (permalink / raw)
To: The development of GRUB 2
On Thu, Jan 03, 2008 at 12:55:48AM +0100, Yoshinori K. Okuji wrote:
> On Wednesday 02 January 2008 22:48, Robert Millan wrote:
> > On Tue, Jan 01, 2008 at 06:38:06PM +0100, Robert Millan wrote:
> > > `color' command is necessary to propagate user setting from environment
> > > variables to the internal color of our current terminal.
> >
> > Vesa suggested (on IRC) to use write hooks (grub_env_write_hook_t) in
> > variables to avoid this. I tend to agree. What do others think?
>
> Generally speaking, if you are planning to read settings by scripting, it is
> better to use a variable. If you are planning to change the behavior by
> options, it is better to use a command.
>
> Or, semantically, if you want to make an action, a command is suitable. If you
> want to set a state, a variable is more appropriate.
>
> Anyway, you can accomplish nearly the same thing with both, thanks to the
> hooks, so the choice is mostly a matter of taste.
>
> Personally, I think this should come up with variables. It is just like a
> prompt in bash for me.
Ok, variables then. It's also more consistent, since the `color' command I
implemented was reliing on variables anyway.
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-02 23:42 ` Yoshinori K. Okuji
@ 2008-01-03 1:04 ` Robert Millan
2008-01-03 15:35 ` Robert Millan
0 siblings, 1 reply; 24+ messages in thread
From: Robert Millan @ 2008-01-03 1:04 UTC (permalink / raw)
To: The development of GRUB 2
On Thu, Jan 03, 2008 at 12:42:01AM +0100, Yoshinori K. Okuji wrote:
> On Tuesday 01 January 2008 13:47, Robert Millan wrote:
> > This patch allows the following to work:
> >
> > set color_normal=cyan/blue
> > set color_highlight=white/blue
>
> Although I am not a native speaker, I feel that they should be better
> called "normal_color" and "highlight_color".
I like to come up with names that share their prefix, because this makes
the set more readable:
set color_normal=cyan/blue
set color_highlight=white/blue
set normal_color=cyan/blue
set highlight_color=white/blue
In the first one the "color_" section is easier to identify. Althogh I
don't feel strongly about this of course :-)
> > which is equivalent to this command in GRUB Legacy:
> >
> > color cyan/blue white/blue
> >
> > I haven't written a ChangeLog entry yet, because I'd like to receive
> > comments on the function names. I don't really like
> > `parse_single_color_name' and `parse_color_name' but I don't know what to
> > call them :-(. What conventions are there for referring to single colors
> > (i.e. those that describe only FG or only BG, not both) and complete colors
> > (FG + BG) ?
>
> No such word, AFAIK. You know, it is ugly, because you want to put two
> separate things into one place. ;)
>
> Just look at CSS...
>
> div {
> color: black;
> background-color: white;
> }
>
> So, if you don't hesitate to create so many variables, you can simply
> create "normal_color", "normal_background_color", "highlight_color"
> and "highlight_background_color", although I don't know who would like it.
Sounds like this could save us some code space. I'd go for _fg and _bg to
preserve alignment in the names.
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-03 1:04 ` Robert Millan
@ 2008-01-03 15:35 ` Robert Millan
2008-01-03 16:04 ` Vesa Jääskeläinen
2008-01-05 21:45 ` [PATCH] allow user-configurable menucolor Jeroen Dekkers
0 siblings, 2 replies; 24+ messages in thread
From: Robert Millan @ 2008-01-03 15:35 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 988 bytes --]
On Thu, Jan 03, 2008 at 02:04:14AM +0100, Robert Millan wrote:
> > So, if you don't hesitate to create so many variables, you can simply
> > create "normal_color", "normal_background_color", "highlight_color"
> > and "highlight_background_color", although I don't know who would like it.
>
> Sounds like this could save us some code space. I'd go for _fg and _bg to
> preserve alignment in the names.
Uhm actually, splitting those in _fg and _bg was a bit of a hassle, because GRUB
internally thinks of colors as (bg << 4 | fg) like vga does, so obtaining them
from two separate variables didn't bring any real benefit.
See attached new patch, using variable hooks.
Note: if you're going to test this using "configfile" command, think that
this opens a new context and exposes the problem with hooks I just reported
in the other thread.
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
[-- Attachment #2: menucolor.diff --]
[-- Type: text/x-diff, Size: 14664 bytes --]
* include/grub/normal.h (grub_env_write_color_normal): New prototype.
(grub_env_write_color_highlight): Likewise.
(grub_wait_after_message): Likewise.
* normal/color.c: New file.
* conf/i386-pc.rmk (grub_emu_SOURCES): Add `normal/color.c'.
(normal_mod_DEPENDENCIES): Likewise.
* normal/menu_entry.c (run): Rely on grub_wait_after_message()
for waiting after a message is printed.
* normal/main.c (read_config_file): Likewise.
(grub_normal_init): Register grub_env_write_color_normal() and
grub_env_write_color_highlight() hooks. Mark `color_normal' and
`color_highlight' variables as global.
* normal/menu.c (grub_wait_after_message): New function.
(grub_color_menu_normal): New variable. Replaces ...
(GRUB_COLOR_MENU_NORMAL): ... this macro.
(grub_color_menu_highlight): New variable. Replaces ...
(GRUB_COLOR_MENU_HIGHLIGHT): ... this macro.
(draw_border): Set color state to `GRUB_TERM_COLOR_NORMAL' instead of
`GRUB_TERM_COLOR_STANDARD'.
(print_message): Use `grub_setcolorstate' to reload colors. Rename
`normal_code' and `highlight_code' to `old_color_normal' and
`old_color_highlight', respectively.
(grub_menu_init_page): Update colors when drawing the menu, based on
`menu_color_normal' and `menu_color_highlight' variables.
(grub_menu_run): Rely on grub_wait_after_message() for waiting after
a message is printed.
diff -x '*~' -x '*.mk' -Nurp grub2/conf/i386-pc.rmk grub2.color/conf/i386-pc.rmk
--- grub2/conf/i386-pc.rmk 2007-12-26 08:51:18.000000000 +0100
+++ grub2.color/conf/i386-pc.rmk 2008-01-03 15:01:09.000000000 +0100
@@ -111,7 +111,7 @@ grub_emu_SOURCES = commands/boot.c comma
kern/loader.c kern/main.c kern/misc.c kern/parser.c \
grub_script.tab.c kern/partition.c kern/rescue.c kern/term.c \
normal/arg.c normal/cmdline.c normal/command.c normal/function.c\
- normal/completion.c normal/main.c \
+ normal/completion.c normal/main.c normal/color.c \
normal/menu.c normal/menu_entry.c normal/misc.c normal/script.c \
partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \
partmap/acorn.c partmap/gpt.c \
@@ -168,6 +168,7 @@ normal_mod_DEPENDENCIES = grub_script.ta
normal_mod_SOURCES = normal/arg.c normal/cmdline.c normal/command.c \
normal/completion.c normal/execute.c \
normal/function.c normal/lexer.c normal/main.c normal/menu.c \
+ normal/color.c \
normal/menu_entry.c normal/misc.c grub_script.tab.c \
normal/script.c normal/i386/setjmp.S
normal_mod_CFLAGS = $(COMMON_CFLAGS)
diff -x '*~' -x '*.mk' -Nurp grub2/include/grub/normal.h grub2.color/include/grub/normal.h
--- grub2/include/grub/normal.h 2007-07-22 01:32:22.000000000 +0200
+++ grub2.color/include/grub/normal.h 2008-01-03 16:12:53.000000000 +0100
@@ -1,7 +1,7 @@
/* normal.h - prototypes for the normal mode */
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 2002,2003,2005,2006,2007 Free Software Foundation, Inc.
+ * Copyright (C) 2002,2003,2005,2006,2007,2008 Free Software Foundation, Inc.
*
* GRUB is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -154,6 +154,9 @@ grub_err_t grub_normal_print_device_info
grub_err_t grub_normal_menu_addentry (const char *title,
struct grub_script *script,
const char *sourcecode);
+char *grub_env_write_color_normal (struct grub_env_var *var, const char *val);
+char *grub_env_write_color_highlight (struct grub_env_var *var, const char *val);
+void grub_wait_after_message (void);
#ifdef GRUB_UTIL
void grub_normal_init (void);
diff -x '*~' -x '*.mk' -Nurp grub2/normal/color.c grub2.color/normal/color.c
--- grub2/normal/color.c 1970-01-01 01:00:00.000000000 +0100
+++ grub2.color/normal/color.c 2008-01-03 15:44:48.000000000 +0100
@@ -0,0 +1,149 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 1999,2000,2001,2002,2003,2004,2008 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/env.h>
+#include <grub/misc.h>
+#include <grub/mm.h>
+#include <grub/normal.h>
+#include <grub/term.h>
+
+/* Borrowed from GRUB Legacy */
+static char *color_list[16] =
+{
+ "black",
+ "blue",
+ "green",
+ "cyan",
+ "red",
+ "magenta",
+ "brown",
+ "light-gray",
+ "dark-gray",
+ "light-blue",
+ "light-green",
+ "light-cyan",
+ "light-red",
+ "light-magenta",
+ "yellow",
+ "white"
+};
+
+static int
+parse_color_name (grub_uint8_t *ret, char *name)
+{
+ grub_uint8_t i;
+ for (i = 0; i < sizeof (color_list) / sizeof (*color_list); i++)
+ if (! grub_strcmp (name, color_list[i]))
+ {
+ *ret = i;
+ return 0;
+ }
+ return -1;
+}
+
+void
+grub_parse_color_name_pair (grub_uint8_t *ret, char *name)
+{
+ grub_uint8_t fg, bg;
+ char *fg_name, *bg_name;
+
+ /* nothing specified by user */
+ if (name == NULL)
+ return;
+
+ fg_name = grub_strdup (name);
+ if (fg_name == NULL)
+ {
+ /* "out of memory" message was printed by grub_strdup() */
+ grub_wait_after_message ();
+ return;
+ }
+
+ bg_name = grub_strchr (fg_name, '/');
+ if (bg_name == NULL)
+ {
+ grub_printf ("Warning: syntax error (missing slash) in `%s'\n", fg_name);
+ grub_wait_after_message ();
+ goto free_and_return;
+ }
+
+ *(bg_name++) = '\0';
+
+ if (parse_color_name (&fg, fg_name) == -1)
+ {
+ grub_printf ("Warning: invalid foreground color `%s'\n", fg_name);
+ grub_wait_after_message ();
+ goto free_and_return;
+ }
+ if (parse_color_name (&bg, bg_name) == -1)
+ {
+ grub_printf ("Warning: invalid background color `%s'\n", bg_name);
+ grub_wait_after_message ();
+ goto free_and_return;
+ }
+
+ *ret = (bg << 4) | fg;
+
+free_and_return:
+ grub_free (fg_name);
+}
+
+/* Replace default `normal' colors with the ones specified by user (if any). */
+char *
+grub_env_write_color_normal (struct grub_env_var *var __attribute__ ((unused)),
+ const char *val)
+{
+ grub_uint8_t color_normal, color_highlight;
+
+ /* Use old settings in case grub_parse_color_name_pair() has no effect. */
+ grub_getcolor (&color_normal, &color_highlight);
+
+ grub_parse_color_name_pair (&color_normal, val);
+
+ /* Reloads terminal `normal' and `highlight' colors. */
+ grub_setcolor (color_normal, color_highlight);
+
+ /* Propagates `normal' color to terminal current color. */
+ grub_setcolorstate (GRUB_TERM_COLOR_NORMAL);
+
+ return grub_strdup (val);
+}
+
+/* Replace default `highlight' colors with the ones specified by user (if any). */
+char *
+grub_env_write_color_highlight (struct grub_env_var *var __attribute__ ((unused)),
+ const char *val)
+{
+ grub_uint8_t color_normal, color_highlight;
+
+ /* Use old settings in case grub_parse_color_name_pair() has no effect. */
+ grub_getcolor (&color_normal, &color_highlight);
+
+ grub_parse_color_name_pair (&color_highlight, val);
+
+ /* Reloads terminal `normal' and `highlight' colors. */
+ grub_setcolor (color_normal, color_highlight);
+
+ /* Propagates `normal' color to terminal current color.
+ Note: Using GRUB_TERM_COLOR_NORMAL here rather than
+ GRUB_TERM_COLOR_HIGHLIGHT is intentional. We don't want to switch
+ to highlight state just because color was reloaded. */
+ grub_setcolorstate (GRUB_TERM_COLOR_NORMAL);
+
+ return grub_strdup (val);
+}
diff -x '*~' -x '*.mk' -Nurp grub2/normal/main.c grub2.color/normal/main.c
--- grub2/normal/main.c 2007-07-22 01:32:29.000000000 +0200
+++ grub2.color/normal/main.c 2008-01-03 16:13:37.000000000 +0100
@@ -1,7 +1,7 @@
/* main.c - the normal mode main routine */
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 2000,2001,2002,2003,2005,2006,2007 Free Software Foundation, Inc.
+ * Copyright (C) 2000,2001,2002,2003,2005,2006,2007,2008 Free Software Foundation, Inc.
*
* GRUB is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -268,12 +268,7 @@ read_config_file (const char *config, in
grub_file_close (file);
if (errors > 0)
- {
- /* Wait until the user pushes any key so that the user can
- see what happened. */
- grub_printf ("\nPress any key to continue...");
- (void) grub_getkey ();
- }
+ grub_wait_after_message ();
return newmenu;
}
@@ -527,6 +522,14 @@ GRUB_MOD_INIT(normal)
grub_rescue_register_command ("normal", grub_rescue_cmd_normal,
"enter normal mode");
+ /* Reload terminal colors when these variables are written to. */
+ grub_register_variable_hook ("color_normal", NULL, grub_env_write_color_normal);
+ grub_register_variable_hook ("color_highlight", NULL, grub_env_write_color_highlight);
+
+ /* Preserve hooks after context changes. */
+ grub_env_export ("color_normal");
+ grub_env_export ("color_highlight");
+
/* This registers some built-in commands. */
grub_command_init ();
}
diff -x '*~' -x '*.mk' -Nurp grub2/normal/menu.c grub2.color/normal/menu.c
--- grub2/normal/menu.c 2007-12-25 12:10:46.000000000 +0100
+++ grub2.color/normal/menu.c 2008-01-03 15:31:37.000000000 +0100
@@ -1,6 +1,6 @@
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 2003,2004,2005,2006,2007 Free Software Foundation, Inc.
+ * Copyright (C) 2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc.
*
* GRUB is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -25,8 +25,17 @@
#include <grub/env.h>
#include <grub/script.h>
-#define GRUB_COLOR_MENU_NORMAL 0x07
-#define GRUB_COLOR_MENU_HIGHLIGHT 0x70
+static grub_uint8_t grub_color_menu_normal;
+static grub_uint8_t grub_color_menu_highlight;
+
+/* Wait until the user pushes any key so that the user
+ can see what happened. */
+void
+grub_wait_after_message (void)
+{
+ grub_printf ("\nPress any key to continue...");
+ (void) grub_getkey ();
+}
static void
draw_border (void)
@@ -57,7 +66,7 @@ draw_border (void)
grub_putcode (GRUB_TERM_DISP_HLINE);
grub_putcode (GRUB_TERM_DISP_LR);
- grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
+ grub_setcolorstate (GRUB_TERM_COLOR_NORMAL);
grub_gotoxy (GRUB_TERM_MARGIN,
(GRUB_TERM_TOP_BORDER_Y + GRUB_TERM_NUM_ENTRIES
@@ -67,6 +76,8 @@ draw_border (void)
static void
print_message (int nested, int edit)
{
+ grub_setcolorstate (GRUB_TERM_COLOR_NORMAL);
+
if (edit)
{
grub_printf ("\n\
@@ -108,7 +119,7 @@ print_entry (int y, int highlight, grub_
grub_ssize_t len;
grub_uint32_t *unicode_title;
grub_ssize_t i;
- grub_uint8_t normal_code, highlight_code;
+ grub_uint8_t old_color_normal, old_color_highlight;
title = entry ? entry->title : "";
unicode_title = grub_malloc (grub_strlen (title) * sizeof (*unicode_title));
@@ -124,9 +135,9 @@ print_entry (int y, int highlight, grub_
grub_free (unicode_title);
return;
}
-
- grub_getcolor (&normal_code, &highlight_code);
- grub_setcolor (GRUB_COLOR_MENU_NORMAL, GRUB_COLOR_MENU_HIGHLIGHT);
+
+ grub_getcolor (&old_color_normal, &old_color_highlight);
+ grub_setcolor (grub_color_menu_normal, grub_color_menu_highlight);
grub_setcolorstate (highlight
? GRUB_TERM_COLOR_HIGHLIGHT
: GRUB_TERM_COLOR_NORMAL);
@@ -164,8 +175,8 @@ print_entry (int y, int highlight, grub_
grub_gotoxy (GRUB_TERM_CURSOR_X, y);
- grub_setcolor (normal_code, highlight_code);
- grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
+ grub_setcolor (old_color_normal, old_color_highlight);
+ grub_setcolorstate (GRUB_TERM_COLOR_NORMAL);
grub_free (unicode_title);
}
@@ -209,15 +220,23 @@ print_entries (grub_menu_t menu, int fir
void
grub_menu_init_page (int nested, int edit)
{
- grub_uint8_t normal_code, highlight_code;
- grub_getcolor (&normal_code, &highlight_code);
- grub_setcolor (GRUB_COLOR_MENU_NORMAL, GRUB_COLOR_MENU_HIGHLIGHT);
+ grub_uint8_t old_color_normal, old_color_highlight;
+
+ grub_getcolor (&old_color_normal, &old_color_highlight);
+
+ /* By default, use the same colors for the menu. */
+ grub_color_menu_normal = old_color_normal;
+ grub_color_menu_highlight = old_color_highlight;
+
+ /* Then give user a chance to replace them. */
+ grub_parse_color_name_pair (&grub_color_menu_normal, grub_env_get ("menu_color_normal"));
+ grub_parse_color_name_pair (&grub_color_menu_highlight, grub_env_get ("menu_color_highlight"));
grub_normal_init_page ();
+ grub_setcolor (grub_color_menu_normal, grub_color_menu_highlight);
draw_border ();
+ grub_setcolor (old_color_normal, old_color_highlight);
print_message (nested, edit);
-
- grub_setcolor (normal_code, highlight_code);
}
/* Return the current timeout. If the variable "timeout" is not set or
@@ -501,10 +520,7 @@ grub_menu_run (grub_menu_t menu, int nes
grub_print_error ();
grub_errno = GRUB_ERR_NONE;
- /* Wait until the user pushes any key so that the user
- can see what happened. */
- grub_printf ("\nPress any key to continue...");
- (void) grub_getkey ();
+ grub_wait_after_message ();
}
}
}
diff -x '*~' -x '*.mk' -Nurp grub2/normal/menu_entry.c grub2.color/normal/menu_entry.c
--- grub2/normal/menu_entry.c 2007-12-30 09:52:05.000000000 +0100
+++ grub2.color/normal/menu_entry.c 2008-01-03 16:13:59.000000000 +0100
@@ -1,6 +1,6 @@
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 2005,2006,2007 Free Software Foundation, Inc.
+ * Copyright (C) 2005,2006,2007,2008 Free Software Foundation, Inc.
*
* GRUB is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -1030,10 +1030,7 @@ run (struct screen *screen)
{
grub_print_error ();
grub_errno = GRUB_ERR_NONE;
- /* Wait until the user pushes any key so that the user
- can see what happened. */
- grub_printf ("\nPress any key to continue...");
- (void) grub_getkey ();
+ grub_wait_after_message ();
}
return 1;
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-03 15:35 ` Robert Millan
@ 2008-01-03 16:04 ` Vesa Jääskeläinen
2008-01-03 16:38 ` Robert Millan
2008-01-04 8:02 ` opening new context (was: [PATCH] allow user-configurable menucolor) Robert Millan
2008-01-05 21:45 ` [PATCH] allow user-configurable menucolor Jeroen Dekkers
1 sibling, 2 replies; 24+ messages in thread
From: Vesa Jääskeläinen @ 2008-01-03 16:04 UTC (permalink / raw)
To: The development of GRUB 2
Robert Millan wrote:
> On Thu, Jan 03, 2008 at 02:04:14AM +0100, Robert Millan wrote:
>>> So, if you don't hesitate to create so many variables, you can simply
>>> create "normal_color", "normal_background_color", "highlight_color"
>>> and "highlight_background_color", although I don't know who would like it.
>> Sounds like this could save us some code space. I'd go for _fg and _bg to
>> preserve alignment in the names.
>
> Uhm actually, splitting those in _fg and _bg was a bit of a hassle, because GRUB
> internally thinks of colors as (bg << 4 | fg) like vga does, so obtaining them
> from two separate variables didn't bring any real benefit.
>
> See attached new patch, using variable hooks.
>
> Note: if you're going to test this using "configfile" command, think that
> this opens a new context and exposes the problem with hooks I just reported
> in the other thread.
About error handling:
Why not call grub_error() with error message and just return from
callback, and let prompt handle error processing (grub_print_error()).
This would keep error reporting centralized.
About new context:
Shouldn't new context have clone of it's parent contexts settings?
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-03 16:04 ` Vesa Jääskeläinen
@ 2008-01-03 16:38 ` Robert Millan
2008-01-23 8:56 ` Marco Gerards
2008-01-04 8:02 ` opening new context (was: [PATCH] allow user-configurable menucolor) Robert Millan
1 sibling, 1 reply; 24+ messages in thread
From: Robert Millan @ 2008-01-03 16:38 UTC (permalink / raw)
To: The development of GRUB 2
On Thu, Jan 03, 2008 at 06:04:59PM +0200, Vesa Jääskeläinen wrote:
>
> About error handling:
>
> Why not call grub_error() with error message and just return from
> callback, and let prompt handle error processing (grub_print_error()).
> This would keep error reporting centralized.
One thing I don't like about grub_error() is that I never know what value to
pick for the first parameter. I find this confusing :-/
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 24+ messages in thread
* opening new context (was: [PATCH] allow user-configurable menucolor)
2008-01-03 16:04 ` Vesa Jääskeläinen
2008-01-03 16:38 ` Robert Millan
@ 2008-01-04 8:02 ` Robert Millan
2008-01-05 1:34 ` Yoshinori K. Okuji
1 sibling, 1 reply; 24+ messages in thread
From: Robert Millan @ 2008-01-04 8:02 UTC (permalink / raw)
To: The development of GRUB 2
On Thu, Jan 03, 2008 at 06:04:59PM +0200, Vesa Jääskeläinen wrote:
>
> About new context:
>
> Shouldn't new context have clone of it's parent contexts settings?
I wouldn't want to change that without having some input from whoever designed
(or understands) grub_env_export(). There's probably a reason for it, although
I can't see it.
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: opening new context (was: [PATCH] allow user-configurable menucolor)
2008-01-04 8:02 ` opening new context (was: [PATCH] allow user-configurable menucolor) Robert Millan
@ 2008-01-05 1:34 ` Yoshinori K. Okuji
2008-01-05 11:49 ` Robert Millan
0 siblings, 1 reply; 24+ messages in thread
From: Yoshinori K. Okuji @ 2008-01-05 1:34 UTC (permalink / raw)
To: The development of GRUB 2
On Friday 04 January 2008 09:02, Robert Millan wrote:
> On Thu, Jan 03, 2008 at 06:04:59PM +0200, Vesa Jääskeläinen wrote:
> > About new context:
> >
> > Shouldn't new context have clone of it's parent contexts settings?
>
> I wouldn't want to change that without having some input from whoever
> designed (or understands) grub_env_export(). There's probably a reason for
> it, although I can't see it.
It is analogous to bash. If you invoke another bash from bash, that won't
inherit variables, unless they are exported.
Besides that, I think it is a good thing that some kind of "clean room"
or "sandbox" is guaranteed.
Okuji
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: opening new context (was: [PATCH] allow user-configurable menucolor)
2008-01-05 1:34 ` Yoshinori K. Okuji
@ 2008-01-05 11:49 ` Robert Millan
2008-01-05 12:03 ` Yoshinori K. Okuji
0 siblings, 1 reply; 24+ messages in thread
From: Robert Millan @ 2008-01-05 11:49 UTC (permalink / raw)
To: The development of GRUB 2
On Sat, Jan 05, 2008 at 02:34:38AM +0100, Yoshinori K. Okuji wrote:
> On Friday 04 January 2008 09:02, Robert Millan wrote:
> > On Thu, Jan 03, 2008 at 06:04:59PM +0200, Vesa Jääskeläinen wrote:
> > > About new context:
> > >
> > > Shouldn't new context have clone of it's parent contexts settings?
> >
> > I wouldn't want to change that without having some input from whoever
> > designed (or understands) grub_env_export(). There's probably a reason for
> > it, although I can't see it.
>
> It is analogous to bash. If you invoke another bash from bash, that won't
> inherit variables, unless they are exported.
It's not exactly analogous. bash doesn't commonly use variable hooks (if they
even exist).
Anyway, I wouldn't want to spend much time discussing this. I assume my
proposed change (propagating read/write hooks for global/exported variables)
sounds fine?
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: opening new context (was: [PATCH] allow user-configurable menucolor)
2008-01-05 11:49 ` Robert Millan
@ 2008-01-05 12:03 ` Yoshinori K. Okuji
2008-01-05 12:09 ` Robert Millan
0 siblings, 1 reply; 24+ messages in thread
From: Yoshinori K. Okuji @ 2008-01-05 12:03 UTC (permalink / raw)
To: The development of GRUB 2
On Saturday 05 January 2008 12:49, Robert Millan wrote:
> On Sat, Jan 05, 2008 at 02:34:38AM +0100, Yoshinori K. Okuji wrote:
> > On Friday 04 January 2008 09:02, Robert Millan wrote:
> > > On Thu, Jan 03, 2008 at 06:04:59PM +0200, Vesa Jääskeläinen wrote:
> > > > About new context:
> > > >
> > > > Shouldn't new context have clone of it's parent contexts settings?
> > >
> > > I wouldn't want to change that without having some input from whoever
> > > designed (or understands) grub_env_export(). There's probably a reason
> > > for it, although I can't see it.
> >
> > It is analogous to bash. If you invoke another bash from bash, that won't
> > inherit variables, unless they are exported.
>
> It's not exactly analogous. bash doesn't commonly use variable hooks (if
> they even exist).
It has internally.
> Anyway, I wouldn't want to spend much time discussing this. I assume my
> proposed change (propagating read/write hooks for global/exported
> variables) sounds fine?
Yes.
Okuji
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: opening new context (was: [PATCH] allow user-configurable menucolor)
2008-01-05 12:03 ` Yoshinori K. Okuji
@ 2008-01-05 12:09 ` Robert Millan
0 siblings, 0 replies; 24+ messages in thread
From: Robert Millan @ 2008-01-05 12:09 UTC (permalink / raw)
To: The development of GRUB 2
On Sat, Jan 05, 2008 at 01:03:41PM +0100, Yoshinori K. Okuji wrote:
> > Anyway, I wouldn't want to spend much time discussing this. I assume my
> > proposed change (propagating read/write hooks for global/exported
> > variables) sounds fine?
>
> Yes.
Ok, committed.
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-03 15:35 ` Robert Millan
2008-01-03 16:04 ` Vesa Jääskeläinen
@ 2008-01-05 21:45 ` Jeroen Dekkers
2008-01-05 23:42 ` Robert Millan
1 sibling, 1 reply; 24+ messages in thread
From: Jeroen Dekkers @ 2008-01-05 21:45 UTC (permalink / raw)
To: The development of GRUB 2
At Thu, 3 Jan 2008 16:35:33 +0100,
Robert Millan wrote:
> diff -x '*~' -x '*.mk' -Nurp grub2/include/grub/normal.h grub2.color/include/grub/normal.h
> --- grub2/include/grub/normal.h 2007-07-22 01:32:22.000000000 +0200
> +++ grub2.color/include/grub/normal.h 2008-01-03 16:12:53.000000000 +0100
> @@ -1,7 +1,7 @@
> /* normal.h - prototypes for the normal mode */
> /*
> * GRUB -- GRand Unified Bootloader
> - * Copyright (C) 2002,2003,2005,2006,2007 Free Software Foundation, Inc.
> + * Copyright (C) 2002,2003,2005,2006,2007,2008 Free Software Foundation, Inc.
> *
> * GRUB is free software: you can redistribute it and/or modify
> * it under the terms of the GNU General Public License as published by
> @@ -154,6 +154,9 @@ grub_err_t grub_normal_print_device_info
> grub_err_t grub_normal_menu_addentry (const char *title,
> struct grub_script *script,
> const char *sourcecode);
> +char *grub_env_write_color_normal (struct grub_env_var *var, const char *val);
> +char *grub_env_write_color_highlight (struct grub_env_var *var, const char *val);
> +void grub_wait_after_message (void);
You should actually also include grub/env.h if you use struct
grub_env_var in the prototypes. I've fixed that in CVS.
Jeroen Dekkers
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-05 21:45 ` [PATCH] allow user-configurable menucolor Jeroen Dekkers
@ 2008-01-05 23:42 ` Robert Millan
2008-01-06 11:33 ` Jeroen Dekkers
0 siblings, 1 reply; 24+ messages in thread
From: Robert Millan @ 2008-01-05 23:42 UTC (permalink / raw)
To: The development of GRUB 2
On Sat, Jan 05, 2008 at 10:45:46PM +0100, Jeroen Dekkers wrote:
> At Thu, 3 Jan 2008 16:35:33 +0100,
> Robert Millan wrote:
> > diff -x '*~' -x '*.mk' -Nurp grub2/include/grub/normal.h grub2.color/include/grub/normal.h
> > --- grub2/include/grub/normal.h 2007-07-22 01:32:22.000000000 +0200
> > +++ grub2.color/include/grub/normal.h 2008-01-03 16:12:53.000000000 +0100
> > @@ -1,7 +1,7 @@
> > /* normal.h - prototypes for the normal mode */
> > /*
> > * GRUB -- GRand Unified Bootloader
> > - * Copyright (C) 2002,2003,2005,2006,2007 Free Software Foundation, Inc.
> > + * Copyright (C) 2002,2003,2005,2006,2007,2008 Free Software Foundation, Inc.
> > *
> > * GRUB is free software: you can redistribute it and/or modify
> > * it under the terms of the GNU General Public License as published by
> > @@ -154,6 +154,9 @@ grub_err_t grub_normal_print_device_info
> > grub_err_t grub_normal_menu_addentry (const char *title,
> > struct grub_script *script,
> > const char *sourcecode);
> > +char *grub_env_write_color_normal (struct grub_env_var *var, const char *val);
> > +char *grub_env_write_color_highlight (struct grub_env_var *var, const char *val);
> > +void grub_wait_after_message (void);
>
> You should actually also include grub/env.h if you use struct
> grub_env_var in the prototypes.
Uhm, I included it in normal/color.c to satisfy the dependencies:
normal/color.c:#include <grub/env.h>
normal/color.c:grub_env_write_color_normal (struct grub_env_var *var __attribute__ ((unused)),
normal/color.c:grub_env_write_color_highlight (struct grub_env_var *var __attribute__ ((unused)),
but your idea seems better. I suppose we can remove it from there now?
> I've fixed that in CVS.
Thanks.
Btw, nice to see you around here. Do you have any news about the CD-ROM
GSoC ? I looked at the tarball from google.com, but CD access seems
unfinished (I couldn't access the CD neither in qemu nor in real hw).
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-05 23:42 ` Robert Millan
@ 2008-01-06 11:33 ` Jeroen Dekkers
2008-01-06 12:54 ` Robert Millan
0 siblings, 1 reply; 24+ messages in thread
From: Jeroen Dekkers @ 2008-01-06 11:33 UTC (permalink / raw)
To: The development of GRUB 2
At Sun, 6 Jan 2008 00:42:40 +0100,
Robert Millan wrote:
>
> On Sat, Jan 05, 2008 at 10:45:46PM +0100, Jeroen Dekkers wrote:
> > You should actually also include grub/env.h if you use struct
> > grub_env_var in the prototypes.
>
> Uhm, I included it in normal/color.c to satisfy the dependencies:
>
> normal/color.c:#include <grub/env.h>
> normal/color.c:grub_env_write_color_normal (struct grub_env_var *var __attribute__ ((unused)),
> normal/color.c:grub_env_write_color_highlight (struct grub_env_var *var __attribute__ ((unused)),
>
> but your idea seems better. I suppose we can remove it from there now?
Yes, but normal.h is included by lots of other files that don't always
include env.h before they include normal.h.
> Btw, nice to see you around here. Do you have any news about the CD-ROM
> GSoC ? I looked at the tarball from google.com, but CD access seems
> unfinished (I couldn't access the CD neither in qemu nor in real hw).
It should work, but I didn't have the time to test it at the end of
the summer. I guess you can simply mail Alex if you have any
questions...
Jeroen Dekkers
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-06 11:33 ` Jeroen Dekkers
@ 2008-01-06 12:54 ` Robert Millan
0 siblings, 0 replies; 24+ messages in thread
From: Robert Millan @ 2008-01-06 12:54 UTC (permalink / raw)
To: The development of GRUB 2
On Sun, Jan 06, 2008 at 12:33:29PM +0100, Jeroen Dekkers wrote:
> > Btw, nice to see you around here. Do you have any news about the CD-ROM
> > GSoC ? I looked at the tarball from google.com, but CD access seems
> > unfinished (I couldn't access the CD neither in qemu nor in real hw).
>
> It should work, but I didn't have the time to test it at the end of
> the summer. I guess you can simply mail Alex if you have any
> questions...
I did. Either my mail was lost or he's too busy to reply :-(
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] allow user-configurable menucolor
2008-01-03 16:38 ` Robert Millan
@ 2008-01-23 8:56 ` Marco Gerards
0 siblings, 0 replies; 24+ messages in thread
From: Marco Gerards @ 2008-01-23 8:56 UTC (permalink / raw)
To: The development of GRUB 2
Robert Millan <rmh@aybabtu.com> writes:
> On Thu, Jan 03, 2008 at 06:04:59PM +0200, Vesa Jääskeläinen wrote:
>>
>> About error handling:
>>
>> Why not call grub_error() with error message and just return from
>> callback, and let prompt handle error processing (grub_print_error()).
>> This would keep error reporting centralized.
>
> One thing I don't like about grub_error() is that I never know what value to
> pick for the first parameter. I find this confusing :-/
You can add errors to the enum.
--
Marco
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2008-01-23 8:55 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-01 12:47 [PATCH] allow user-configurable menucolor Robert Millan
2008-01-01 13:14 ` Vesa Jääskeläinen
2008-01-01 13:40 ` Robert Millan
2008-01-01 13:51 ` Vesa Jääskeläinen
2008-01-01 14:45 ` Robert Millan
2008-01-01 17:38 ` Robert Millan
2008-01-02 21:48 ` Robert Millan
2008-01-02 23:55 ` Yoshinori K. Okuji
2008-01-03 0:56 ` Robert Millan
2008-01-02 23:42 ` Yoshinori K. Okuji
2008-01-03 1:04 ` Robert Millan
2008-01-03 15:35 ` Robert Millan
2008-01-03 16:04 ` Vesa Jääskeläinen
2008-01-03 16:38 ` Robert Millan
2008-01-23 8:56 ` Marco Gerards
2008-01-04 8:02 ` opening new context (was: [PATCH] allow user-configurable menucolor) Robert Millan
2008-01-05 1:34 ` Yoshinori K. Okuji
2008-01-05 11:49 ` Robert Millan
2008-01-05 12:03 ` Yoshinori K. Okuji
2008-01-05 12:09 ` Robert Millan
2008-01-05 21:45 ` [PATCH] allow user-configurable menucolor Jeroen Dekkers
2008-01-05 23:42 ` Robert Millan
2008-01-06 11:33 ` Jeroen Dekkers
2008-01-06 12:54 ` Robert Millan
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.