Я пытаюсь сделать мою консоль необработанной (в Windows), и я использую пакет ssh / терминал:
package main
import (
"fmt"
"os"
"golang.org/x/crypto/ssh/terminal"
)
type sh struct{}
func (sh *sh) Read(b []byte) (int, error) {
return os.Stdin.Read(b)
}
func (sh *sh) Write(b []byte) (int, error) {
return os.Stdout.Write(b)
}
func main() {
oldstate, err := terminal.MakeRaw(int(os.Stdin.Fd()))
if err != nil {
panic(err)
}
defer terminal.Restore(int(os.Stdin.Fd()), oldstate)
term := terminal.NewTerminal(&sh{}, "")
term.AutoCompleteCallback = func(line string, pos int, key rune) (newLine string, newPos int, ok bool) {
fmt.Println("callback:", line, pos, key)
return "", 0, false
}
line, err := term.ReadLine()
fmt.Println("result:", line, err)
}
Это прекрасно работает, и я могу поймать Ctrl-C и другие специальные клавиши, но я не могу использовать клавиши со стрелками.
Я хочу, чтобы клавиши со стрелками перемещали курсор или, по крайней мере, вызывали AutoCompleteCallback
, где я могу переместить курсор самостоятельно.