Skip to content

Commit fc51db2

Browse files
committed
add terminal module
Signed-off-by: Markus Blaschke <mblaschke82@gmail.com>
1 parent 657cbbc commit fc51db2

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

terminal/print.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package terminal
2+
3+
import (
4+
"fmt"
5+
"io"
6+
"os"
7+
)
8+
9+
// Println prints line on stdout
10+
func Println(msg string, args ...any) {
11+
Fprintln(os.Stdout, msg, args...)
12+
}
13+
14+
// Printf prints content on stdout
15+
func Printf(msg string, args ...any) {
16+
Fprintf(os.Stdout, msg, args...)
17+
}
18+
19+
// Fprintln prints line on writer
20+
func Fprintln(w io.Writer, msg string, args ...any) {
21+
Sync()
22+
if len(args) > 0 {
23+
msg = fmt.Sprintf(msg, args...)
24+
}
25+
26+
if _, err := fmt.Fprintln(w, msg); err != nil {
27+
panic(err)
28+
}
29+
30+
Sync()
31+
}
32+
33+
// Fprintf writes content on writer
34+
func Fprintf(w io.Writer, msg string, args ...any) {
35+
Sync()
36+
37+
if _, err := fmt.Fprintf(w, msg, args...); err != nil {
38+
panic(err)
39+
}
40+
41+
Sync()
42+
}
43+
44+
// SyncBlock syncs stdout and stderr and calls callback in between sync calls
45+
func SyncBlock(callback func()) {
46+
Sync()
47+
callback()
48+
Sync()
49+
}
50+
51+
// Sync syncs terminal output and ensures logger has finished
52+
func Sync() {
53+
if err := os.Stdout.Sync(); err != nil {
54+
panic(err)
55+
}
56+
if err := os.Stderr.Sync(); err != nil {
57+
panic(err)
58+
}
59+
}

0 commit comments

Comments
 (0)