gpt4 book ai didi

terminal - curses 如何保留屏幕内容?

转载 作者:行者123 更新时间:2023-12-02 21:38:02 27 4
gpt4 key购买 nike

当您启动(n)curses程序时,它将从终端模拟器中删除滚动条,清除屏幕,滚动日志(历史记录)也将消失。当退出程序时,屏幕内容重新出现,滚动条返回,滚动缓冲区返回。

ncurses 是如何实现的?我研究了所有 ANSI 转义码,我看不出有什么可以做这样的事情。这背后的技术是什么?

最佳答案

xterm 常见问题解答中对此进行了详细讨论 Why doesn't the screen clear when running vi?

ncurses本身并不能做到这一点。根据终端描述中提供的转义序列,这是由终端完成的。

该行为来自备用屏幕缓冲区,它是在 X10R4(1986 年底)中随 xterm 引入的。 xterm 维护两个缓冲区:

  • 普通屏幕缓冲区(您在 VT100 窗口中看到的内容),包括回滚区域,以及
  • 备用屏幕缓冲区(不包括回滚区域)

xterm(以及使用此功能的程序,例如 rxvt)可识别用于在两个缓冲区之间切换的转义序列。由于传统的 termcap 没有此功能,因此开发人员使用 termcap 初始化序列 tite (对应于 terminfo smcup rmcup)。从技术上讲,这些名称指的是游标寻址模式,但没有人(太)关心。

可以通过在运行时删除 termcap tite 功能(来自 TERMCAP 环境变量)来抑制原始 xterm 的备用屏幕功能,但该方法无法与使用文件的 terminfo 一起使用。自 1997 年以来,xterm 实现了一组更新的转义序列,这些序列可以被 xterm 忽略。其他一些程序允许抑制该功能,但通常情况下,这些程序不会。

关于terminal - curses 如何保留屏幕内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39188508/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com