diff options
-rw-r--r-- | ui/terminal/smart_status.go | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/ui/terminal/smart_status.go b/ui/terminal/smart_status.go index 9638cdf7..8659d4dd 100644 --- a/ui/terminal/smart_status.go +++ b/ui/terminal/smart_status.go @@ -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" } |