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>
|
2010-03-01 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* commands/cat.c (grub_cmd_cat): Propagate grub_gzfile_open error.
|
* 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);
|
void grub_set_more (int onoff);
|
||||||
|
|
||||||
|
int grub_normal_get_line_counter (void);
|
||||||
|
void grub_install_newline_hook (void);
|
||||||
|
|
||||||
#endif /* ! GRUB_NORMAL_HEADER */
|
#endif /* ! GRUB_NORMAL_HEADER */
|
||||||
|
|
|
@ -654,6 +654,7 @@ GRUB_MOD_INIT(normal)
|
||||||
|
|
||||||
grub_set_history (GRUB_DEFAULT_HISTORY_SIZE);
|
grub_set_history (GRUB_DEFAULT_HISTORY_SIZE);
|
||||||
|
|
||||||
|
grub_install_newline_hook ();
|
||||||
grub_register_variable_hook ("pager", 0, grub_env_write_pager);
|
grub_register_variable_hook ("pager", 0, grub_env_write_pager);
|
||||||
|
|
||||||
/* Register a command "normal" for the rescue mode. */
|
/* Register a command "normal" for the rescue mode. */
|
||||||
|
|
|
@ -559,16 +559,16 @@ show_menu (grub_menu_t menu, int nested)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
int lines_before = grub_normal_get_line_counter ();
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
grub_menu_execute_entry (e);
|
grub_menu_execute_entry (e);
|
||||||
if (grub_errno != GRUB_ERR_NONE)
|
|
||||||
{
|
|
||||||
grub_print_error ();
|
grub_print_error ();
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
|
||||||
|
if (lines_before != grub_normal_get_line_counter ())
|
||||||
grub_wait_after_message ();
|
grub_wait_after_message ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,14 @@ static unsigned grub_more_lines;
|
||||||
/* If the more pager is active. */
|
/* If the more pager is active. */
|
||||||
static int grub_more;
|
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
|
static void
|
||||||
process_newline (void)
|
process_newline (void)
|
||||||
{
|
{
|
||||||
|
@ -41,6 +49,8 @@ process_newline (void)
|
||||||
height = grub_term_height (cur);
|
height = grub_term_height (cur);
|
||||||
grub_more_lines++;
|
grub_more_lines++;
|
||||||
|
|
||||||
|
grub_normal_line_counter++;
|
||||||
|
|
||||||
if (grub_more && grub_more_lines >= height - 1)
|
if (grub_more && grub_more_lines >= height - 1)
|
||||||
{
|
{
|
||||||
char key;
|
char key;
|
||||||
|
@ -76,6 +86,11 @@ grub_set_more (int onoff)
|
||||||
grub_more--;
|
grub_more--;
|
||||||
|
|
||||||
grub_more_lines = 0;
|
grub_more_lines = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
grub_install_newline_hook (void)
|
||||||
|
{
|
||||||
grub_newline_hook = process_newline;
|
grub_newline_hook = process_newline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,7 +165,6 @@ grub_terminal_autoload_free (void)
|
||||||
grub_term_output_autoload = NULL;
|
grub_term_output_autoload = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Read the file terminal.lst for auto-loading. */
|
/* Read the file terminal.lst for auto-loading. */
|
||||||
void
|
void
|
||||||
read_terminal_list (void)
|
read_terminal_list (void)
|
||||||
|
|
Loading…
Reference in a new issue