Default to the status table output

For smart terminals, default to using the status table, using 1/4 of the
terminal height (with a min of 1 and a max of 10).

This behavior can still be overriden to a specific height with
SOONG_UI_TABLE_HEIGHT, and turned off by setting SOONG_UI_TABLE_HEIGHT
to 0.

Test: m   <adjust terminal height, see it shrink when it gets too short>
Test: SOONG_UI_TABLE_HEIGHT=20 m
Test: SOONG_UI_TABLE_HEIGHT=0 m
Change-Id: I224348a29a6e07f168c92cf5514a94bd27e32618
This commit is contained in:
Dan Willemsen
2019-07-30 13:44:03 -07:00
parent cadffcdd66
commit 1eee154c3b

View File

@@ -59,21 +59,24 @@ type smartStatusOutput struct {
// current build status similarly to Ninja's built-in terminal
// output.
func NewSmartStatusOutput(w io.Writer, formatter formatter) status.StatusOutput {
tableHeight, _ := strconv.Atoi(os.Getenv(tableHeightEnVar))
s := &smartStatusOutput{
writer: w,
formatter: formatter,
haveBlankLine: true,
tableMode: tableHeight > 0,
requestedTableHeight: tableHeight,
tableMode: true,
done: make(chan bool),
sigwinch: make(chan os.Signal),
}
if env, ok := os.LookupEnv(tableHeightEnVar); ok {
h, _ := strconv.Atoi(env)
s.tableMode = h > 0
s.requestedTableHeight = h
}
s.updateTermSize()
if s.tableMode {
@@ -297,6 +300,14 @@ func (s *smartStatusOutput) updateTermSize() {
if s.tableMode {
tableHeight := s.requestedTableHeight
if tableHeight == 0 {
tableHeight = s.termHeight / 4
if tableHeight < 1 {
tableHeight = 1
} else if tableHeight > 10 {
tableHeight = 10
}
}
if tableHeight > s.termHeight-1 {
tableHeight = s.termHeight - 1
}