求助:有人有空用 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

3646 次点击
所在节点    程序员
34 条回复
whitehack
2023-06-07 11:11:06 +08:00
给了个 star.实用工具
Masoud2023
2023-06-07 11:21:02 +08:00
看到那行`#include <windows.h>`我觉得你不用 cgo 基本就等于做梦了
xdeng
2023-06-07 11:31:30 +08:00
@Nazz 说错了
cppc
2023-06-07 11:34:32 +08:00
那个代码里面调用了 win32 函数,纯 GO 怕是不得行
LonnyWong
2023-06-07 11:39:07 +08:00
@Masoud2023
@cppc

不是纯 Go ,只是最好不用 CGO ,可以调用 win32 的 dll ,参考 https://github.com/chzyer/readline/blob/master/rawreader_windows.go 这个来实现。
timonwong
2023-06-07 11:42:12 +08:00
不见得要 cgo ,不过要 syscall
ysc3839
2023-06-07 11:51:29 +08:00
所以说了这么多楼主有去试一下 ENABLE_VIRTUAL_TERMINAL_INPUT 吗?
现成的包都有 https://pkg.go.dev/cdr.dev/coder-cli/internal/x/xterminal
LonnyWong
2023-06-07 12:27:35 +08:00
ysc3839
2023-06-07 12:53:27 +08:00
@LonnyWong 所以原始问题是什么?
LonnyWong
2023-06-07 13:06:39 +08:00
@ysc3839 关联 issue 里说的问题 https://github.com/trzsz/trzsz-ssh/issues/5#issuecomment-1579581438
Ctrl + Space 键的问题。

另外,我发现 https://github.com/PowerShell/openssh-portable/blob/latestw_all/contrib/win32/win32compat/tncon.c 这里面订阅窗口大小变更事件的做法挺好的,比我每秒检测一下窗口大小有没有变化好多了。
ysc3839
2023-06-07 13:25:45 +08:00
@LonnyWong 这个问题确实是只能自己解析了。

不过我自己的态度是,这种问题还是不要在自己程序里解决,尤其是移植起来很麻烦的情况。
不知道改用 mintty 是否能解决,不行的话还可以试试 MSYS2 兼容层。
LonnyWong
2023-06-07 13:31:41 +08:00
@ysc3839 我感觉 https://github.com/moby/term/blob/9c3c875fad924eb6c9dd32a361b5fc0a49a4feb9/windows/ansi_reader.go#L34 这个稍微改一下,或许也是可以的,看作者会不会支持了。
lysS
2023-06-07 14:20:11 +08:00
这可不是一个 c 文件的事,通常 h 引 h, h 又引 h
LonnyWong
2023-06-07 14:57:08 +08:00
@lysS 这个真的就这个文件,外加一个 .h

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

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

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

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

© 2021 V2EX