|
|
@ -5,7 +5,6 @@ import ( |
|
|
"fmt" |
|
|
"fmt" |
|
|
"io" |
|
|
"io" |
|
|
"os" |
|
|
"os" |
|
|
"syscall" |
|
|
|
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
type Prompt struct { |
|
|
type Prompt struct { |
|
|
@ -63,7 +62,7 @@ func New(prompt Prompt) (*Instance, error) { |
|
|
|
|
|
|
|
|
func (i *Instance) Readline() (string, error) { |
|
|
func (i *Instance) Readline() (string, error) { |
|
|
if !i.Terminal.rawmode { |
|
|
if !i.Terminal.rawmode { |
|
|
fd := syscall.Stdin |
|
|
fd := os.Stdin.Fd() |
|
|
termios, err := SetRawMode(fd) |
|
|
termios, err := SetRawMode(fd) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return "", err |
|
|
return "", err |
|
|
@ -80,7 +79,7 @@ func (i *Instance) Readline() (string, error) { |
|
|
fmt.Print(prompt) |
|
|
fmt.Print(prompt) |
|
|
|
|
|
|
|
|
defer func() { |
|
|
defer func() { |
|
|
fd := syscall.Stdin |
|
|
fd := os.Stdin.Fd() |
|
|
//nolint:errcheck
|
|
|
//nolint:errcheck
|
|
|
UnsetRawMode(fd, i.Terminal.termios) |
|
|
UnsetRawMode(fd, i.Terminal.termios) |
|
|
i.Terminal.rawmode = false |
|
|
i.Terminal.rawmode = false |
|
|
@ -216,7 +215,7 @@ func (i *Instance) Readline() (string, error) { |
|
|
case CharCtrlW: |
|
|
case CharCtrlW: |
|
|
buf.DeleteWord() |
|
|
buf.DeleteWord() |
|
|
case CharCtrlZ: |
|
|
case CharCtrlZ: |
|
|
fd := syscall.Stdin |
|
|
fd := os.Stdin.Fd() |
|
|
return handleCharCtrlZ(fd, i.Terminal.termios) |
|
|
return handleCharCtrlZ(fd, i.Terminal.termios) |
|
|
case CharEnter, CharCtrlJ: |
|
|
case CharEnter, CharCtrlJ: |
|
|
output := buf.String() |
|
|
output := buf.String() |
|
|
@ -248,7 +247,7 @@ func (i *Instance) HistoryDisable() { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func NewTerminal() (*Terminal, error) { |
|
|
func NewTerminal() (*Terminal, error) { |
|
|
fd := syscall.Stdin |
|
|
fd := os.Stdin.Fd() |
|
|
termios, err := SetRawMode(fd) |
|
|
termios, err := SetRawMode(fd) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return nil, err |
|
|
return nil, err |
|
|
|