2010-03-01 Vladimir Serbinenko <phcoder@gmail.com>
Wait for user entry basing on presence of output rather than on errors. * include/grub/normal.h (grub_normal_get_line_counter): New proto. (grub_install_newline_hook): Likewise. * normal/main.c (GRUB_MOD_INIT): Call grub_install_newline_hook. * normal/menu.c (show_menu): Check line_counter to determine presence of output. * normal/term.c (grub_normal_line_counter): New variable. (grub_normal_get_line_counter): New function. (grub_install_newline_hook): Likewise.
This commit is contained in:
parent
5382b1e4a8
commit
c6f2fe52f1
5 changed files with 38 additions and 7 deletions
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
|||
2010-03-01 Vladimir Serbinenko <phcoder@gmail.com>
|
||||
|
||||
Wait for user entry basing on presence of output rather than on errors.
|
||||
|
||||
* include/grub/normal.h (grub_normal_get_line_counter): New proto.
|
||||
(grub_install_newline_hook): Likewise.
|
||||
* normal/main.c (GRUB_MOD_INIT): Call grub_install_newline_hook.
|
||||
* normal/menu.c (show_menu): Check line_counter to determine presence
|
||||
of output.
|
||||
* normal/term.c (grub_normal_line_counter): New variable.
|
||||
(grub_normal_get_line_counter): New function.
|
||||
(grub_install_newline_hook): Likewise.
|
||||
|
||||
2010-03-01 Vladimir Serbinenko <phcoder@gmail.com>
|
||||
|
||||
* commands/cat.c (grub_cmd_cat): Propagate grub_gzfile_open error.
|
||||
|
|
|
@ -110,4 +110,7 @@ void read_terminal_list (void);
|
|||
|
||||
void grub_set_more (int onoff);
|
||||
|
||||
int grub_normal_get_line_counter (void);
|
||||
void grub_install_newline_hook (void);
|
||||
|
||||
#endif /* ! GRUB_NORMAL_HEADER */
|
||||
|
|
|
@ -654,6 +654,7 @@ GRUB_MOD_INIT(normal)
|
|||
|
||||
grub_set_history (GRUB_DEFAULT_HISTORY_SIZE);
|
||||
|
||||
grub_install_newline_hook ();
|
||||
grub_register_variable_hook ("pager", 0, grub_env_write_pager);
|
||||
|
||||
/* Register a command "normal" for the rescue mode. */
|
||||
|
|
|
@ -559,16 +559,16 @@ show_menu (grub_menu_t menu, int nested)
|
|||
}
|
||||
else
|
||||
{
|
||||
int lines_before = grub_normal_get_line_counter ();
|
||||
grub_errno = GRUB_ERR_NONE;
|
||||
grub_menu_execute_entry (e);
|
||||
if (grub_errno != GRUB_ERR_NONE)
|
||||
{
|
||||
grub_print_error ();
|
||||
grub_errno = GRUB_ERR_NONE;
|
||||
|
||||
if (lines_before != grub_normal_get_line_counter ())
|
||||
grub_wait_after_message ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
|
|
@ -30,6 +30,14 @@ static unsigned grub_more_lines;
|
|||
/* If the more pager is active. */
|
||||
static int grub_more;
|
||||
|
||||
static int grub_normal_line_counter = 0;
|
||||
|
||||
int
|
||||
grub_normal_get_line_counter (void)
|
||||
{
|
||||
return grub_normal_line_counter;
|
||||
}
|
||||
|
||||
static void
|
||||
process_newline (void)
|
||||
{
|
||||
|
@ -41,6 +49,8 @@ process_newline (void)
|
|||
height = grub_term_height (cur);
|
||||
grub_more_lines++;
|
||||
|
||||
grub_normal_line_counter++;
|
||||
|
||||
if (grub_more && grub_more_lines >= height - 1)
|
||||
{
|
||||
char key;
|
||||
|
@ -76,6 +86,11 @@ grub_set_more (int onoff)
|
|||
grub_more--;
|
||||
|
||||
grub_more_lines = 0;
|
||||
}
|
||||
|
||||
void
|
||||
grub_install_newline_hook (void)
|
||||
{
|
||||
grub_newline_hook = process_newline;
|
||||
}
|
||||
|
||||
|
@ -150,7 +165,6 @@ grub_terminal_autoload_free (void)
|
|||
grub_term_output_autoload = NULL;
|
||||
}
|
||||
|
||||
|
||||
/* Read the file terminal.lst for auto-loading. */
|
||||
void
|
||||
read_terminal_list (void)
|
||||
|
|
Loading…
Reference in a new issue