From 1ff3ecb5b08b40686b0e03cf79c4233c5bf99396 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Tue, 5 Jun 2018 12:44:45 -0400 Subject: fixup statusline --- go/src/lib/statusline/log.go | 21 +++++++++++++++++++++ go/src/lib/statusline/ratelimit.go | 18 ++++++++++++------ go/src/lib/statusline/statusline.go | 27 --------------------------- go/src/lib/statusline/tty.go | 28 ++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 33 deletions(-) create mode 100644 go/src/lib/statusline/log.go create mode 100644 go/src/lib/statusline/tty.go (limited to 'go/src/lib') diff --git a/go/src/lib/statusline/log.go b/go/src/lib/statusline/log.go new file mode 100644 index 0000000..2026cd4 --- /dev/null +++ b/go/src/lib/statusline/log.go @@ -0,0 +1,21 @@ +package statusline + +import ( + "fmt" + "io" +) + +type log struct { + out io.Writer +} + +func Log(out io.Writer) StatusLine { + return &log{out: out} +} + +func (sl *log) Put(line string) { + fmt.Fprintln(sl.out, line) +} + +func (sl *log) End(keep bool) { +} diff --git a/go/src/lib/statusline/ratelimit.go b/go/src/lib/statusline/ratelimit.go index 970f8e5..087466d 100644 --- a/go/src/lib/statusline/ratelimit.go +++ b/go/src/lib/statusline/ratelimit.go @@ -20,19 +20,25 @@ func RateLimit(sl StatusLine, d time.Duration) StatusLine { ticker := time.NewTicker(d) var oldLine string var newLine string - dirty := false + first := true for { select { case <-ticker.C: - if dirty && newLine != oldLine { + if newLine != oldLine { sl.Put(newLine) + oldLine = newLine } - dirty = false case line := <-ret.lines: - newLine = line - dirty = true + if first { + first = false + oldLine = line + newLine = line + sl.Put(line) + } else { + newLine = line + } case keep := <-ret.end1: - if keep && dirty && newLine != oldLine { + if newLine != oldLine { sl.Put(newLine) } sl.End(keep) diff --git a/go/src/lib/statusline/statusline.go b/go/src/lib/statusline/statusline.go index bedf952..03b64bd 100644 --- a/go/src/lib/statusline/statusline.go +++ b/go/src/lib/statusline/statusline.go @@ -1,33 +1,6 @@ package statusline -import ( - "fmt" - "io" -) - type StatusLine interface { Put(line string) End(keep bool) } - -type statusLine struct { - out io.Writer - prevLen int -} - -func New(out io.Writer) StatusLine { - return &statusLine{out: out} -} - -func (sl *statusLine) Put(line string) { - fmt.Fprintf(sl.out, "\r%-[1]*[2]s", sl.prevLen, line) - sl.prevLen = len(line) -} - -func (sl *statusLine) End(keep bool) { - if keep { - io.WriteString(sl.out, "\n") - } else { - fmt.Fprintf(sl.out, "\r%-[1]*[2]s\r", sl.prevLen, "") - } -} diff --git a/go/src/lib/statusline/tty.go b/go/src/lib/statusline/tty.go new file mode 100644 index 0000000..72bbb57 --- /dev/null +++ b/go/src/lib/statusline/tty.go @@ -0,0 +1,28 @@ +package statusline + +import ( + "fmt" + "io" +) + +type statusLine struct { + out io.Writer + prevLen int +} + +func TTY(out io.Writer) StatusLine { + return &statusLine{out: out} +} + +func (sl *statusLine) Put(line string) { + fmt.Fprintf(sl.out, "\r%-[1]*[2]s", sl.prevLen, line) + sl.prevLen = len(line) +} + +func (sl *statusLine) End(keep bool) { + if keep { + io.WriteString(sl.out, "\n") + } else { + fmt.Fprintf(sl.out, "\r%-[1]*[2]s\r", sl.prevLen, "") + } +} -- cgit v1.2.3-2-g168b