From 66ef308abdccf3e0098715f66253898e9ff12702 Mon Sep 17 00:00:00 2001 From: vinjn Date: Thu, 23 Nov 2023 22:21:32 -0800 Subject: [PATCH] Import "containerd/console" lib to support colorful output in Windows terminal --- cmd/cmd.go | 8 ++++++++ cmd/start_windows.go | 23 ----------------------- go.mod | 2 ++ go.sum | 3 +++ 4 files changed, 13 insertions(+), 23 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index 1c7eba43..55535f7a 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -16,10 +16,13 @@ import ( "os" "os/signal" "path/filepath" + "runtime" "strings" "syscall" "time" + "github.com/containerd/console" + "github.com/olekukonko/tablewriter" "github.com/spf13/cobra" "golang.org/x/crypto/ssh" @@ -810,6 +813,11 @@ func NewCLI() *cobra.Command { log.SetFlags(log.LstdFlags | log.Lshortfile) cobra.EnableCommandSorting = false + if runtime.GOOS == "windows" { + // Enable colorful ANSI escape code in Windows terminal (disabled by default) + console.ConsoleFromFile(os.Stdout) + } + rootCmd := &cobra.Command{ Use: "ollama", Short: "Large language model runner", diff --git a/cmd/start_windows.go b/cmd/start_windows.go index a24f1c19..b9a423cf 100644 --- a/cmd/start_windows.go +++ b/cmd/start_windows.go @@ -10,32 +10,9 @@ import ( "strings" "syscall" - "golang.org/x/sys/windows" - "github.com/jmorganca/ollama/api" ) -func init() { - var inMode uint32 - var outMode uint32 - var errMode uint32 - - in := windows.Handle(os.Stdin.Fd()) - if err := windows.GetConsoleMode(in, &inMode); err == nil { - windows.SetConsoleMode(in, inMode|windows.ENABLE_VIRTUAL_TERMINAL_INPUT) //nolint:errcheck - } - - out := windows.Handle(os.Stdout.Fd()) - if err := windows.GetConsoleMode(out, &outMode); err == nil { - windows.SetConsoleMode(out, outMode|windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING) //nolint:errcheck - } - - errf := windows.Handle(os.Stderr.Fd()) - if err := windows.GetConsoleMode(errf, &errMode); err == nil { - windows.SetConsoleMode(errf, errMode|windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING) //nolint:errcheck - } -} - func startApp(ctx context.Context, client *api.Client) error { // log.Printf("XXX Attempting to find and start ollama app") AppName := "ollama app.exe" diff --git a/go.mod b/go.mod index 1118de66..f85ce26a 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( ) require ( + github.com/containerd/console v1.0.3 // indirect github.com/cratonica/2goarray v0.0.0-20190331194516-514510793eaa // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 // indirect @@ -30,6 +31,7 @@ require ( github.com/rivo/uniseg v0.2.0 // indirect ) + require ( github.com/bytedance/sonic v1.9.1 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect diff --git a/go.sum b/go.sum index a256b0be..414a65e7 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZX github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cratonica/2goarray v0.0.0-20190331194516-514510793eaa h1:Wg+722vs7a2zQH5lR9QWYsVbplKeffaQFIs5FTdfNNo= github.com/cratonica/2goarray v0.0.0-20190331194516-514510793eaa/go.mod h1:6Arca19mRx58CA7OWEd7Wu1NpC1rd3uDnNs6s1pj/DI= @@ -149,6 +151,7 @@ golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=