using readline with a hardware serial console (minitel)
tgirod opened this issue · 0 comments
tgirod commented
I'm trying to run an application using readline that talks to a hardware serial console (a venerable Minitel 1B), which appears as /dev/ttyUSB0
. Here is a program that partially works.
package main
import (
"fmt"
"log"
"os"
"github.com/chzyer/readline"
)
func main() {
ttyName := os.Args[1]
tty, err := os.OpenFile(ttyName, os.O_RDWR, os.ModeDevice)
if err != nil {
panic(err)
}
defer tty.Close()
cfg := readline.Config{
Prompt: "> ",
Stdin: tty,
Stdout: tty,
Stderr: tty,
}
rl, err := readline.NewEx(&cfg)
if err != nil {
panic(err)
}
for {
line, err := rl.Readline()
if err != nil {
log.Fatal(err)
}
fmt.Println(line)
}
}
The prompt works fine, I can type a line and get the result. However:
- Whenever I read a line, the line I've just typed (including the prompt) is printed back to the screen before a new prompt is displayed
- Minitel is a strange beast, and function keys such as backspace and arrows are not sent as regular codes. Is there a way to instruct readline of those peculiarities ? Or should I encapsulate my
tty
and reimplementRead
andWrite
in order to convert those ?
thanks for your attention!