终端仿真器滚动缓冲区不保持ncurses屏幕

时间:2017-04-24 19:55:02

标签: ncurses

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

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

我们有什么冷(programmaticaly,settings,...)来确保或允许模拟器在清理之前将屏幕保留在滚动缓冲区中吗?

1 个答案:

答案 0 :(得分:0)

您所描述的更有可能是终端描述,而不是 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 curses忽略)。

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