@@ -3,6 +3,7 @@ package dev
33import (
44 "context"
55 "fmt"
6+ "io"
67 "os"
78 "os/signal"
89 "runtime"
@@ -74,18 +75,24 @@ func runServe(profile string, debug bool, port int, noInteractive bool) error {
7475 return fmt .Errorf ("not a Spring Boot project: %w" , err )
7576 }
7677
78+ keyboard := NewKeyboardListener ()
79+ isInteractive := keyboard .IsInteractive () && ! noInteractive
80+
81+ var stdout , stderr io.Writer = os .Stdout , os .Stderr
82+ if isInteractive {
83+ stdout = newCRLFWriter (os .Stdout )
84+ stderr = newCRLFWriter (os .Stderr )
85+ }
86+
7787 pm := NewProcessManager (ProcessConfig {
7888 BuildTool : result .BuildTool ,
7989 Profile : profile ,
8090 Debug : debug ,
8191 Port : port ,
82- Stdout : os . Stdout ,
83- Stderr : os . Stderr ,
92+ Stdout : stdout ,
93+ Stderr : stderr ,
8494 })
8595
86- keyboard := NewKeyboardListener ()
87- isInteractive := keyboard .IsInteractive () && ! noInteractive
88-
8996 trigger := NewTriggerWatcher ()
9097 if err := trigger .Setup (); err != nil {
9198 logger .Warning ("Failed to setup trigger watcher" , "error" , err )
@@ -133,15 +140,15 @@ func runServe(profile string, debug bool, port int, noInteractive bool) error {
133140 switch cmd {
134141 case KeyRestart :
135142 if pm .IsBusy () {
136- fmt .Println ("\n \033 [33m→ Restart already in progress...\033 [0m" )
143+ fmt .Print ("\r \ n\033 [33m→ Restart already in progress...\033 [0m\r \n " )
137144 continue
138145 }
139146 if err := pm .Restart (ctx ); err != nil {
140147 logger .Debug ("Restart failed" , "error" , err )
141148 }
142149
143150 case KeyQuit :
144- fmt .Println ("\n \033 [33m→ Shutting down...\033 [0m" )
151+ fmt .Print ("\r \ n\033 [33m→ Shutting down...\033 [0m\r \n " )
145152 if err := pm .Stop (); err != nil {
146153 logger .Debug ("Error during shutdown" , "error" , err )
147154 }
@@ -159,7 +166,7 @@ func runServe(profile string, debug bool, port int, noInteractive bool) error {
159166 if pm .IsBusy () {
160167 continue
161168 }
162- fmt .Println ("\n \033 [35m→ External restart triggered\033 [0m" )
169+ fmt .Print ("\r \ n\033 [35m→ External restart triggered\033 [0m\r \n " )
163170 if err := pm .Restart (ctx ); err != nil {
164171 logger .Debug ("External restart failed" , "error" , err )
165172 }
@@ -168,8 +175,8 @@ func runServe(profile string, debug bool, port int, noInteractive bool) error {
168175 if pm .State () == StateIdle || pm .State () == StateFailed {
169176 if lastErr := pm .LastError (); lastErr != nil {
170177 if isInteractive {
171- fmt .Printf ("\n \033 [31mProcess stopped: %v\033 [0m\n " , lastErr )
172- fmt .Println ("\033 [33mPress 'r' to restart or 'q' to quit\033 [0m" )
178+ fmt .Printf ("\r \ n\033 [31mProcess stopped: %v\033 [0m\r \n " , lastErr )
179+ fmt .Print ("\033 [33mPress 'r' to restart or 'q' to quit\033 [0m\r \n " )
173180 waitForRestartOrQuit (keyboard , sigChan , pm , ctx )
174181 } else {
175182 return lastErr
@@ -204,7 +211,7 @@ func waitForRestartOrQuit(keyboard *KeyboardListener, sigChan chan os.Signal, pm
204211 }
205212 return
206213 case KeyQuit :
207- fmt .Println ("\n \033 [33m→ Shutting down...\033 [0m" )
214+ fmt .Print ("\r \ n\033 [33m→ Shutting down...\033 [0m\r \n " )
208215 if err := pm .Stop (); err != nil {
209216 logger .Debug ("Error during shutdown" , "error" , err )
210217 }
0 commit comments