Răsfoiți Sursa

Get the real width of the terminal

github.com/buger/goterm always returns 80 on windows...
Djordje Lukic 5 ani în urmă
părinte
comite
e6c115dc17
5 a modificat fișierele cu 31 adăugiri și 16 ștergeri
  1. 5 6
      azure/aci.go
  2. 1 1
      azure/backend.go
  3. 12 5
      cli/cmd/logs.go
  4. 12 4
      cli/cmd/run/run.go
  5. 1 0
      containers/api.go

+ 5 - 6
azure/aci.go

@@ -27,7 +27,6 @@ import (
 	"github.com/Azure/azure-sdk-for-go/services/containerinstance/mgmt/2018-10-01/containerinstance"
 	"github.com/Azure/go-autorest/autorest"
 	"github.com/Azure/go-autorest/autorest/to"
-	"github.com/buger/goterm"
 	tm "github.com/buger/goterm"
 	"github.com/gobwas/ws"
 	"github.com/gobwas/ws/wsutil"
@@ -36,6 +35,7 @@ import (
 
 	"github.com/docker/api/azure/convert"
 	"github.com/docker/api/azure/login"
+	"github.com/docker/api/containers"
 	"github.com/docker/api/context/store"
 	"github.com/docker/api/progress"
 )
@@ -242,8 +242,7 @@ func getACIContainerLogs(ctx context.Context, aciContext store.AciContext, conta
 	return *logs.Content, err
 }
 
-func streamLogs(ctx context.Context, aciContext store.AciContext, containerGroupName, containerName string, out io.Writer) error {
-	terminalWidth := goterm.Width()
+func streamLogs(ctx context.Context, aciContext store.AciContext, containerGroupName, containerName string, req containers.LogsRequest) error {
 	numLines := 0
 	for {
 		select {
@@ -263,12 +262,12 @@ func streamLogs(ctx context.Context, aciContext store.AciContext, containerGroup
 			// a real logs streaming api soon.
 			b := aec.EmptyBuilder
 			b = b.Up(uint(numLines))
-			fmt.Fprint(out, b.Column(0).ANSI)
+			fmt.Fprint(req.Writer, b.Column(0).ANSI)
 
-			numLines = getBacktrackLines(logLines, terminalWidth)
+			numLines = getBacktrackLines(logLines, req.Width)
 
 			for i := 0; i < currentOutput-1; i++ {
-				fmt.Fprintln(out, logLines[i])
+				fmt.Fprintln(req.Writer, logLines[i])
 			}
 
 			select {

+ 1 - 1
azure/backend.go

@@ -226,7 +226,7 @@ func (cs *aciContainerService) Logs(ctx context.Context, containerName string, r
 	var tail *int32
 
 	if req.Follow {
-		return streamLogs(ctx, cs.ctx, groupName, containerAciName, req.Writer)
+		return streamLogs(ctx, cs.ctx, groupName, containerAciName, req)
 	}
 
 	if req.Tail != "all" {

+ 12 - 5
cli/cmd/logs.go

@@ -57,16 +57,23 @@ func runLogs(ctx context.Context, containerName string, opts logsOpts) error {
 	if err != nil {
 		return errors.Wrap(err, "cannot connect to backend")
 	}
-	var con io.Writer = os.Stdout
-	if c, err := console.ConsoleFromFile(os.Stdout); err == nil {
-		con = c
-	}
 
 	req := containers.LogsRequest{
 		Follow: opts.Follow,
 		Tail:   opts.Tail,
-		Writer: con,
 	}
 
+	var con io.Writer = os.Stdout
+	if c, err := console.ConsoleFromFile(os.Stdout); err == nil {
+		size, err := c.Size()
+		if err != nil {
+			return err
+		}
+		req.Width = int(size.Width)
+		con = c
+	}
+
+	req.Writer = con
+
 	return c.ContainerService().Logs(ctx, containerName, req)
 }

+ 12 - 4
cli/cmd/run/run.go

@@ -73,19 +73,27 @@ func runRun(ctx context.Context, image string, opts run.Opts) error {
 	if err != nil {
 		return err
 	}
+
 	if !opts.Detach {
 		var con io.Writer = os.Stdout
+		req := containers.LogsRequest{
+			Follow: true,
+		}
 		if c, err := console.ConsoleFromFile(os.Stdout); err == nil {
+			size, err := c.Size()
+			if err != nil {
+				return err
+			}
+			req.Width = int(size.Width)
 			con = c
 		}
 
-		req := containers.LogsRequest{
-			Follow: true,
-			Writer: con,
-		}
+		req.Writer = con
 
 		return c.ContainerService().Logs(ctx, opts.Name, req)
 	}
+
 	fmt.Println(opts.Name)
+
 	return nil
 }

+ 1 - 0
containers/api.go

@@ -76,6 +76,7 @@ type ContainerConfig struct {
 type LogsRequest struct {
 	Follow bool
 	Tail   string
+	Width  int
 	Writer io.Writer
 }