@@ -64,30 +64,36 @@ func Agent(ctx context.Context, writer io.Writer, opts AgentOptions) error {
64
64
os .Exit (1 )
65
65
}()
66
66
67
- warningShown := false
68
- warnAfter := time .NewTimer (opts .WarnInterval )
69
- defer warnAfter .Stop ()
70
- showWarning := func () {
71
- warnAfter .Stop ()
72
-
67
+ var waitMessage string
68
+ messageAfter := time .NewTimer (opts .WarnInterval )
69
+ defer messageAfter .Stop ()
70
+ showMessage := func () {
73
71
resourceMutex .Lock ()
74
72
defer resourceMutex .Unlock ()
75
- if warningShown {
73
+
74
+ m := waitingMessage (agent )
75
+ if m == waitMessage {
76
76
return
77
77
}
78
- warningShown = true
78
+ moveUp := ""
79
+ if waitMessage != "" {
80
+ // If this is an update, move a line up
81
+ // to keep it tidy and aligned.
82
+ moveUp = "\033 [1A"
83
+ }
84
+ waitMessage = m
79
85
80
- message := waitingMessage (agent )
81
86
// This saves the cursor position, then defers clearing from the cursor
82
87
// position to the end of the screen.
83
- _ , _ = fmt .Fprintf (writer , "\033 [s\r \033 [2K%s\n \n " , Styles .Paragraph .Render (Styles .Prompt .String ()+ message ))
88
+ _ , _ = fmt .Fprintf (writer , "\033 [s\r \033 [2K%s%s \n \n " , moveUp , Styles .Paragraph .Render (Styles .Prompt .String ()+ waitMessage ))
84
89
defer fmt .Fprintf (writer , "\033 [u\033 [J" )
85
90
}
86
91
go func () {
87
92
select {
88
93
case <- ctx .Done ():
89
- case <- warnAfter .C :
90
- showWarning ()
94
+ case <- messageAfter .C :
95
+ messageAfter .Stop ()
96
+ showMessage ()
91
97
}
92
98
}()
93
99
@@ -110,7 +116,7 @@ func Agent(ctx context.Context, writer io.Writer, opts AgentOptions) error {
110
116
case codersdk .WorkspaceAgentConnected :
111
117
return nil
112
118
case codersdk .WorkspaceAgentTimeout , codersdk .WorkspaceAgentDisconnected :
113
- showWarning ()
119
+ showMessage ()
114
120
}
115
121
}
116
122
}
0 commit comments