标签: terminfo

在bash脚本中使用"备用屏幕"

备用屏幕用于通过像vim,HTOP,屏幕,alsamixer中,以下,...它像一个不同缓冲液中的终端的内容的,其消失的应用程序退出时,所以整个终端许多"用户交互式"应用终端恢复,看起来应用程序没有输出任何东西.

我想在我自己的shell(bash)脚本中实现完全相同的东西,除了它不必是可移植的.我坚持只使用linux和基于xterm的终端模拟器; 但解决方案应该使用像tput是否可能的东西.但是,我不想使用某些外部脚本语言(甚至是类似C的东西).

虽然我不想使用C(因为它应该是尽可能少的依赖项的bash脚本),但我查看了较少的源代码.它似乎使用terminfo作为数据库,并在其初始化中查找"ti"终端功能.删除行时,它不使用备用的sceen,所以我假设我找到了负责的代码行.

但是,我找不到这样的能力man terminfo.但也许我在错误的道路上寻找解决方案.也许terminfo/tput不是我的朋友.

那么(如何)我可以在bash脚本中使用备用屏幕?有人知道一个简单的应用程序,我可以在其中找到源代码提示吗?(C应用程序或bash脚本或其他......)

linux bash terminal terminfo

36
推荐指数
3
解决办法
6747
查看次数

tmux手册页搜索突出显示

当我在搜索,例如,man ls而在tmux会议上,搜索字符串不高亮显示-页面跳转下来,让搜索字符串是在缓冲区的顶部线条,符合市场预期,但它并不突出.

在不在tmux会话中的同一个shell中执行相同的操作会导致突出显示的搜索字符串.

我不知道从哪里开始寻求解决这个问题.任何提示都表示赞赏.

gnu-screen ansi-escape terminfo terminal-emulator tmux

29
推荐指数
3
解决办法
6121
查看次数

如何确定终端是否具有颜色功能?

我想更改程序以自动检测终端是否具有颜色功能,所以当我从一个不支持颜色的终端(比如(X)Emacs中的Mx shell)中运行所述程序时,颜色会自动关闭.

我不想硬编码程序来检测TERM = {emacs,dumb}.

我认为termcap/terminfo应该可以帮助解决这个问题,但到目前为止,我只是设法将这个(n)curses - 使用代码片段拼凑在一起,当它无法找到终端时会严重失败:

#include <stdlib.h>
#include <curses.h>

int main(void) {
 int colors=0;

 initscr();
 start_color();
 colors=has_colors() ? 1 : 0;
 endwin();

 printf(colors ? "YES\n" : "NO\n");

 exit(0);
}
Run Code Online (Sandbox Code Playgroud)

即我明白了:

$ gcc -Wall -lncurses -o hep hep.c
$ echo $TERM
xterm
$ ./hep
YES
$ export TERM=dumb
$ ./hep           
NO
$ export TERM=emacs
$ ./hep            
Error opening terminal: emacs.
$ 
Run Code Online (Sandbox Code Playgroud)

这是......次优的.

unix terminal termcap terminfo

28
推荐指数
3
解决办法
6955
查看次数

垂直tmux边框仅在使用iTerm时出现虚线

在我的新工作中,我需要使用mac,我正在尝试将tmux与iTerm版本2一起使用.

虽然水平边框似乎与正确的ACS框图字符[1]一起显示,但垂直边框是虚线.这在Terminal.app中不是问题,边框显示正确.无论我选择哪种字体,似乎都会出现此问题.

在我可以找到iTerm和tmux的所有屏幕截图中,这似乎也是如此.这仅仅是iTerm的限制,还是我的terminfo或locale有问题?

[1] Tmux边框显示为xq而不是行?

locale utf-8 iterm terminfo tmux

9
推荐指数
2
解决办法
4881
查看次数

终端/ zsh/terminfo中的应用程序模式是什么?

几个 地方,我看到一些命令,以确保终端(?)处于应用程序模式,然后terminfo数据库设置/查询键绑定将起作用.

我试图找到这种应用模式是什么,但我没有成功.这个应用模式是什么?我认为没有它,Zsh可以正常运行.我对吗?在处理密钥绑定后,是否需要取消设置?一些应用程序(如基于curses的应用程序)不会解决它吗?

