summaryrefslogtreecommitdiff
path: root/go/src/lib/statusline
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@beefcake.parabola.nu>2018-06-05 12:44:45 -0400
committerLuke Shumaker <lukeshu@beefcake.parabola.nu>2018-06-05 12:44:45 -0400
commit1ff3ecb5b08b40686b0e03cf79c4233c5bf99396 (patch)
tree833b3f6ff19f0b5ae8314a850e9c3b7cc0329540 /go/src/lib/statusline
parent8caefed85ae0253a1ea5b95a5a0ad25146b5d6d7 (diff)
fixup statusline
Diffstat (limited to 'go/src/lib/statusline')
-rw-r--r--go/src/lib/statusline/log.go21
-rw-r--r--go/src/lib/statusline/ratelimit.go18
-rw-r--r--go/src/lib/statusline/statusline.go27
-rw-r--r--go/src/lib/statusline/tty.go28
4 files changed, 61 insertions, 33 deletions
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, "")
+ }
+}