Fix truncation of TUI command history

If we submit a command while the prompt cursor is somewhere other than
at the end of the command line, the command line gets truncated as the
command window gets shifted one line up.  This happens because we fail
to properly move the cursor to the end of the command line before
transmitting the newline to ncurses.  We need to move the cursor because
when ncurses outputs a newline it truncates any text that appears
past the end of the cursor.

The fix is generic enough to work properly even in multi-line secondary
prompts like the quit prompt.

gdb/ChangeLog:

	* tui/tui-io.c (tui_getc): Move cursor to the end of the command
	line before printing a newline.
This commit is contained in:
Patrick Palka 2015-02-10 18:44:56 -05:00
parent 084910afdd
commit d908067812
2 changed files with 16 additions and 4 deletions

View File

@ -1,8 +1,13 @@
2015-02-11 Patrick Palka <patrick@parcs.ath.cx>
* tui/tui-io.c (tui_getc): Move cursor to the end of the command
line before printing a newline.
2015-02-11 Mark Wielaard <mjw@redhat.com>
* utils.c (producer_is_gcc): Return true or false.
2015-02-04 Mark Wielaard <mjw@redhat.com>
2015-02-10 Mark Wielaard <mjw@redhat.com>
* utils.h (producer_is_gcc): Change return type to bool. Add major
argument.

View File

@ -627,9 +627,16 @@ tui_getc (FILE *fp)
}
else
{
wmove (w, TUI_CMD_WIN->detail.command_info.cur_line,
TUI_CMD_WIN->detail.command_info.curch);
waddch (w, ch);
/* Move cursor to the end of the command line before emitting the
newline. We need to do so because when ncurses outputs a newline
it truncates any text that appears past the end of the cursor. */
int px = TUI_CMD_WIN->detail.command_info.curch;
int py = TUI_CMD_WIN->detail.command_info.cur_line;
px += rl_end - rl_point;
py += px / TUI_CMD_WIN->generic.width;
px %= TUI_CMD_WIN->generic.width;
wmove (w, py, px);
waddch (w, ch);
}
}