这只是一个问题:"什么是应用程序模式或它是如何工作的".我写了其他问题只是为了帮助你理解我的问题.

terminal zsh terminfo

7
推荐指数
1
解决办法
689
查看次数

如何安装terminfo条目(来自Emacs的eterm-color)?

我想在Emacs术语模式缓冲区中运行GNU Screen.当我尝试这样做时,我收到一个错误:

$ screen
Cannot find terminfo entry for 'eterm-color'.
Run Code Online (Sandbox Code Playgroud)

此错误表明我应该安装eterm-color terminfo条目.我试图以两种方式做到这一点,两种方式都失败了.

第一次尝试是使用TERMINFO环境变量.

我的.bashrc:

export TERMINFO=~/.terminfo
Run Code Online (Sandbox Code Playgroud)

然后我做了:

$ mkdir -p ~/.terminfo/e/
$ cp /usr/local/Cellar/emacs/23.3a/share/emacs/23.3/etc/e/* ~/.terminfo/e/
Run Code Online (Sandbox Code Playgroud)

在术语模式缓冲区中,找不到eterm-color条目.它说它从TERMCAP而不是从实际文件中获得eterm-color.

$ infocmp
#       Reconstructed via infocmp from file: TERMCAP
eterm-color,
        am, mir, xenl,
        colors#8, cols#138, it#8, lines#41, pairs#64,
        bel=^G, bold=\E[1m, clear=\E[H\E[J, cr=^M,
        csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
        cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
        cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
        dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
        el=\E[K, el1=\E[1K, home=\E[H, ht=^I, ich=\E[%p1%d@,
        il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m, kbs=\177,
        kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
        kdch1=\E[3~, kend=\E[4~, khome=\E[1~, …
Run Code Online (Sandbox Code Playgroud)

emacs gnu-screen terminfo

6
推荐指数
1
解决办法
2526
查看次数

shell脚本如何判断它是否在支持256色的xterm窗口中运行?

我正在编写一个shell脚本,我希望在出现时使用256色支持.在一个公正的世界中,xterm只需将TERM环境变量设置为xterm-256color,我将用它tput colors来发现支持.

但我们生活在一个不公正的世界. 即使在推出时也xterm设置TERM为.我可以在shell脚本中做些什么来发现脚本是否运行时stdout连接到运行在256色窗口中的tty ?如果是这样,我可以自己设置环境变量.xtermTERM=xterm-256colorxterm

linux shell colors xterm terminfo

6
推荐指数
1
解决办法
886
查看次数

为什么tput中既有setf/setb又有setaf/setab?

我正在尝试使用tput以独立于设备的方式在终端中设置前景色和背景色.

如果termcap/terminfo/tput的整个目的是与设备无关,那么为什么两个版本都明确使用ANSI控件(setaf/setab)和那些不应该(不应该)的版本?

这个讨论引用了terminfo(5),它反过来引用了明确表示那些分别用ANSI而不是ANSI实现的标准.

为什么不存在setf/setb,它们总是设置前景色和背景色.我不在乎它是怎么做的,这就是我使用tput的原因!

unix terminal colors terminfo ansi-colors

6
推荐指数
1
解决办法
733
查看次数

为什么 terminfo[kcuu1] = '\EOA'?

据我所知terminfo(5),kcuu1 应该是按下向上箭头时终端发送的序列。我从来没有见过除了^[[A(现在谈论cat,搞乱终端设置等)以外的任何东西。那么,鉴于我使用的终端(rxvt、gnome-terminal、iTerm)都默认为 TERM=xterm,为什么不是 kcuu1 \E[A

我看到 cuu1 \E[A,但是(再次从手册页),这是我应该发送到终端以移动光标的字符串,而不是终端发送给我的字符串。

顺便说一句,这是 OS X 的情况。

tty termcap terminfo

6
推荐指数
1
解决办法
1458
查看次数

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 或 pad-timing 被丢弃。terminfo 诊断程序的文档对此进行了讨论tack

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

$ tack
Using terminfo from: /home/maom/opt/miniconda3/share/terminfo/x/xterm-256color

Name: xterm-256color|xterm with 256 colors
\r ^M (cr)    = ^M
\n ^J (ind)   = ^J
\b ^H …
Run Code Online (Sandbox Code Playgroud)

emacs terminfo slurm

6
推荐指数
1
解决办法
261
查看次数