readline icon indicating copy to clipboard operation
readline copied to clipboard

Can I use `readline.NewRawReader()` as `os.Stdin` on Windows? Can `readline.NewRawReader()` support `Ctrl + Space`?

Open lonnywong opened this issue 1 year ago • 1 comments

  • Can I use readline.NewRawReader() as os.Stdin on Windows?
  • Can readline.NewRawReader() support Ctrl + Space?

I want to read Ctrl + Space on Windows, can readline.NewRawReader() help?

package main

import (
	"fmt"
	"os"

	"github.com/chzyer/readline"
	"golang.org/x/term"
)

func main() {
	fd := int(os.Stdin.Fd())
	state, err := term.MakeRaw(fd)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer term.Restore(fd, state)

	stdin := readline.NewRawReader()
	buf := make([]byte, 100)
	for {
		n, err := stdin.Read(buf)
		fmt.Printf("n = %d, err = %v, buf = %#v\r\n", n, err, buf[:n])
		if n > 0 && buf[0] == '\x03' {  // `ctrl + c` to exit
			break
		}
	}
}

lonnywong avatar Jun 06 '23 10:06 lonnywong

https://github.com/PowerShell/openssh-portable/blob/latestw_all/contrib/win32/win32compat/tncon.c Can someone implement this c code in go? preferably without cgo.

Refer to https://github.com/chzyer/readline/blob/master/rawreader_windows.go

lonnywong avatar Jun 06 '23 23:06 lonnywong