infinite
infinite copied to clipboard
运行程序后方向键不可用
-
在使用仓库提供的demo,执行前方向键可以正常使用,执行后方向键不可用,会被识别成[[A字符
-
windows终端,winterm, cmd下都出现了这个问题。
-
编译成可执行文件后在执行同样出现。
-
go version go1.18.1 windows/amd64
这个切换的key是tab
ok, 更新了0.8.3
https://github.com/fzdwx/infinite/commit/14bad27c370dae8826f2fe3292b0066d3b5818d8 有help view了。
这个切换key是tab
了解,但是我运行这个程序后,已经结束了。在终端中就没法使用方向键了。按方向键会被识别成^[[A等字符。这个问题没有复现吗?
cmd是吧,我试试
ok,我也出现了,我看看
@shiluanzzz 我好像找到原因了,跟这个方法有关https://github.com/muesli/cancelreader/blob/main/cancelreader_windows.go#L189
现在有一个简单的修复办法,你可以运行完demo之后在运行:
func main() {
var originalMode uint32
windows.SetConsoleMode(windows.Handle(os.Stdin.Fd()), originalMode)
}
我晚上想想怎么写。
问题很诡异。 跟 window#GetConsoleMode
这个函数有关,当这个框架的程序运行时读取到的值是992
, 但是默认的却是 503
。就会导致这个情况出现。如果要改的话,只能强行把这个值改成 503
。
demo code:
package main
import (
"fmt"
"golang.org/x/sys/windows"
"unicode/utf16"
)
var fileShareValidFlags uint32 = 0x00000007
func main() {
var originalMode uint32
handle, _ := windows.CreateFile(
&(utf16.Encode([]rune("CONIN$\x00"))[0]), windows.GENERIC_READ|windows.GENERIC_WRITE,
fileShareValidFlags, nil, windows.OPEN_EXISTING, windows.FILE_FLAG_OVERLAPPED, 0)
_ = windows.GetConsoleMode(handle, &originalMode)
// 503
fmt.Println(originalMode)
// problematic mode
//windows.SetConsoleMode(handle, 992)
}
link:
- https://docs.microsoft.com/zh-cn/windows/console/setconsolemode
- 程序里面读取到的值
992
: https://github.com/muesli/cancelreader/blob/main/cancelreader_windows.go#L192 - reset为
903
: https://github.com/muesli/cancelreader/blob/main/cancelreader_windows.go#L222
@shiluanzzz 你拉下最新的代码,在试试
good job