@@ -4,14 +4,14 @@ import (
4
4
"bytes"
5
5
"context"
6
6
"fmt"
7
+ "io"
7
8
"os"
8
9
"sync"
9
10
10
11
"github.com/anchore/syft/internal/log"
11
12
"github.com/anchore/syft/internal/logger"
12
13
syftEvent "github.com/anchore/syft/syft/event"
13
14
"github.com/anchore/syft/ui"
14
- "github.com/k0kubun/go-ansi"
15
15
"github.com/wagoodman/go-partybus"
16
16
"github.com/wagoodman/jotframe/pkg/frame"
17
17
)
@@ -38,18 +38,20 @@ type ephemeralTerminalUI struct {
38
38
waitGroup * sync.WaitGroup
39
39
frame * frame.Frame
40
40
logBuffer * bytes.Buffer
41
+ output * os.File
41
42
}
42
43
43
44
func NewEphemeralTerminalUI () UI {
44
45
return & ephemeralTerminalUI {
45
46
handler : ui .NewHandler (),
46
47
waitGroup : & sync.WaitGroup {},
48
+ output : os .Stderr ,
47
49
}
48
50
}
49
51
50
52
func (h * ephemeralTerminalUI ) Setup (unsubscribe func () error ) error {
51
53
h .unsubscribe = unsubscribe
52
- ansi . CursorHide ( )
54
+ hideCursor ( h . output )
53
55
54
56
// prep the logger to not clobber the screen from now on (logrus only)
55
57
h .logBuffer = bytes .NewBufferString ("" )
@@ -93,7 +95,7 @@ func (h *ephemeralTerminalUI) openScreen() error {
93
95
config := frame.Config {
94
96
PositionPolicy : frame .PolicyFloatForward ,
95
97
// only report output to stderr, reserve report output for stdout
96
- Output : os . Stderr ,
98
+ Output : h . output ,
97
99
}
98
100
99
101
fr , err := frame .New (config )
@@ -126,14 +128,22 @@ func (h *ephemeralTerminalUI) flushLog() {
126
128
logWrapper , ok := log .Log .(* logger.LogrusLogger )
127
129
if ok {
128
130
fmt .Fprint (logWrapper .Output , h .logBuffer .String ())
129
- logWrapper .Logger .SetOutput (os . Stderr )
131
+ logWrapper .Logger .SetOutput (h . output )
130
132
} else {
131
- fmt .Fprint (os . Stderr , h .logBuffer .String ())
133
+ fmt .Fprint (h . output , h .logBuffer .String ())
132
134
}
133
135
}
134
136
135
137
func (h * ephemeralTerminalUI ) Teardown (force bool ) error {
136
138
h .closeScreen (force )
137
- ansi . CursorShow ( )
139
+ showCursor ( h . output )
138
140
return nil
139
141
}
142
+
143
+ func hideCursor (output io.Writer ) {
144
+ fmt .Fprint (output , "\x1b [?25l" )
145
+ }
146
+
147
+ func showCursor (output io.Writer ) {
148
+ fmt .Fprint (output , "\x1b [?25h" )
149
+ }
0 commit comments