求助:有人有空用 go 实现这段 c 代码吗?

2023-06-07 07:49:59 +08:00
 LonnyWong

https://github.com/PowerShell/openssh-portable/blob/latestw_all/contrib/win32/win32compat/tncon.c

不知道有没有人有空将这个 c 代码用 go 重写出来,可以变成一个 go package ,最好不用 cgo (除非能让用户方便地编译安装)。

最好 queue_terminal_window_change_event() 能变成一个 go 回调。

在用 go 重写时,可以参考这个代码: https://github.com/chzyer/readline/blob/master/rawreader_windows.go

或许 ChatGPT 可以帮忙减轻一部分工作。

关联 issue: https://github.com/trzsz/trzsz-ssh/issues/5#issuecomment-1579581438

3647 次点击
所在节点    程序员
34 条回复
bigtang
2023-06-07 08:09:25 +08:00
用 chatgpt 一段一段转不行吗?
LonnyWong
2023-06-07 08:21:13 +08:00
@bigtang 应该是可以的,我只是没空搞。看有没有人有兴趣参与。
deorth
2023-06-07 08:22:33 +08:00
没有,得加钱
LonnyWong
2023-06-07 08:25:14 +08:00
@deorth 哈,说的好,我也想有钱收。开源搞了这么久,只有一个哥们赞赏了,见 https://github.com/trzsz/trzsz-go 最下面的感谢。
token10086
2023-06-07 09:50:02 +08:00
本来想上来骂两句,结果一看是做开源,我闭嘴了。你们到底谁有空帮作者转转,我点星星关注了
xdeng
2023-06-07 10:03:12 +08:00
跟系统 API 打交道就不可能不用 cgo
proxytoworld
2023-06-07 10:05:32 +08:00
只需要这一个 c 文件?
whoami9894
2023-06-07 10:10:57 +08:00
@xdeng 谁告诉你的?
IanHo
2023-06-07 10:22:36 +08:00
chatgpt 真的好使,建议试试
Nazz
2023-06-07 10:34:27 +08:00
@xdeng 系统调用不需要 CGO
LonnyWong
2023-06-07 10:37:02 +08:00
@proxytoworld 对,就一个文件。然后我在网上找到了 https://github.com/moby/term/blob/9c3c875fad924eb6c9dd32a361b5fc0a49a4feb9/windows/ansi_reader.go#L34

我不知道这个 NewAnsiReader 和 ReadConsoleForTermEmul 会有什么区别。Ctrl + Space 以及 窗口变更大小时的事件,估计是还不支持的。给作者提了个 issue: https://github.com/moby/term/issues/44 ,不知作者会怎么看。
ysc3839
2023-06-07 10:37:28 +08:00
怀疑是 X-Y Problem ,建议说原始需求
ysc3839
2023-06-07 10:39:24 +08:00
如果是为了兼容 Win7 等老系统,建议放弃,让用户去用 winpty 等方案
LonnyWong
2023-06-07 10:43:10 +08:00
@ysc3839 我感觉也是。ReadConsoleForTermEmul 这个是专门为 ssh 开发的,感觉兼容性应该会做的很不错。NewAnsiReader 我看他首页的目标也是 term helper functions 。主要是键盘能按出的组合键太多了,我不清楚他们之间会有什么样的差异,或者作者自己会很清楚。
LonnyWong
2023-06-07 10:45:26 +08:00
@ysc3839 Win11 也不支持 Ctrl + Space ,从 os.Stdin 读不到任何数据,从 ReadConsoleInputW 是可以读到的。但不能与 os.Stdin 同时用,用 ReadConsoleInputW 就得确保所有的键都转换正确,要不然就可能引入其他的问题。
ysc3839
2023-06-07 10:46:09 +08:00
@LonnyWong 所以你是没用 ConPTY ?
ysc3839
2023-06-07 10:51:20 +08:00
@LonnyWong 是我搞烦了,获取输入的话要开启 ENABLE_VIRTUAL_TERMINAL_INPUT
https://learn.microsoft.com/en-us/windows/console/setconsolemode
老系统就让用户去用 MSYS2 吧,没有折腾的必要
LonnyWong
2023-06-07 10:53:22 +08:00
@ysc3839 https://github.com/trzsz/trzsz-go 这个就是用 ConPTY 的,超级慢。

然后 https://github.com/trzsz/trzsz-ssh 是直接连远程服务器的,没用 ConPTY ,如果远程服务器不是 Windows ,就很快。
ysc3839
2023-06-07 10:55:08 +08:00
@LonnyWong 嫌慢的话可以尝试换成 winpty 。你看看网上一堆 Windows 终端都是用 ConPTY 的,也不见他们嫌慢。
LonnyWong
2023-06-07 11:01:02 +08:00
@ysc3839 我说的慢是指 Windows 的 stream IO 特别慢。从 trzsz 进程,将数据通过 stdin 传给 ConTPY 时,这个过程超级慢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/946466

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX