我目前正在使用python开发带有基于文本的用户界面的控制台应用程序,这是一系列行业标准软件的一种开源UNIX替代品,并在我看来以最小化如此规模的软件对硬件/软件的要求。
但是,我不喜欢使用curses / ncurses来了解此类库的工作原理并为自己的目的实现它们。为此,我一直在-进行实验-使用ANSI转义序列会持续一段时间。
在某些时候,我觉得有必要像GNU Screen或tmux中那样将我的终端拆分(或用UNIX术语描述,多路复用)到会话,窗口或窗格中。但是,由于我上面提到的原因,我没有在项目中使用它们,而是试图发现它们的来源以获取启发。但是事实是,他们俩都需要C的广泛知识,至少在这一点上对我来说是这样,并且搜索源代码是详尽无遗的。
我发现GNU Screen文档引用了ECMA 48和ANSI X3.64。
屏幕用户手册
每个虚拟终端都提供DEC VT100终端的功能 以及ISO 6429(ECMA 48,ANSI X3.64)和ISO 2022标准(例如,插入/删除行和 支持多个字符集)。有回滚历史 每个虚拟终端的缓冲区和复制粘贴机制, 允许用户在窗口之间移动文本区域。
我还检查了ECMA 48和ANSI X3.64想要实现的目标,找不到线索。
我的问题实际上是在此时出现的。
如何找出那些标准中已实现的编码字符集?例如,ECMA 48的§8.3.123中提到了“设备组件选择模式”,我发现没有实现或使用它的迹象。
Screen或tmux在创建窗口和窗格时的工作原理是什么?他们用于创建窗口或窗格的路径是什么。
我花在第二个问题上的时间很多,无处可去。我以为每次需要更新(调整大小,创建新窗格等)时,它们可能会扫描整个屏幕,绘制边框,用编码字符分隔行或列。我认为此选项可能是一个基本但令人沮丧的解决方案。而且我不确定屏幕或tmux是否可以这种方式工作。但是我很确定我在这里没有抓住关键点。
任何帮助,意见或建议都会受到赞赏。