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>
+
+ 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.
void grub_set_more (int onoff);
+int grub_normal_get_line_counter (void);
+void grub_install_newline_hook (void);
+
#endif /* ! GRUB_NORMAL_HEADER */
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. */
}
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;
- grub_wait_after_message ();
- }
+ grub_print_error ();
+ grub_errno = GRUB_ERR_NONE;
+
+ if (lines_before != grub_normal_get_line_counter ())
+ grub_wait_after_message ();
}
}
/* 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)
{
height = grub_term_height (cur);
grub_more_lines++;
+ grub_normal_line_counter++;
+
if (grub_more && grub_more_lines >= height - 1)
{
char key;
grub_more--;
grub_more_lines = 0;
+}
+
+void
+grub_install_newline_hook (void)
+{
grub_newline_hook = process_newline;
}
grub_term_output_autoload = NULL;
}
-
/* Read the file terminal.lst for auto-loading. */
void
read_terminal_list (void)