x/term: set missing VIRTUAL_TERMINAL_INPUT flag on Windows 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: 68e3ca0e19d5c5ac1848d8135638c809f593e035 GitHub-Pull-Request: golang/term#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>
diff --git a/term_windows.go b/term_windows.go index 465f560..df6bf94 100644 --- a/term_windows.go +++ b/term_windows.go
@@ -26,6 +26,7 @@ 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 }