如何在 FBTERM 和 CURSES 上获得白色(或其他)颜色而不扰乱 BOX 绘图字符?

问题描述 投票:0回答:1

我的问题和当前状态:

我正在使用

fbterm
库编写
python-curses
上的 TUI 软件。

  • 我的目标是获得一些颜色,最重要的是纯白色颜色。
  • 我当前的状态:我得到的不是白色,而是有点灰色(不是全亮度)。
  • 或者如果获得白色全亮度,我的盒子(矩形)会被打乱

我如何在 python-curses 中设置颜色:

我按如下方式缩写了颜色对(此处的文档),并在我的代码中使用了这对颜色:

    curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE)

这不是全白,我在这个显示器上见过全白。


我猜发生了什么:

注意:如果您检查黑白值,它们分别为 0 7。

>>> import curses
>>> print(curses.COLOR_BLACK, curses.COLOR_WHITE)
0 7

当用

for i in {0..255}; do echo -ne "\E[2;$i}$i "; done; tput sgr0; echo
列出 fbterm 上的可用颜色时(从此线程读取或仅查看图像)。 0=黑色,7=灰色,15=白色

所以,当我的Python尝试发送白色(

python-curses
认为白色是7)并给出
fbterm
时。
fbterm
收到7并认为它是灰色的。


到目前为止我尝试过的事情:

第一次尝试。将我的白色颜色对设置为 15:

我的理由:如果

python-curses
发送15到
fbterm
,它可能会认为它是白色的。

    curses.init_pair(1, curses.COLOR_BLACK, 15)

由此我得出以下 2 个结果:

  • 如果在
    fbterm
    内执行,则会出错:
    _curses.error: init_pair() returned ERR
  • 如果从我的笔记本电脑执行(
    ssh
    -ed),软件正在运行,并且白色更白。
我第一次尝试的猜测:

这2个不同的输出,可能是由不同的环境变量引起的:

  • 我的笔记本电脑(位于
    lxterminal
    ):
    $TERM
    xterm-256color
  • 在设备上(在
    fbterm
    上):
    $TERM
    linux

第二次尝试。将
TERM
变量设置为
fbterm

我的理由:

fbterm
没有设置正确的环境变量 - >不能使用256种颜色。 (以下来自手册页):

...默认情况下,FbTerm 将环境变量“TERM”设置为“linux”,用户需要 运行“TERM=fbterm /path/to/program”以启用 256 色模式。

所以我设置手动执行

TERM=fbterm
(或
TERM=fbterm python3 main.py
),并执行我的Python代码。 它显示全亮白色,但文字都是乱序的:

 ÚÄÄÄÄÄ¿
 ³Meas.³
 ÀÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿
 ÚÄÄÄÄÄ¿ ³1-shot      ³³n-shot      ³
 ³Setup³ ³            ³³            ³
 ÀÄÄÄÄÄÙ ³            ³³            ³
 ÚÄÄÄÄÄ¿ ³            ³³            ³
 ³Data ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÄÙ
 ÀÄÄÄÄÄÙ
 ÚÄÄÄÄÄ¿
 ³About³ ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿
 ÀÄÄÄÄÄÙ ³Target      ³³Weather     ³
 ÚÄÄÄÄÄ¿ ³            ³³            ³
 ³Sys. ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÄÙ
 ÀÄÄÄÄÄÙ
我对第二次尝试的猜测:没有想法

用于绘制方框的

|
-
(和90度的东西)之类的字符似乎是乱序的,但实际的文本字符串是好的。

/ps:这些矩形是由

window.box()
绘制的,由
curses.newwin()
/

自行生成

你能帮我在这里上色吗?不打乱我的文字?.

接下来我应该尝试什么?

/P.S 尝试PURE WHITE的原因:是为了增加黑色部分的对比度 为了能见度。 (该设备(手持式)将在白天/室外使用)。 此外,欢迎提供提高可视性的提示。谢谢。 /

你能帮我在这里上色吗?不打乱我的文字?.

python ncurses framebuffer terminfo
1个回答
0
投票

根据其文档,fbterm 支持 xterm 256 色扩展的变体:

256 色扩展
       FbTerm 支持 xterm 的 256 色模式扩展。前16种颜色
       是默认的终端颜色。此外,还有 6x6x6 颜色
       立方体和 24 种灰度色调。但是 xterm 的 256 种颜色转义序列
       与 FbTerm 实现的 linux 序列冲突,所以私有 es-
       引入 Cape 序列来支持此功能:

           电子稳定控制系统 [ 1 ; n } 将前景色设置为 n (0 - 255)
           电子稳定控制系统 [ 2 ; n } 将背景颜色设置为 n (0 - 255)
           电子稳定控制系统 [ 3 ; ; ; G ; b } 将颜色 n 设置为 (r, g, b) , n, r,
       g、b 全部在 (0 - 255)

       添加了一个名为“fbterm”的新 terminfo 数据库条目来使用这些
       私有序列,所有基于 terminfo 的程序都应该使用它。
       默认情况下,FbTerm 将环境变量“TERM”设置为值“fbterm”。
       或者,“TERM”变量可以设置为“linux”,在这种情况下
       256 色模式将不可用。

使用 xterm 256 色调色板,您的纯白色是颜色编号 15:

ncurses 提供了

fbterm
的终端描述,您可以在完整的终端数据库中找到它,例如“ncurses-term”。

“linux”(有 8 种颜色)和“xterm-256color”(颜色 线条绘制所需的不同转义序列)都不适用于 fbterm。使用 infocmp 显示差异。

© www.soinside.com 2019 - 2024. All rights reserved.