Skip to content
  • Patrick Palka's avatar
    Consolidate the custom TUI query hook with the default query hook · 588dcc3e
    Patrick Palka authored
    This patch primarily rewrites defaulted_query() to use
    gdb_readline_wrapper() to prompt the user for input, like
    prompt_for_continue() does.  The motivation for this rewrite is to be
    able to reuse the default query hook in TUI, obviating the need for a
    custom TUI query hook.
    
    However, having TUI use the default query mechanism exposed a couple of
    latent bugs in tui_redisplay_readline() related to the handling of
    multi-line prompts, in particular GDB's multi-line quit prompt.
    
    The first issue is an off-by-one error in the calculation of the height
    of the prompt.  The check in question should be col <= prev_col, not c <
    prev_col, to properly account for the case when a prompt contains
    multiple consecutive newlines.  Failing to do so makes TUI have the
    wrong idea of the vertical height of the prompt.  This patch fixes the
    column check.
    
    The second issue is that cur_line does not get updated to reflect the
    cursor position if the user's prompt cursor is at the end of the prompt
    (i.e. if rl_point == rl_end).  cur_line only gets updated if rl_point
    lies between 0..rl_end-1 because that is the bounds of the for loop
    responsible for updating cur_line.  This patch changes the loop's bounds
    to 0..rl_end so that cur_line always gets updated.
    
    With these two bug fixes out of the way, the default query mechanism
    works well in TUI even with multi-line prompts like GDB's quit prompt.
    
    gdb/ChangeLog:
    
    	* utils.c (defaulted_query): Rewrite to use gdb_readline_wrapper
    	to prompt for input.
    	* tui/tui-hooks.c (tui_query_hook): Remove.
    	(tui_install_hooks): Don't set deprecated_query_hook.
    	* tui/tui-io.c (tui_redisplay_readline): Fix off-by-one error in
    	height calculation.  Always update the command window's cur_line.
    588dcc3e