我想让我的终端 (rxvt-unicode) 的Terminfo正常工作,以便当我从 Linux ssh 到 macOS 时,Home/End 和其他键可以正常工作。
通常,要使用 Linux 远程主机完成此操作,我会使用如下脚本:
ssh "$1" 'mkdir -p ~/.terminfo/r'
for f in /usr/share/terminfo/r/rxvt-unicode{,-256color}
do
scp "$f" "$1":.terminfo/r/
done
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于 macOS。
当我运行时screen
,首先我收到“TERM 太长 - 抱歉。”。
将其更新到 brew 版本 (4.06.02) 后,我现在收到“无法找到 'rxvt-unicode-256color' 的 terminfo 条目。”
TERM
正确设置为rxvt-unicode-256color
,并且~/.terminfo/r/rxvt-unicode-256color
存在。
跑步screen
用TERMINFO=$HOME/.terminfo/
也没有效果。
我试图了解toe
命令的使用。
从手册页我很难弄清楚命令的作用。
另外,我在互联网上找不到任何示例。
从联机帮助页:
toe - (terminfo) 条目表
[..] 按主要名称列出所有可用的终端类型和说明
有人可以尝试通过示例提供简单的解释吗?
正如标题所问,有什么区别?
我什么时候应该使用其中之一?
另外,有人得到了 putty-256color 的 termcap/terminfo 的“规范”定义吗?谷歌对搜索它的帮助不大。哎呀,谷歌对我在这个问题中的所有问题都没有什么帮助!
假设您TUI
在 shell 中显示以下内容:
我需要一组可以在 shell 中使用的库来完成它。可以肯定的是,ncurses
还没有被使用,因为它产生了依赖。
问题:如何TUI
在 shell 中构建小部件/窗口或其他?
注意:我重新编写了问题以澄清问题。这是一个微不足道的问题,可以分为几个部分来回答,因为这个问题有几个属性。
不幸的是,当提出问题的人理解(知道)答案的某些部分以及问题的结构时,问题可能会被重新设计。
因此,问题是从与原始问题不同的角度提出的。
如何使用 shell 实用程序更改 Linux 控制台的颜色设置¹? 如何使用 shell 实用程序更改终端仿真器的颜色设置¹?
本来,我想在执行shell脚本的过程中改变Linux控制台的背景颜色。以下命题如我所愿。
#!/bin/sh
# set the background color of the terminal
tput setab 6
clear
printf "%s\n" 'background: cyan'
# do some tasks
cd /usr/src/initramfs
pwd
ls -l
# the background of the shell output is cyan
Run Code Online (Sandbox Code Playgroud)
尽管如此,有人可能会遇到几个小故障(或困难)。
例如,如果屏幕未被清除,则在 shell 脚本执行期间,背景颜色仅应用于文本输出。如果tput setab 6
使用命令行提交命令并且没有清除屏幕,则背景颜色仅应用于输出文本的一小部分。如果在命令行tput setab 6
上提交命令并清除屏幕,则背景颜色将应用于全屏,但仅在提交另一个命令之前持续存在。[...]
¹背景色
如何检索像smam
和这样的终端设置的状态rmam
?
原因是我设置rmam
的:
tput rmam
Run Code Online (Sandbox Code Playgroud)
在脚本中,然后smam
在退出时继续设置:
tput smam
Run Code Online (Sandbox Code Playgroud)
但是如果终端rmam
在脚本启动时设置,我不想smam
在退出时设置。
如何才能做到这一点?
如果我这样做ls | less
,ls
检测到它没有连接到终端,这很公平。不同之处在于less
被连接到终端。在此设置中,ls
可以生成彩色和列化输出目标终端,并less
可以正确处理它。您可以使用 使颜色正常工作ls --color=force | less -r
,但这需要更多的输入,而且它不处理列。
如果有一个开关less
可以告诉连接到它的任何东西将其视为真正的终端,那就太酷了。因此,您可以ls | less -T
在less
.
有没有做过这样的事情?
或者less
像它这样的寻呼机真的可以自己做到这一点,还是需要 shell 的合作?例如,shell 是否需要设置一个伪终端ls
来连接?