@@ -4,13 +4,17 @@ import (
4
4
"context"
5
5
"fmt"
6
6
"strings"
7
+ "time"
7
8
8
9
"github.com/buger/goterm"
9
10
"github.com/docker/compose/v2/pkg/watch"
10
11
)
11
12
13
+ var DISPLAY_ERROR_TIME = 3
14
+
12
15
type LogKeyboard struct {
13
16
err error
17
+ errStart time.Time
14
18
started bool
15
19
IsDockerDesktopActive bool
16
20
Watcher watch.Notify
@@ -19,7 +23,7 @@ type LogKeyboard struct {
19
23
Cancel context.CancelFunc
20
24
}
21
25
22
- var KeyboardInfo = LogKeyboard {Watching : true }
26
+ var KeyboardManager = LogKeyboard {Watching : true }
23
27
var errorColor = "\x1b [1;33m"
24
28
25
29
func (lk * LogKeyboard ) NewContext (ctx context.Context ) context.CancelFunc {
@@ -44,9 +48,11 @@ func (lk *LogKeyboard) PrintKeyboardInfo(print func()) {
44
48
}
45
49
46
50
func (lk * LogKeyboard ) SError (err string ) {
51
+ lk .errStart = time .Now ()
47
52
lk .err = fmt .Errorf (err )
48
53
}
49
54
func (lk * LogKeyboard ) Error (err error ) {
55
+ lk .errStart = time .Now ()
50
56
lk .err = err
51
57
}
52
58
@@ -57,13 +63,17 @@ func (lk *LogKeyboard) createBuffer() {
57
63
fmt .Print ("\033 [2A" ) // go back 3 lines
58
64
}
59
65
60
- func (lk * LogKeyboard ) printInfo () {
61
- height := goterm .Height ()
62
- fmt .Print ("\033 7" ) // save cursor position
63
- if lk .err != nil {
66
+ func (lk * LogKeyboard ) printError (height int ) {
67
+ if lk .err != nil && int (time .Since (lk .errStart ).Seconds ()) < DISPLAY_ERROR_TIME {
64
68
fmt .Printf ("\033 [%d;0H" , height - 1 ) // Move to before last line
65
69
fmt .Printf ("\033 [K" + errorColor + "[Error] " + lk .err .Error ())
66
70
}
71
+ }
72
+
73
+ func (lk * LogKeyboard ) printInfo () {
74
+ height := goterm .Height ()
75
+ fmt .Print ("\033 7" ) // save cursor position
76
+ lk .printError (height )
67
77
fmt .Printf ("\033 [%d;0H" , height ) // Move to last line
68
78
// clear line
69
79
lk .infoMessage ()
@@ -101,3 +111,50 @@ func (lk *LogKeyboard) PrintEnter() {
101
111
lk .ClearInfo ()
102
112
lk .printInfo ()
103
113
}
114
+
115
+ // func HandleKeyEvents(ctx context.Context, event keyboard.KeyEvent, project types.Project, options api.UpOptions, handleTearDown func()) {
116
+ // switch key := event.Key; key {
117
+ // case keyboard.KeyCtrlC:
118
+ // keyboard.Close()
119
+ // KeyboardManager.ClearInfo()
120
+ // handleTearDown()
121
+ // case keyboard.KeyCtrlG:
122
+ // if KeyboardManager.IsDockerDesktopActive {
123
+ // link := fmt.Sprintf("docker-desktop://dashboard/apps/%s", project.Name)
124
+ // err := open.Run(link)
125
+ // if err != nil {
126
+ // KeyboardManager.SError("Could not open Docker Desktop")
127
+ // } else {
128
+ // KeyboardManager.Error(nil)
129
+ // }
130
+ // }
131
+ // case keyboard.KeyCtrlW:
132
+ // if KeyboardManager.Watching {
133
+ // KeyboardManager.Watching = !KeyboardManager.Watching
134
+ // fmt.Println("watching shortcut", KeyboardManager.Watching)
135
+
136
+ // if KeyboardManager.Watching {
137
+ // KeyboardManager.Cancel()
138
+ // } else {
139
+ // KeyboardManager.NewContext(ctx)
140
+ // quit := make(chan error)
141
+ // go func() {
142
+ // buildOpts := *options.Create.Build
143
+ // buildOpts.Quiet = true
144
+ // err := s.Watch(KeyboardManager.Ctx, project, options.Start.Services, api.WatchOptions{
145
+ // Build: &buildOpts,
146
+ // LogTo: options.Start.Attach,
147
+ // })
148
+ // quit <- err
149
+ // }()
150
+ // KeyboardManager.Error(<-quit)
151
+ // }
152
+ // }
153
+ // case keyboard.KeyEnter:
154
+ // KeyboardManager.PrintEnter()
155
+ // default:
156
+ // if key != 0 { // If some key is pressed
157
+ // fmt.Println("key pressed: ", key)
158
+ // }
159
+ // }
160
+ // }
0 commit comments