May*_*mer 8 python command-line-interface
我想在Python下使用Curses而不清除屏幕.原因是我希望我的应用程序在现有屏幕上弹出一个简单的小菜单,然后很快退出.虽然不是优选的,但是在退出时将弹出菜单的丑陋部分留在屏幕上是可以接受的.我们的想法是将它用于快速实用的系统管理员应用程序和脚本,其中美学并不重要.
似乎Python init函数总是清除屏幕.我还记得几年前看到一个非Python应用程序做了我喜欢的事情,所以我知道这是可能的,至少在C Curses程序中是这样.
我不会说"它不可能完成",但是我会说库存,开箱即用Curses/NCurses,"它无法完成".
根本问题是curses库在初始化时无法访问终端的当前状态,特别是当前正在显示的字符和字形.
在PC上的旧时代,屏幕是内存映射的,因此当程序运行时,它可以访问现有的屏幕状态,以便捕获并稍后恢复它.
对于通用智能终端,情况不一定如此.在Linux或Mac上,终端类型是某种"xterm".在Windows控制台终端上,它是ANSI样式终端(mind xterm也是一种ANSI终端).终端类型是termcap/terminfo库使用的代码,curses依赖于该代码来了解如何移动光标,删除字符和行,设置颜色或反向视频等.
所有与屏幕交互的curses都是通过打印ESCape序列,而不是操纵内存.它不适用于帧缓冲.
如果查看XTerm转义序列列表,您将看到没有任何内容可以将屏幕内容报告回主机程序.但是,有一个备用帧缓冲区.也许是这方面的一个例子vim.使用时编辑文件vim,vim将占据整个屏幕.但是当您退出时,原始屏幕将恢复.vim正在切换到备用屏幕缓冲区,并在那里执行所有操作,然后在退出时恢复主屏幕缓冲区.但这是一个简单的切换练习,vim不会"知道",也无法访问原始屏幕缓冲区的内容.
如果您使用Linux控制台(可以使用FKeys切换屏幕)或GNU Screen之类的实用程序,则会有所不同.这些依赖于不同的概念(Linux控制台的设备驱动程序和GNU Screen的伪终端),整个程序自己维护每个屏幕的状态.但是我知道这个信息不适用于通用程序.如果是,那是通过一些专有方法而不是Curses.
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |