mirror of
https://github.com/coder/coder.git
synced 2025-07-12 00:14:10 +00:00
fix: Remove line length limit on MacOS for input prompts (#839)
This caused inputs to be truncated on MacOS terminals.
This commit is contained in:
31
cli/cliui/cliui_darwin.go
Normal file
31
cli/cliui/cliui_darwin.go
Normal file
@ -0,0 +1,31 @@
|
||||
//go:build darwin
|
||||
// +build darwin
|
||||
|
||||
package cliui
|
||||
|
||||
import (
|
||||
"golang.org/x/sys/unix"
|
||||
|
||||
"golang.org/x/xerrors"
|
||||
)
|
||||
|
||||
func removeLineLengthLimit(inputFD int) (func(), error) {
|
||||
termios, err := unix.IoctlGetTermios(inputFD, unix.TIOCGETA)
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("get termios: %w", err)
|
||||
}
|
||||
newState := *termios
|
||||
// MacOS has a default line limit of 1024. See:
|
||||
// https://unix.stackexchange.com/questions/204815/terminal-does-not-accept-pasted-or-typed-lines-of-more-than-1024-characters
|
||||
//
|
||||
// This removes canonical input processing, so deletes will not function
|
||||
// as expected. This _seems_ fine for most use-cases, but is unfortunate.
|
||||
newState.Lflag &^= unix.ICANON
|
||||
err = unix.IoctlSetTermios(inputFD, unix.TIOCSETA, &newState)
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("set termios: %w", err)
|
||||
}
|
||||
return func() {
|
||||
_ = unix.IoctlSetTermios(inputFD, unix.TIOCSETA, termios)
|
||||
}, nil
|
||||
}
|
Reference in New Issue
Block a user