Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 60e8b47a authored by Colin Cross's avatar Colin Cross Committed by android-build-merger
Browse files

Merge "Color long running durations when using action table output"

am: bbeb2c1a

Change-Id: Ica426bcf82ccfeabe0d0472e20de3978207fc0a6
parents 7afeb9a4 bbeb2c1a
Loading
Loading
Loading
Loading
+24 −9
Original line number Diff line number Diff line
@@ -225,9 +225,7 @@ func (s *smartStatusOutput) statusLine(str string) {

	// Limit line width to the terminal width, otherwise we'll wrap onto
	// another line and we won't delete the previous line.
	if s.termWidth > 0 {
		str = s.elide(str)
	}
	str = elide(str, s.termWidth)

	// Move to the beginning on the line, turn on bold, print the output,
	// turn off bold, then clear the rest of the line.
@@ -237,11 +235,11 @@ func (s *smartStatusOutput) statusLine(str string) {
	s.haveBlankLine = false
}

func (s *smartStatusOutput) elide(str string) string {
	if len(str) > s.termWidth {
func elide(str string, width int) string {
	if width > 0 && len(str) > width {
		// TODO: Just do a max. Ninja elides the middle, but that's
		// more complicated and these lines aren't that important.
		str = str[:s.termWidth]
		str = str[:width]
	}

	return str
@@ -344,9 +342,18 @@ func (s *smartStatusOutput) actionTable() {
			desc = runningAction.action.Command
		}

		str := fmt.Sprintf("   %2d:%02d %s", seconds/60, seconds%60, desc)
		str = s.elide(str)
		fmt.Fprint(s.writer, str, ansi.clearToEndOfLine())
		color := ""
		if seconds >= 60 {
			color = ansi.red() + ansi.bold()
		} else if seconds >= 30 {
			color = ansi.yellow() + ansi.bold()
		}

		durationStr := fmt.Sprintf("   %2d:%02d ", seconds/60, seconds%60)
		desc = elide(desc, s.termWidth-len(durationStr))
		durationStr = color + durationStr + ansi.regular()

		fmt.Fprint(s.writer, durationStr, desc, ansi.clearToEndOfLine())
		if tableLine < s.tableHeight-1 {
			fmt.Fprint(s.writer, "\n")
		}
@@ -387,6 +394,14 @@ func (ansiImpl) resetScrollingMargins() string {
	return fmt.Sprintf("\x1b[r")
}

func (ansiImpl) red() string {
	return "\x1b[31m"
}

func (ansiImpl) yellow() string {
	return "\x1b[33m"
}

func (ansiImpl) bold() string {
	return "\x1b[1m"
}