Skip to content

bufio: Reading from stdin breaks arrow keys #70071

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
mybearworld opened this issue Oct 27, 2024 · 2 comments
Closed

bufio: Reading from stdin breaks arrow keys #70071

mybearworld opened this issue Oct 27, 2024 · 2 comments

Comments

@mybearworld
Copy link

Go version

go version go1.23.0 linux/amd64

Output of go env in your module/workspace:

GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/home/mybearworld/.cache/go-build'
GOENV='/home/mybearworld/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/mybearworld/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/mybearworld/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/home/mybearworld/.go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/home/mybearworld/.go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.23.0'
GODEBUG=''
GOTELEMETRY='local'
GOTELEMETRYDIR='/home/mybearworld/.config/go/telemetry'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/home/mybearworld/playground/stdinbufio/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build3760656799=/tmp/go-build -gno-record-gcc-switches'

What did you do?

main.go:

package main

import (
        "bufio"
        "fmt"
        "os"
)

func main() {
        reader := bufio.NewReader(os.Stdin)
        s, err := reader.ReadString('\n')
        fmt.Println(s, err)
}

Keystrokes: Hello, world! and mars

What did you see happen?

Hello, world!^[[D and mars
Hello, world and mars
 <nil>

The arrow key is displayed as its code (^[[D) and deletes a character.

What did you expect to see?

Hello, world and mars!
Hello, world and mars!
 <nil>

The arrow key acts as it normally does (moving a character back and displaying it as such).

@gabyhelp
Copy link

Related Issues and Documentation

(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)

@seankhliao
Copy link
Member

stdin is a raw input stream, the implementation of line editing through arrow keys or other control characters is left to applications/libraries.

Closing as working as intended.

Unlike many projects, the Go project does not use GitHub Issues for general discussion or asking questions. GitHub Issues are used for tracking bugs and proposals only.

For questions please refer to https://github.com/golang/go/wiki/Questions

@seankhliao seankhliao closed this as not planned Won't fix, can't repro, duplicate, stale Oct 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants