2016-07-28 94 views
0

作为一个练习,我想从头开始编写一个Linux终端模拟器,以便了解涉及哪些运动部件。我选择的语言是D(因为我目前正在学习它)。如何从头开始编写终端仿真程序(或不是从头开始)?

它显然不具备成为一件大事。我希望它有一个背景颜色的窗口(以及不透明度,稍后)显示命令promt。用户可以输入一个命令并输出结果。基本的东西。除了我甚至不知道从哪里开始。

我想视觉应该由像GTK(我从来没有工作过)来处理,但对于一切?有人可以描述一个可能的架构,我应该看什么?

这也将是有益的知道它使这部分感觉从头开始编写(给我选择的语言)和哪些部分,我可以作为第三方库或二进制文件的使用。

我也意识到可能存在这样一个别的问题,但是我无法找到质量答案。如果你知道这样的答案,请链接到他们。

+0

为什么不将您最喜爱的开源终端从当前语言“翻译”为“D”。然后你可以决定你是否学到了足够的知识,并且可以找到更好的术语(特殊术语)来进一步研究。祝你好运。 – shellter

+2

我不认为这个问题适合堆栈溢出,因为它不是很具体。我猜你可以做的最好的事情是查看其他终端仿真程序(也可能不用D编写),并移植一些代码或查看它们。但我不认为你应该做什么是一个普遍的答案,因为它是你的项目,你将决定你将添加什么,你不会添加什么。但是,如果你想看看用D编写的终端仿真器,那么在github上有一个:https://github.com/gnunn1/terminix – WebFreak001

+2

我怀疑你可能会把终端仿真器与shell混淆。终端仿真器只是模拟一个I/O设备,它不运行命令或知道任何关于提示的信息。在Linux上,终端仿真器通过打开多路复用器设备'/ dev/ptmx'(可能使用'posix_openpt()')来分配伪终端,这会导致从设备出现在'/ dev/pts'处。然后,终端仿真器通常会生成一个std {in,out,err}连接到从设备的shell。 – ninjalj

回答

3

您已经在Mozilla公共许可协议中的d实现优良的终端模拟器。代码在这里:https://github.com/gnunn1/terminix/tree/master/source/gx/terminix/terminal

然而,一个好的开始是Adam Ruppe's(作者为“D Cookbook”)https://github.com/adamdruppe/terminal-emulator

+1

是的,我的终端模拟器正是OP所要求的:它从头开始是100%(当然,我使用xlib和内核,但不计算:))并处理很多常见程序,包括vim。它实际上比你想象的要复杂得多......终端仿真是一个令人头痛的问题。顺便说一句:我实际上使用我的每一天的终端,在两个Windows(sshing回到我的Linux盒子像腻子)和Linux。这是轻微的错误和低效率的地方,但没有dealbreakbreakers,此外,它是我的:P –