gpt4 book ai didi

不清除屏幕的 Python 诅咒

转载 作者:行者123 更新时间:2023-12-04 04:11:14 26 4
gpt4 key购买 nike

我想在不清除屏幕的情况下在 Python 下使用 Curses。原因是我希望我的应用程序在现有屏幕上弹出一个简单的小菜单并很快退出。在退出时将弹出菜单的丑陋部分留在屏幕上是可以接受的,尽管不是首选。这个想法是将它用于快速实用的系统管理应用程序和脚本,其中美学并不重要。

Python init 函数似乎总是清除屏幕。我还记得几年前看到一个非 Python 应用程序做我喜欢的事情,所以我知道这是可能的,至少在 C Curses 程序中。

最佳答案

我不会说“它无法完成”,但我会说“它无法完成”有库存,开箱即用的 Curses/NCurses。

根本问题在于,curses 库在初始化时无法访问终端的当前状态,尤其是当前正在显示哪些字符和字形。

在过去的 PC 上,屏幕是内存映射的,因此当程序运行时,它可以访问现有的屏幕状态,以便捕获并可能在以后恢复它。

对于通用的智能终端来说,不一定如此。在 Linux 或 Mac 上,终端类型是某种“xterm”。在 Windows 控制台终端上,它是 ANSI 风格的终端(注意 xterm 也是一种 ANSI 终端)。终端类型是 termcap/terminfo 库使用的代码,curses 依赖它来知道如何移动光标、删除字符和行、设置颜色或反转视频等。

所有curses 与屏幕的交互都是通过打印ESCape 序列,而不是操纵内存。它不适用于帧缓冲区。

如果您查看 XTerm escape sequences 的列表,您将看到没有任何内容可以将屏幕内容报告回主机程序。但是,有一个备用的帧缓冲区。这方面的一个例子可能是 vim .当您使用 vim 编辑文件时, vim占据整个屏幕。但是当您退出时,您的原始屏幕会恢复。 vim正在切换到备用屏幕缓冲区,并在那里执行所有操作,然后在退出时恢复主屏幕缓冲区。但这是一个简单的切换练习,vim不“知道”,也无法访问原始屏幕缓冲区的内容。

如果您使用 Linux 控制台(您可以在其中使用 FKeys 切换屏幕)或 GNU Screen 之类的实用程序,则它们是不同的。它们依赖于不同的概念(Linux 控制台的设备驱动程序和 GNU Screen 的伪终端),并且整个程序维护每个屏幕本身的状态。但是这个信息不适用于我所知道的通用程序。如果是,则是通过某种专有方法而不是 Curses。

关于不清除屏幕的 Python 诅咒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23003011/

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