全部。
问题与您可以在这里找到的设置有关:https://github.com/filmil/bugreports/blob/master/dialog/README.md
我注意到,在交互式 Docker 终端会话中运行对话框实用程序在从“常规”终端运行时与在会话中运行时会给出不同的结果screen
。
在前一种情况下,示例应用程序将按预期显示。见下文。
在后一种情况下,会显示示例应用程序,但屏幕未完全“绘制”。见下文。
起初我以为这是有关 TERM 设置的问题。但我找不到似乎在screen
.有什么想法可以让屏幕会话也正常工作吗?请注意,如果我在没有 docker 的情况下运行“常规”对话框,则显示效果很好。只有当 docker 发挥作用时,显示才会出现“漏洞”。
谢谢你的思考!
答案1
就对话实用程序而言,终端是由程序模拟的终端screen
。反过来,该screen
程序正在与另一个终端通信,通过菜单可以看到该终端是 GNOME 终端、MATE 终端或类似的终端。
对话实用程序使用控制序列一次清除一大堆字符单元。 ECMA-48 标准定义了各种“擦除”控制序列,允许擦除到行尾、显示末尾或下一个氮人物。这些控制序列由 处理screen
。
终端有两种处理此类擦除序列的行为模式:当前的背景颜色或使用擦除默认背景色。在第二个屏幕截图中,您可以看到程序的结果,在本例中是对话实用程序,当终端实际使用默认背景颜色实现擦除时,它认为擦除使用当前背景颜色。 (第一个屏幕截图有两种方式。要么终端使用当前背景颜色进行擦除,要么应用程序首先识别出没有背景颜色擦除能力,并相应地调整其输出,以其他方式制作大的空白区域.)
在 的情况下,此行为是可切换的screen
,就像在其他一些终端和终端仿真器的情况下一样。默认情况下screen
,所谓的背景颜色擦除关闭,并且控制序列导致使用默认颜色进行擦除。使用bce
命令将其打开,导致使用当前背景颜色进行擦除。bce
在所有新屏幕中,可以使用该命令设置设置本身的默认值defbce
。
对话实用程序必须了解这一点。并非所有终端都有背景颜色擦除,更不用说使其可切换了。
通知对话实用程序的是与终端类型相对应的记录(记住,由TERM
环境变量的值表示)从对话节目中可以看出)在 terminfo 数据库中。在该记录中,有一种功能允许程序确定它们正在交谈的终端将执行的操作。它被命名为bce
. (termcap 的等效名称是ut
。)
使这变得复杂的是screen
告诉这些程序终端是什么的方式。其他终端仿真器只是定义它们作为终端的行为方式,并要求程序使用其终端仿真的特定终端类型运行。 tmux 只有终端类型tmux
和tmux-256color
例如,描述 tmux 的单个模拟终端行为。 screen
相比之下,构建了一个奇怪的杂种终端类型,将screen
仿真类型与外部类型相结合,呈现在终端上,例如screen.xterm-256color
在您的情况下,terminfo 数据库中必须有一个匹配的杂种条目。
这里的问题部分在于你screen
首先错误地描述了你的外部、渲染到、终端到。它不是 XTerm,它与 XTerm 不完全兼容,并且无论您可能听到什么,其正确的终端类型不是xterm
。其正确的终端类型是gnome-256color
或者vte-256colour
,这实际上具体描述基于 libvte 的模拟器,例如 GNOME Terminal。 (您可以通过运行infocmp {xterm,vte}-256color
来了解您的系统如何认为这两个终端仿真器不同。而这些只是 terminfo 数据库实际涵盖的仿真部分。)
你需要:
- 为(前端渲染部分)提供正确的终端类型,
screen
以正确描述基于 libvte 的终端模拟器。 screen
为运行的应用程序提供正确的终端类型自己的终端仿真。screen
将创造一个杂种screen.vte-256color
类型。你也可以使用类似的东西screen-256color-bce
反而。- 在创建屏幕之前,通过设置或命令告知
screen
打开背景颜色擦除。请注意,这将受到您调用的任何上下文中文件的可见性的影响。bce
defbce
${HOME}/.screenrc
screen
另一种较差的方法(因为背景颜色擦除对于程序(例如为屏幕上的大空白块着色的对话实用程序)是一种有用的优化)方法是:
- 仍然为(前端渲染部分)提供正确的终端类型,
screen
以正确描述基于 libvte 的终端模拟器。 screen
为运行的应用程序提供正确的终端类型自己的终端仿真,但这一次是其中之一不是宣传背景颜色擦除功能,例如纯色screen-256color
类型。- 留下
screen
背景颜色并擦除。
进一步阅读
- 《字符处理》, 屏幕使用手册。 GNU 项目。
- 清除到行尾在屏幕中使用错误的背景颜色
- 清除到行尾在 tmux 中使用错误的背景颜色
- Curses 界面在 GNU Screen 和 ssh 下有空格
- 托马斯·E·迪基 (1997)。 ”什么是VT220?”。xterm 常见问题解答。隐形岛。
- 托马斯·E·迪基 (2018)。 ”XTerm 和 Look-alikes 中的已知错误:GNOME 终端”。xterm 常见问题解答。隐形岛。