linux - tmux、vim、emacs 等如何超越 *nix 终端的 UI 限制?

标签 linux user-interface unix terminal tmux

当我编写用于命令行的程序时,我注意到存在一些限制。例如,我无法像 tmux 在分隔窗口中的 Pane 时那样绘制 1 像素粗的水平线或垂直线。我只能向下移动光标,不能像 VI 那样向上移动。如果光标在底部,我无法刷新页面顶部的信息。

所以,当像 tmux 和 vi 这样的程序这样做时,我不得不怀疑它们是否:

  • 每次更新都从上到下绘制屏幕(我认为这不太可能,否则我可以在终端中向上滚动并看到每次重绘)

  • 使用一些在终端中启用图形的库,例如 SDL,我也认为这不太可能。

  • 使用一些我不知道的标准系统调用

或者最后

  • 利用我完全不知道的 Linux/Unix 的某些功能。

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

我还假设这些程序使用一些通用方法来做这些事情,但如果那是错误的请告诉我。

最佳答案

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

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

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

了解其工作原理的一个很好的起点是关于 ANSI escape codes 的维基百科文章。

关于linux - tmux、vim、emacs 等如何超越 *nix 终端的 UI 限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31904111/

相关文章:

python - 如何修改/更改 "watch"文件?

c - 通过 shell (cat) 或通过程序 (fread) 读取 proc 文件的区别

javascript - Accordion 和标签之间的区别

shell - tcsh - 以破折号 (-) 开头的命令行参数

linux - 使用 grep 命令按首字母、@ 和 "."进行过滤

linux - 脚本中的文件名最后修改日期 shell

c - dlopen(NULL, RTLD_NOW) 返回的主程序句柄的结构是什么?

linux - 使用 vdpau 将运行文本添加到视频流

python - GUI无法正常工作

python - 如何在python ttk中获得平面浮雕条目小部件?