2017-04-24 91 views
0

使用來自AIX的默認curses庫的系統具有以下行爲:每次屏幕清理並重寫時,舊屏幕由終端仿真器保存在其滾動緩衝區中,所以你可以回滾,每個屏幕在清理之前。終端仿真器滾動緩衝區不保留ncurses屏幕

現在,使用ncurses 6,也許一些修改(我們不知道是否有原始代碼中的變化),所有終端仿真程序不再保留舊屏幕。

有什麼我們冷做(programmaticaly,設置,...),以確保或允許模擬器保持屏幕在滾動緩衝區之前,他們被清洗?

+0

關:如果你不介意我的問題,它是什麼終端模擬器?我不認爲這是標準的行爲,保存清除屏幕的內容。 –

+0

膩子,Netterm,安全外殼(鍍鉻擴展),mate-terminal,... – Luciano

+0

哇,你是對的。我剛剛測試了幾個:putty和konsole在'ESC [2J'; xterm,rxvt,dtelnet不。 –

回答

0

你所描述的更可能是終端描述,而不是詛咒庫。但是,您似乎沒有描述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與一些小的調整,並且不處理的畫線正確地(具體地,其並不假定sgr0復位線繪製模式)。因此,將一個終端數據庫與另一個庫一起使用(如果按建議配置ncurses,則可能是這種情況),這使得某些應用程序在執行線繪製時會出現問題。但是,通過這種方式進行設置可以讓您比較終端的說明並查看哪些功能會導致您的問題。