diff options
Diffstat (limited to 'internal/server')
| -rw-r--r-- | internal/server/handlers/colorwriter.go | 43 | ||||
| -rw-r--r-- | internal/server/handlers/readcommand.go | 8 |
2 files changed, 47 insertions, 4 deletions
diff --git a/internal/server/handlers/colorwriter.go b/internal/server/handlers/colorwriter.go new file mode 100644 index 0000000..6e0f1af --- /dev/null +++ b/internal/server/handlers/colorwriter.go @@ -0,0 +1,43 @@ +package handlers + +import ( + "io" + "github.com/mimecast/dtail/internal/color/brush" + "github.com/mimecast/dtail/internal/config" +) + +// ColorWriter wraps an io.Writer and applies colors to output +type ColorWriter struct { + writer io.Writer + noColor bool +} + +// NewColorWriter creates a new ColorWriter +func NewColorWriter(writer io.Writer, noColor bool) *ColorWriter { + return &ColorWriter{ + writer: writer, + noColor: noColor, + } +} + +// Write implements io.Writer, applying colors if enabled +func (cw *ColorWriter) Write(p []byte) (n int, err error) { + if cw.noColor || !config.Client.TermColorsEnable { + // No colors, write as-is + return cw.writer.Write(p) + } + + // Apply colors + coloredStr := brush.Colorfy(string(p)) + coloredBytes := []byte(coloredStr) + + // Write the colored output + _, err = cw.writer.Write(coloredBytes) + if err != nil { + return 0, err + } + + // Return the original byte count to maintain compatibility + // (the caller expects n to match len(p)) + return len(p), nil +}
\ No newline at end of file diff --git a/internal/server/handlers/readcommand.go b/internal/server/handlers/readcommand.go index 616bf31..0a99aaa 100644 --- a/internal/server/handlers/readcommand.go +++ b/internal/server/handlers/readcommand.go @@ -146,8 +146,8 @@ func (r *readCommand) readFiles(ctx context.Context, ltx lcontext.LContext, // Choose output writer based on server mode var output io.Writer if r.server.serverless { - // In serverless mode, write directly to stdout - output = os.Stdout + // In serverless mode, write to stdout with color support + output = NewColorWriter(os.Stdout, r.server.plain) } else { // In client-server mode, write to server handler lines channel output = NewServerHandlerWriter(r.server, r.server.serverMessages, r.server.user) @@ -216,8 +216,8 @@ func (r *readCommand) readStdin(ctx context.Context, ltx lcontext.LContext, re r // Choose output writer based on server mode var output io.Writer if r.server.serverless { - // In serverless mode, write directly to stdout - output = os.Stdout + // In serverless mode, write to stdout with color support + output = NewColorWriter(os.Stdout, r.server.plain) } else { // In client-server mode, write to server handler lines channel output = NewServerHandlerWriter(r.server, r.server.serverMessages, r.server.user) |
