=== modified file 'ChangeLog'
--- ChangeLog 2010-01-01 12:33:45 +0000
+++ ChangeLog 2010-01-01 17:08:20 +0000
@@ -1,3 +1,14 @@
+2010-01-01 Carles Pina i Estany
+
+ * commands/help.c: Include `grub/mm.h' and `grub/normal.h'.
+ (grub_cmd_help): Print the cmd->name before the cmd->summary. Cut the
+ string using string width.
+ * normal/menu_text.c (grub_print_message_indented): Use
+ grub_print_spaces and not print_spaces.
+ (print_timeout): Likewise.
+ (print_spaces): Move to...
+ * include/grub/term.h: ... here. Change the name to grub_print_spaces.
+
2010-01-01 Robert Millan
Import from Gnulib.
=== modified file 'commands/help.c'
--- commands/help.c 2009-12-25 23:50:59 +0000
+++ commands/help.c 2010-01-01 17:06:21 +0000
@@ -22,6 +22,8 @@
#include
#include
#include
+#include
+#include
static grub_err_t
grub_cmd_help (grub_extcmd_t ext __attribute__ ((unused)), int argc,
@@ -38,19 +40,42 @@ grub_cmd_help (grub_extcmd_t ext __attri
if ((cmd->prio & GRUB_PRIO_LIST_FLAG_ACTIVE) &&
(cmd->flags & GRUB_COMMAND_FLAG_CMDLINE))
{
- char description[GRUB_TERM_WIDTH / 2];
- const char* summary_translated = _(cmd->summary);
- int desclen = grub_strlen (summary_translated);
-
- /* Make a string with a length of GRUB_TERM_WIDTH / 2 - 1 filled
- with the description followed by spaces. */
- grub_memset (description, ' ', GRUB_TERM_WIDTH / 2 - 1);
- description[GRUB_TERM_WIDTH / 2 - 1] = '\0';
- grub_memcpy (description, summary_translated,
- (desclen < GRUB_TERM_WIDTH / 2 - 1
- ? desclen : GRUB_TERM_WIDTH / 2 - 1));
+ char *command_help;
+ const char *summary_translated = _(cmd->summary);
+ grub_uint32_t *unicode_command_help;
+ grub_uint32_t *unicode_last_position;
+
+ command_help = grub_malloc (grub_strlen (cmd->name) +
+ sizeof (" ") - 1 +
+ grub_strlen (summary_translated));
+
+ grub_sprintf(command_help, "%s %s", cmd->name, summary_translated);
+
+ grub_utf8_to_ucs4_alloc (command_help, &unicode_command_help,
+ &unicode_last_position);
+
+ while (grub_getstringwidth (unicode_command_help,
+ unicode_last_position) >
+ (GRUB_TERM_WIDTH / 2) - 2)
+ {
+ unicode_last_position--;
+ }
- grub_printf ("%s%s", description, (cnt++) % 2 ? "\n" : " ");
+ grub_print_ucs4 (unicode_command_help, unicode_last_position);
+
+ if ((cnt++) % 2)
+ {
+ grub_putchar ('\n');
+ }
+ else
+ {
+ grub_print_spaces (GRUB_TERM_WIDTH / 2 -
+ grub_getstringwidth (unicode_command_help,
+ unicode_last_position));
+ }
+
+ grub_free (command_help);
+ grub_free (unicode_command_help);
}
return 0;
}
=== modified file 'include/grub/term.h'
--- include/grub/term.h 2009-08-28 13:20:34 +0000
+++ include/grub/term.h 2010-01-01 17:04:10 +0000
@@ -299,6 +299,14 @@ int EXPORT_FUNC(grub_getcursor) (void);
void EXPORT_FUNC(grub_refresh) (void);
void EXPORT_FUNC(grub_set_more) (int onoff);
+static inline void
+grub_print_spaces (int number_spaces)
+{
+ while (--number_spaces >= 0)
+ grub_putchar (' ');
+}
+
+
/* For convenience. */
#define GRUB_TERM_ASCII_CHAR(c) ((c) & 0xff)
=== modified file 'normal/menu_text.c'
--- normal/menu_text.c 2009-12-27 21:32:52 +0000
+++ normal/menu_text.c 2010-01-01 15:48:11 +0000
@@ -45,14 +45,6 @@ grub_wait_after_message (void)
grub_putchar ('\n');
}
-static void
-print_spaces (int number_spaces)
-{
- int i;
- for (i = 0; i < number_spaces; i++)
- grub_putchar (' ');
-}
-
void
grub_print_ucs4 (const grub_uint32_t * str,
const grub_uint32_t * last_position)
@@ -149,7 +141,7 @@ grub_print_message_indented (const char
(grub_uint32_t *) last_position : next_new_line + line_len;
}
- print_spaces (margin_left);
+ grub_print_spaces (margin_left);
grub_print_ucs4 (current_position, next_new_line);
next_new_line++;
@@ -405,7 +397,7 @@ print_timeout (int timeout, int offset)
int posx;
posx = grub_getxy() >> 8;
- print_spaces (GRUB_TERM_WIDTH - posx - 1);
+ grub_print_spaces (GRUB_TERM_WIDTH - posx - 1);
grub_gotoxy (GRUB_TERM_CURSOR_X, GRUB_TERM_FIRST_ENTRY_Y + offset);
grub_refresh ();
@@ -495,7 +487,7 @@ run_menu (grub_menu_t menu, int nested,
if (timeout >= 0)
{
grub_gotoxy (0, GRUB_TERM_HEIGHT - 3);
- print_spaces (GRUB_TERM_WIDTH - 1);
+ grub_print_spaces (GRUB_TERM_WIDTH - 1);
grub_env_unset ("timeout");
grub_env_unset ("fallback");