【问题标题】:Terminal emulator scroll buffer doesn't keep ncurses screens终端模拟器滚动缓冲区不保留 ncurses 屏幕
【发布时间】:2017-04-24 19:55:01
【问题描述】:

使用来自 AIX 的默认 curses 库的系统具有以下行为:每次清理和重写屏幕时,终端模拟器都会将旧屏幕保留在其滚动缓冲区中,因此您可以向后滚动,每个屏幕就在之前它的清理。

现在,使用 ncurses 6,可能还有一些修改(我们不知道原始代码是否有变化),所有终端仿真器都不再保留旧屏幕。

我们是否有什么需要做的(以编程方式、设置等)来确保或允许模拟器在清理屏幕之前将其保留在滚动缓冲区中?

【问题讨论】:

  • 关:如果你不介意我问,它是什么终端模拟器?我认为保存清除屏幕的内容不是标准行为。
  • Putty、Netterm、Secure Shell(chrome 扩展)、mate-terminal、...
  • 哇,你说得对。我刚刚测试了一些:putty 和 konsole 在ESC[2J 处保存行; xterm、rxvt、dtelnet 没有。

标签: ncurses


【解决方案1】:

您所描述的更可能是终端描述,而不是curses 库。但是,您似乎没有描述 alternate screen 功能(AIX 和 ncurses 都使用它来描述 xterm)。

默认情况下,如果您编译 ncurses,它将使用自己的终端数据库。它可以配置(编译时)使用与 AIX 相同的二进制格式,在这种情况下,您可以设置 TERMINFO_DIRS 以首先指向 AIX 的终端数据库。

源代码中的INSTALL 文件告诉您这一点(打包程序当然会读取该文件):

--with-caps=XXX
    Specify an alternate terminfo capabilities file, which makes the
    configure script look for "include/Caps.XXX".  A few systems, e.g.,
    AIX 4.x use the same overall file-format as ncurses for terminfo
    data, but use different alignments within the tables to support
    legacy applications.  For those systems, you can configure ncurses
    to use a terminfo database which is compatible with the native
    applications.

例如,Caps.aix4 文件适用于更高版本的 AIX。

AIX 的系统终端数据库是/usr/share/lib/terminfo,使用其curses 库编译的应用程序会在那里查找。 ncurses 的 TERMINFO_DIRS 变量为它提供了要查看的位置列表(并且被 AIX 诅咒忽略)。

使用 AIX 的终端数据库的一个缺点是它本质上是 SVr3,有一些细微的调整,并且不能正确处理线条绘制(特别是它不假设 sgr0 重置线条-绘图模式)。因此,将一个终端数据库与另一个库一起使用(如果按照建议配置 ncurses 则有可能)会使某些应用程序在绘制线条时出现行为异常。但是以这种方式设置可以让您比较终端描述并查看导致您的问题的功能。

【讨论】:

    猜你喜欢
    • 2022-11-09
    • 1970-01-01
    • 2011-08-27
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    相关资源
    最近更新 更多