[gdb/tui] Allow command window of 1 or 2 lines
commit6697fa28bb6ee610323ea10cb815bac85c6d8184
authorTom de Vries <tdevries@suse.de>
Wed, 22 Nov 2023 18:07:47 +0000 (22 19:07 +0100)
committerTom de Vries <tdevries@suse.de>
Wed, 22 Nov 2023 18:07:47 +0000 (22 19:07 +0100)
tree5a5eb72dcfd2adb6e4802b1f81bbc67890ec2260
parente8c3dafa5f529e85d7179441be7d039ee9e062bc
[gdb/tui] Allow command window of 1 or 2 lines

When starting TUI in a terminal with 2 lines (likewise with 1 line):
...
$ echo $LINES
2
$ gdb -q -tui
...
we run into this assert in tui_apply_current_layout:
...
  /* This should always be made visible by a layout.  */
  gdb_assert (TUI_CMD_WIN != nullptr);
...

The problem is that for the command window:
- the minimum height is 3 (the default), but
- the maximum height is only 2 because there are only 2 lines.

This discrepancy eventually leads to a call to newwin in make_window with:
...
(gdb) p height
$1 = 3
(gdb) p width
$2 = 66
(gdb) p y
$3 = -1
(gdb) p x
$4 = 0
(gdb)
...
which results in a nullptr, which eventually triggers the assert.

The easiest way to fix this is to change the minimum height of the command
window to 1.  However, that would also change behaviour for the case that the
screen size is 3 lines or more.  For instance, in gdb.tui/winheight.exp the
number of lines in the terminal is 24, and the test-case checks that the user
cannot increase the source window height to the point that the command window
height would be less than 3.

Fix this by calculating the minimum height of the command window as follows:
- the default (3) if max_height () allows it, and
- max_height () otherwise.

Tested on x86_64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
PR tui/31044
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31044
gdb/testsuite/gdb.tui/small-term.exp [new file with mode: 0644]
gdb/tui/tui-command.h