2015-08-09 74 views
1

当我在命令行中编写程序以使用时,我注意到有一些限制。例如,我不能画出1像素厚的水平或垂直线,就像tmux在窗口中分隔窗格时一样。我只能将光标向下移动,而不像VI看起来那样。如果光标位于底部,我无法刷新页面顶部的信息。tmux,vim,emacs等如何超越* nix终端的UI限制?

所以,当像TMUX程序和VI做到这一点,我想知道,如果他们是:

  • 绘制屏幕从上到下每一个更新(我认为这是极不可能的,否则我可以在我的终端滚动并看到每个重绘)

  • 使用一些库,使图形在终端,如SDL,我也认为这是不太可能的。使用一些标准的系统调用

  • 我不知道

或最终

  • 采取的Linux/Unix的一些特性,它的我完全不知道的好处。

那么,这些程序如何在这样一个看似有限的shell中生成如此丰富的UI?只要答案给我足够的饲料去谷歌横冲直撞,我会很高兴。

我还假设这些程序使用一些常见的方法来做这些事情,但如果这是错误的让我知道。

+0

http://invisible-island.net/xterm/ctlseqs/ctlseqs.html –

回答

1

典型的终端仿真器比立即显现的功能多得多。

本质上的程序只需要字节的输出短序列表示的各种命令,例如移动光标(|下一页|左|右),改变颜色,滚动区,擦除区域等

这些命令通常从转义字符开始(与在终端中键入时按Esc键时生成的字符相同),后跟各种其他字符,具体取决于所需的操作。

一个很好的出发点,了解它是如何工作将是维基百科条目约ANSI escape codes

1

您可以通过将终端设置为原始模式并使用底层操作直接写入终端来手动完成,但使用ncurses库的标准方式是直接写入终端。