@@ -253,6 +253,10 @@ func (term *TerminalUI) runTCR(r role.Role) error {
253
253
}
254
254
255
255
func (term * TerminalUI ) runMenuLoop (m * menu ) {
256
+ if term .params .Mode .IsInteractive () {
257
+ _ = SetRaw ()
258
+ defer Restore ()
259
+ }
256
260
for {
257
261
input := term .readKeyboardInput ()
258
262
matched , quit := m .matchAndRun (input )
@@ -267,6 +271,9 @@ func (term *TerminalUI) runMenuLoop(m *menu) {
267
271
}
268
272
269
273
func (term * TerminalUI ) readKeyboardInput () byte {
274
+ // setupTerminal() is called every time to enforce expected behaviour
275
+ // in some terminal implementations such as JetBrains' embedded terminal
276
+ setupTerminal ()
270
277
keyboardInput := make ([]byte , 1 )
271
278
_ , err := os .Stdin .Read (keyboardInput )
272
279
if err != nil {
@@ -357,6 +364,7 @@ func (term *TerminalUI) Confirm(message string, defaultAnswer bool) bool {
357
364
358
365
keyboardInput := make ([]byte , 1 )
359
366
for {
367
+ setupTerminal ()
360
368
_ , _ = os .Stdin .Read (keyboardInput )
361
369
switch keyboardInput [0 ] {
362
370
case 'y' , 'Y' :
@@ -378,11 +386,6 @@ func yesOrNoAdvice(defaultAnswer bool) string {
378
386
379
387
// Start runs the terminal session
380
388
func (term * TerminalUI ) Start () {
381
- if term .params .Mode .IsInteractive () {
382
- _ = SetRaw ()
383
- defer Restore ()
384
- }
385
-
386
389
switch term .params .Mode {
387
390
case runmode.Solo {}:
388
391
// When running TCR in solo mode, there's no selection menu:
0 commit comments