【问题标题】:Writing a Linux Terminal emulator编写 Linux 终端模拟器
【发布时间】:2014-04-29 12:13:41
【问题描述】:

我想编写一个 x11 终端仿真器,但我不知道我应该如何生成并与 shell 通信,是否有任何基本(伪或 C)代码?比如要创建什么样的 PTY、如何将 shell 绑定到它、我必须捕获或发送什么信号等等。我真的不想对整个 xterm 源进行排序。

编辑:哦,我想实现一种与其中的任何应用程序通信的方式,我应该如何进行功能发现? “客户端”中有一些隐藏的 ansi 序列,希望它不会与其他终端仿真器发生冲突?一些环境变量,希望它不会与“客户端”冲突或被 shell 删除?

【问题讨论】:

  • 从阅读Advanced Linux Programmingthe tty demystified开始,然后研究例如源代码。 xtermgnome-terminal(研究这样的代码比重新发明它更省时)
  • 我有点希望避免学习外国代码:P
  • 那么您可能没有足够的时间来实现您雄心勃勃的目标。也许研究rxvt 源代码(它可能更小)。为什么要重新发明另一个终端仿真器?为什么不改进现有的?
  • 因为我不只是想要终端仿真器应用程序,而是将它嵌入到我的一个更大的、有点像 ide 的程序中。
  • 现在有图书馆在做这种事情吗?编辑:libvterm,测试它。

标签: linux tty pty terminal-emulator


【解决方案1】:

YAT(又一个终端)https://github.com/jorgen/yat 适合嵌入到 Qt Quick 程序中。欢迎为改进做出贡献。 (免责声明:一个朋友开始了那个项目,我有时也在做这个项目。)它采用了一种基本正确的方法(例如,它正确使用了 Linux 伪终端,在我的朋友解释之前我并不知道这一点),并且有很多特点;但是解析器是从头开始编写的,还没有功能完整或没有错误。

不幸的是,到目前为止,大多数终端实现都是从头开始的,或者使用一次性的单片分叉(例如来自 rxvt),这需要大量工作,并且导致所有这些都是不完整的。所以我认为一个更好的选择是使用一个名为 libvterm:http://www.leonerd.org.uk/code/libvterm/ 的可重复使用的纯逻辑库,或者将你的终端建立在已经使用它的终端上。这样,如果您发现错误并修复它们,您将改善整个生态系统。

https://github.com/timmoorhouse/imgui-terminal 很有趣,并且(至少在某种程度上)有效,但它是 IMO 用 libvterm 重写的主要候选者。如果您喜欢 OpenGL 中的即时模式渲染,无论如何它可能是一个不错的选择。

http://41j.com/hterm/ 确实使用了 libvterm,并添加了一些 libvterm 没有的功能,用于内联图形渲染(ReGIS 和 PNG)。但是代码不够优雅或不够便携,IMO,并且图形渲染“浮动”在文本上而不是真正的内联。对于某些用例,它仍然可能是一个足够的起点。在我的 fork https://github.com/ec1oud/hackterm 中,我使用大多数现代系统库构建它,但它仍然依赖于包含在内的过时版本的 SDL。

【讨论】:

  • 您好,请问有libvterm的官方文档或教程吗?在 leonerd.org.uk 网站上,我没有看到一个。
【解决方案2】:

好的,如果有人也需要这个,并且正在使用 lua,我发现 http://www.tset.de/lpty 库工作正常。仍在测试 ansi 转义和东西,但应该可以工作。

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2013-08-29
    • 2011-06-20
    • 1970-01-01
    • 2019-05-10
    相关资源
    最近更新 更多