Skip to content

Commit

Permalink
x/term: set missing VIRTUAL_TERMINAL_INPUT flag on Windows
Browse files Browse the repository at this point in the history
With this change the arrow keys work with Windows 11 Terminal

After verifying https://github.com/containerd/console did work fine, unlike x/term, it's because they have:
https://github.com/containerd/console/blob/v1.0.4/console_windows.go#L194
using the same flag fixed x/term for my program

Small e2e test reproducing the issue and showing it being fixed can be ran using

go run fortio.org/terminal/example@v0.6.0  # has the fix (or @latest)

go run fortio.org/terminal/example@v0.5.1  -history .history # does not have working arrow keys/this fix

Fixes golang/go#68830

Change-Id: If20addd054c76b889a52f933695467812be72306
GitHub-Last-Rev: 68e3ca0
GitHub-Pull-Request: #17
Reviewed-on: https://go-review.googlesource.com/c/term/+/603960
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Commit-Queue: Ian Lance Taylor <iant@google.com>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
  • Loading branch information
ldemailly authored and gopherbot committed Aug 24, 2024
1 parent d598954 commit f867b76
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions term_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ func makeRaw(fd int) (*State, error) {
return nil, err
}
raw := st &^ (windows.ENABLE_ECHO_INPUT | windows.ENABLE_PROCESSED_INPUT | windows.ENABLE_LINE_INPUT | windows.ENABLE_PROCESSED_OUTPUT)
raw |= windows.ENABLE_VIRTUAL_TERMINAL_INPUT
if err := windows.SetConsoleMode(windows.Handle(fd), raw); err != nil {
return nil, err
}
Expand Down

0 comments on commit f867b76

Please sign in to comment.