Skip to content

Commit

Permalink
command/exec: Fill ConsoleSize
Browse files Browse the repository at this point in the history
This makes the exec'd process console dimensions immediately match the
users terminal.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
  • Loading branch information
vvoland committed Jun 14, 2022
1 parent c59773f commit 6997c4a
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions cli/command/container/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,8 @@ func RunExec(dockerCli command.Cli, options ExecOptions) error {
}
}

fillConsoleSize(execConfig, dockerCli)

response, err := client.ContainerExecCreate(ctx, options.Container, *execConfig)
if err != nil {
return err
Expand All @@ -129,14 +131,22 @@ func RunExec(dockerCli command.Cli, options ExecOptions) error {

if execConfig.Detach {
execStartCheck := types.ExecStartCheck{
Detach: execConfig.Detach,
Tty: execConfig.Tty,
Detach: execConfig.Detach,
Tty: execConfig.Tty,
ConsoleSize: execConfig.ConsoleSize,
}
return client.ContainerExecStart(ctx, execID, execStartCheck)
}
return interactiveExec(ctx, dockerCli, execConfig, execID)
}

func fillConsoleSize(execConfig *types.ExecConfig, dockerCli command.Cli) {
if execConfig.Tty {
height, width := dockerCli.Out().GetTtySize()
execConfig.ConsoleSize = &[2]uint{height, width}
}
}

func interactiveExec(ctx context.Context, dockerCli command.Cli, execConfig *types.ExecConfig, execID string) error {
// Interactive exec requested.
var (
Expand All @@ -157,10 +167,12 @@ func interactiveExec(ctx context.Context, dockerCli command.Cli, execConfig *typ
stderr = dockerCli.Err()
}
}
fillConsoleSize(execConfig, dockerCli)

client := dockerCli.Client()
execStartCheck := types.ExecStartCheck{
Tty: execConfig.Tty,
Tty: execConfig.Tty,
ConsoleSize: execConfig.ConsoleSize,
}
resp, err := client.ContainerExecAttach(ctx, execID, execStartCheck)
if err != nil {
Expand Down

0 comments on commit 6997c4a

Please sign in to comment.