问题标签 [terminfo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
114 浏览

ncurses - SIGWINCH、bash、dash、tput 和 terminfo

我对tput终端大小之间的交互有点困惑。似乎 的行为tput取决于调用它的外壳程序,或者外壳程序可能负责更改终端设置,或者....某些东西。为了减少问题,请考虑:

在这里,在 bash 中,事情的行为(几乎)符合预期(我说几乎,因为我不太确定 WINCH 处理程序为什么执行两次),并且tput更改的输出与新的终端大小相匹配。但是,当在 dash 中运行时,tput即使终端改变了大小,输出也不会改变。另请注意,WINCH 处理程序似乎被破折号延迟,并且直到输入下一个命令之后(但在它执行之前)才执行。这里应该发生什么?tput以任何方式关心外壳在做什么吗?绞盘是否相关?我想问题是:

怎么tput知道终端的大小?

此外,我不想过多地混淆输出,但在示例的每个 shell 中,都设置了 TERM 并infocmp $TERM打印似乎有效的 terminfo 描述。(我认为,它提供任何输出的事实表明它是有效数据!)

0 投票
1 回答
83 浏览

perl - 如何使用 Term::Cap 发送清除或重置?

当我输出时tput clear | hexdump -c,如果我打开kitty或,我会得到不同的结果xterm。如何使用Term::Cap在各个终端上生成这些终端信号?

我尝试的是从带有设置的文档中直接复制粘贴,

然后我认为这应该可行,

但很可惜,它什么也没做。

如果我为该术语提供一个不同的不存在的名称(而不是undef默认为$ENV{TERM},我得到)

所以我知道它正在查找termcap文件并找到它。

0 投票
1 回答
164 浏览

emacs - SLURM交互节点上的Emacs乱屏

当我远程登录 SLURM 交互节点时,emacs 有时会出现屏幕乱码。正如我在下面所描述的,我认为问题在于 SLURM 交互式节点弄乱了查询/确认终端信号,并且一些字符丢失导致故障。

设置

  • 我实际与之交互的计算机:MacBook Air (10.13.2)
  • 终端:iTerm2 Build 3.1.7
  • SSH 到集群
  • SLURM 交互节点(即srun --nodes=1 ... --pty /bin/bash
  • emacs:终端模式下使用的 GNU Emacs 27.1(即emacs -nw

有时当屏幕重新绘制时,它会出现乱码: 乱码的emacs屏幕

当有许多窗格或移动大量文本时,似乎会发生更多。基于 emacs文档的这一部分,我尝试使用C-l (recenter-top-bottom)重新绘制屏幕,​​并暂时修复了当前的故障。

通过设置$TERM=screen$TERM=xterm-256color在我的.bash-profile我看到不同的配色方案,但故障仍然存在。

请注意,我仅在登录交互式节点时才看到故障,而不是从集群上的头节点。利用在日志节点上没问题的事实,这可以提供有用的诊断信息。这让我怀疑问题是从集群发送的字符的 ENQ/ACK 或填充时间被丢弃了。这在terminfo 诊断程序的文档中进行了讨论。tack

tack登录节点交互节点使用都给出相同的值

Baudrate test登录节点上使用:

Baudrate test交互式节点上使用每秒字符数会慢约 30%:

并且,test ENQ/ACK handshake登录节点上使用给出:

test ENQ/ACK handshake交互式节点节点上使用时给出:

有没有什么办法可以更新 terminfo 来修复故障,并与集群管理员支持一起解决这个问题?

0 投票
1 回答
59 浏览

ncurses - xterm 在原始输入上报告错误的转义序列

我目前正在尝试在 Linux 中进行原始输入(例如,我通常使用 ncurses 或类似的东西)。

我已经做到了,每一个按键都直接报告给我的应用程序,并作为一系列十六进制代码转储。

如果我按键盘上的“a”键,我会得到以下输出:

这很简单。0x61 是 ASCII 'a' 的十六进制代码,我可以反过来将其打印(char) 0x61回控制台。

现在我正在尝试进行基本的行编辑。如果我按下左箭头键,例如使用xterm,我会得到以下输出:

根据这个网站,在“键盘处理”部分,

左箭头 [...] 发送的代码可以给出为kcub1

根据 termcap 文件,顺序应该x1b O D

虽然这发生在xtermtermite中,但它不会在默认的 tty 或urxvt中。

根据xterm 常见问题

转义序列 [...] 被选为“PC 风格”代码(如 SCO“ansi”),即

对于正常模式,和

用于光标应用模式

我想我必须将 xterm 设置为“正常模式”或将 termcap 文件中的所有 O 替换为“[”?

阅读箭头键以支持 xterm 和非 xterm 终端的最佳方式是什么?

然后,还有cub能力:

在同一页上,还有一个关于“参数化字符串”的部分。我想这就是%p1%din the cub 能力所指的?

%p1指“push first parm”,%d指“print pop() as in printf”。

这是什么意思呢?什么被推到哪里?我在任何时候都不会调用 pop() ,第二个选项是什么意思?

感谢您提前提供任何帮助。

编辑:这是一个小 C 程序,演示了我在说什么。如果我使用它编译gcc kilo.c并运行它,按左箭头键会发出27 91 ('[') 68 ('D'). 注意左括号而不是预期的O.

0 投票
1 回答
47 浏览

terminal - 使用 terminfo 仅重置前景色

通过Esc[39m在终端中使用 ANSI 序列,可以在不更改其他属性(如粗体、下划线或背景色)的情况下清除前景色。例如:

我想从 terminfo 功能中检索这个序列,但我找不到它;尝试使用时setaf 9,它通过给出序列切换到明亮的颜色Esc[91m

我发现重置前景色的唯一功能是sgr0,但它也会重置所有其他属性。

是否可以从 terminfo 访问这些功能?

  • 默认前景Esc[39m
  • 默认背景Esc[49m
0 投票
0 回答
20 浏览

shell - 如何仅重置 $(tput bold)?

我正在对日志进行一些后期格式化以提高可读性。

使用正则表达式,我的脚本可以识别流中的一些模式,并通过分别在文本的开头和结尾插入$(tput bold)和值来使对应的文本变为粗体。$(tput sgr0)流不是文本的,它已经包含一些特殊的格式转义序列,如颜色等。

问题是我无法弄清楚如何仅关闭粗体模式。使用$(tput sgr0)会将所有其他当前终端设置降至默认值,包括颜色。

我曾经man terminfo知道我应该使用什么“capname”。例如,我知道如何将一些文本设置为斜体,因为列表包含两者sitm——capname toenter_italic_moderitmcapname to exit_italic_mode

我想使用相同的方法使文本变为粗体,因为列表terminfo包含. 但是既没有“exit_bold_name”字符串变量,也没有对应的capname!boldenter_bold_mode

我错过了什么吗?我应该使用另一种方法吗?在我在 Internet 上找到的所有文章中,它仅使用sgr0capname 解决方案。

0 投票
1 回答
30 浏览

git - 仅当我从某些终端登录时才禁用 git 颜色

问题

我想git在输出到可以处理颜色的设备时自动为输出着色,而在不能处理的时候不给它着色。如何做到这一点?

背景

我有时会使用机器本身为旧机器开发代码。其中一些可以处理 ANSI 颜色,而另一些则不能。在 UNIX 系统上,我们曾经有一个名为TERMINFO的数据库,其中列出了每个终端的功能。通过检查功能很容易判断终端是否支持颜色colors。如果是 -1,那么程序绝对不应该发送 ANSI 颜色序列。

理想情况下,git 会使用TERMINFO来自动检测 ANSI 颜色序列是否合适。但它没有并且仅检查isatty()我怀疑 git 开发人员添加TERMINFO支持并不是一个高优先级,所以我正在寻找任何能够提供相同功能的解决方法。

我已经知道如何禁用 git color 使用git config,这不是我要问的。我希望仅在从不支持 ANSI 颜色的终端(例如 Digital VT340)登录时禁用它。

我也已经看到了GIT_CONFIG_PARAMETERS="'color.ui=never'"环境变量,但是根据@bk2204 和@torek 的说法,该变量很快就会消失。