当您首先启动 TUI 程序时,会话的内容已经被覆盖。你可以看到事实就是如此。
ncurses
当使用诸如此类来呈现其文本用户界面的TUI 程序启动时,它会清除屏幕。那时,屏幕上的所有内容都已被覆盖。
您所缺少的,以及您不知道其名称的,是具有备用屏幕缓冲区的终端的想法。当这样的 TUI 程序启动时,它会发出转义序列以切换到终端的备用屏幕缓冲区(如果有)。然后它的所有输出都会进入该缓冲区。当程序退出或自行挂起时,它会发出转义序列来恢复主屏幕缓冲区,当 TUI 程序在备用缓冲区上显示其用户界面时,主屏幕缓冲区保持不变。
对于没有备用屏幕缓冲区的终端,没有可发出的转义序列,并且全屏用户界面会覆盖终端上以前的内容。
terminfo
程序在或数据库中查找这些转义序列termcap
。在terminfo
世界上,终端功能被命名为smcup
和rmcup
。在termcap
世界上他们被命名为ti
和te
。根据记录,他们没有提到屏幕缓冲区。
相反,他们谈论进入和退出“光标寻址模式”。这个概念是,呈现全屏界面的 TUI 程序在光标寻址模式下运行,该程序实际上不需要终端滚动;而仅输出滚动文本行的 TUI 程序则不然。因此,人们可以切换进入和退出这种模式。(在现实世界中,事情并不是那么清晰。例如:现代 shell(如 Z Shell)移动光标以进行行编辑、菜单完成和$RPROMPT
; 但不要切换到备用屏幕缓冲区,不要拥有成熟的全屏用户界面,并以滚动方式操作。)
因此,这些功能通常不仅仅是切换缓冲区。 smcup
还包含用于保存当前光标位置的转义序列,以及rmcup
用于恢复当前光标位置的转义序列(如果终端具有此类转义序列)。
您的问题是两件事之一:
termcap
没有针对您的特定终端类型的te
和ti
条目,因为该条目不完整。终端类型取自服务器端TERM
的环境变量。它的值表示数据库中的一个条目。因此,请确保您的环境变量命名的条目的功能与您的(本地)终端模拟器的功能相匹配。如果没有与包含和的终端仿真器相匹配的条目,那么您只需添加这样的条目即可。termcap
TERM
/etc/termcap
ti
te
归档时间: |
|
查看次数: |
1311 次 |
最近记录: |