Linux 如何从头开始(或不是从头开始)编写终端仿真器?

Linux 如何从头开始(或不是从头开始)编写终端仿真器?,linux,terminal,d,terminal-emulator,Linux,Terminal,D,Terminal Emulator,作为练习,我想从头开始为Linux编写一个终端仿真器,以了解其中涉及哪些活动部件。我选择的语言是D(因为我现在正在学习) 很明显,它不一定是什么大东西。我希望它有一个背景色(和不透明度,稍后)显示命令promt的窗口。用户可以键入命令,命令将输出结果。基本的东西。除了我甚至不知道从哪里开始 我想视觉部分应该由类似gtk的东西来处理(我从未使用过),但是其他的东西呢?有人能描述一下可能的架构吗?我应该看什么 了解从零开始编写哪些部分是有意义的(考虑到我选择的语言),以及哪些部分可以用作第三方库或二

作为练习,我想从头开始为Linux编写一个终端仿真器,以了解其中涉及哪些活动部件。我选择的语言是D(因为我现在正在学习)

很明显,它不一定是什么大东西。我希望它有一个背景色(和不透明度,稍后)显示命令promt的窗口。用户可以键入命令,命令将输出结果。基本的东西。除了我甚至不知道从哪里开始

我想视觉部分应该由类似gtk的东西来处理(我从未使用过),但是其他的东西呢?有人能描述一下可能的架构吗?我应该看什么

了解从零开始编写哪些部分是有意义的(考虑到我选择的语言),以及哪些部分可以用作第三方库或二进制文件,也会很有帮助


我也意识到可能还有其他类似的问题,但我找不到高质量的答案。如果您知道这些答案,请链接到它们。

您已经在Mozilla公共许可证下用D实现了一个优秀的终端仿真器。代码如下:


不过,Adam Ruppe(D Cookbook的作者)是一个好的开始。

为什么不将您最喜欢的开源终端从当前语言“翻译”成
D
。然后,您可以决定是否已经学到了足够的知识,并可能找到更好的术语(特例术语)进行进一步的研究。祝你好运。我认为这个问题不适合堆栈溢出,因为它不是很具体。我想你能做的最好的事情就是看看其他终端模拟器(也可能不是用D写的),移植一些代码或者看看它们。但我不认为你应该做什么有一个普遍的答案,因为这是你的项目,你将决定你将添加什么和不添加什么。但是,如果您想查看用D编写的终端仿真器,github上有一个:我怀疑您可能将终端仿真器与shell混为一谈。终端仿真器只是模拟I/O设备,它不运行命令,也不知道有关提示的任何信息。在Linux上,终端仿真器通过打开多路复用器设备
/dev/ptmx
(可能使用
posix\u openpt()
)来分配伪终端,这会导致从设备出现在
/dev/pts
。然后,终端仿真器通常生成一个shell,其中std{in,out,err}连接到从设备。终端仿真器信息:ECMA-48,终端仿真器的一个奇妙测试是它处理vim编辑器程序的能力。当然,如果你不知道的话,学习vim有点像学习曲线,但是有了所有的刷新、语法高亮显示的屏幕颜色等等,“vi”有着打破模拟器的悠久历史。是的,我的终端模拟器正是OP所要求的:它是100%从头开始的(好吧,我使用xlib和内核,但这不算数:))并处理许多常用程序,包括vim。它实际上比你想象的要复杂得多。。。终端仿真是一件痛苦的事。顺便说一句:我实际上在Windows(像putty一样回到我的linux机器)和linux上都使用我的每日终端。它有些地方有轻微的缺陷,效率低下,但没有交易破坏者,而且,它是我的:P