为何tmux
举报
$TERM=screen-256color
通常kitty
报告
$TERM=xterm-kitty
tmux
如果我跑进去应该使用哪个kitty
?显然kitty
提供了高级功能,并且它的报告是有意义的xterm-kitty
。为什么屏幕报告有screen-256
程序需要知道它们正在屏幕中运行?在 kitty 中调用 screen 运行会有问题吗xterm-kitty
?
答案1
如果我在 kitty 内运行 tmux,我应该使用哪个?
tmux
当你跑步时必须使用TERM=screen
, TERM=tmux
, 或其中一种衍生物,例如TERM=screen-256color
或TERM=tmux-256color
。
男人tmux(1)
说...
对于 tmux 内运行的所有程序,必须将 TERM 环境变量设置为“screen”。新窗口将自动将“TERM=screen”添加到其环境中,但必须注意不要在 shell 启动文件中重置它。
..并进一步澄清...
设置在此会话中创建的新窗口的默认终端 - TERM 环境变量的默认值。为了使 tmux 正常工作,必须将其设置为“screen”或其派生项。
...他们还强调必须。
这tmux 维基继续进行额外的澄清和回答......
tmux 内部的 TERM 必须是“screen”、“tmux”或类似的(例如“tmux-256color”)。不要费心报告不存在的问题!
是否有程序需要知道它们正在屏幕中运行?
是的。许多程序(例如)在( 或)tput
中运行时将无法正确显示,除非它们使用正确的值。screen
tmux
TERM
什么是 TERM?它有什么作用?
环境变量 TERM 告诉应用程序要从 terminfo(5) 数据库读取的终端描述的名称。每个描述都包含许多命名功能,这些功能告诉应用程序发送什么内容来控制终端。例如,“cup”功能包含用于向上移动光标的转义序列。
重要的是 TERM 指向应用程序正在运行的终端的正确描述 - 如果不正确,应用程序可能会出现错误。
infocmp(1) 命令显示终端描述的内容,tic(1) 命令从文件构建并安装描述(两者通常都需要 -x 标志)。
在kitty xterm-kitty中调用screen运行会有问题吗?
不一定,只要TERM
运行屏幕中的值设置正确(即TERM=screen-256color
)并且有有效的 terminfo 字符串screen
或tmux
知道如何处理。
其他衍生品(在我的机器上)是:
/usr/share/terminfo/s/screen
/usr/share/terminfo/s/screen-16color
/usr/share/terminfo/s/screen-256color
/usr/share/terminfo/s/screen.Eterm
/usr/share/terminfo/s/screen.gnome
/usr/share/terminfo/s/screen.konsole
/usr/share/terminfo/s/screen.linux
/usr/share/terminfo/s/screen.mlterm
/usr/share/terminfo/s/screen.mrxvt
/usr/share/terminfo/s/screen.rxvt
/usr/share/terminfo/s/screen.teraterm
/usr/share/terminfo/s/screen.vte
/usr/share/terminfo/s/screen.xterm-r6
/usr/share/terminfo/s/screen.xterm-new
/usr/share/terminfo/s/screen.xterm-xfree86
TERM
设置完成后,就可以运行了infocmp
。这将报告该值是否有有效的 terminfo。其他测试可以验证基本 terminfo 功能,例如:
for terminfos in $(find /usr/share/terminfo/s -type f -name 'screen*' -printf '%f\n' -o -name 'tmux*' -printf '%f\n'); do export TERM=$terminfos; printf "%s: %sthis is foreground color 10 %sitalics%s and now all attributes are turned off\n" "$terminfos" "$(tput setaf 10)" "$(tput sitm)" "$(tput sgr0)"; done
答案2
Kitty 的高级功能与tmux
.例如,如果您运行tmux
然后运行
$ kitty icat ~/Pictures/fc.jpg
Terminal does not support reporting screen sizes via the TIOCGWINSZ ioctl
$ TERM=xterm-kitty kitty icat ~/Pictures/fc.jpg
Terminal does not support reporting screen sizes via the TIOCGWINSZ ioctl
所以你可以看到,即使你TERM
在 tmux 下捏造以匹配 Kitty 报告的情况,你最多也会发现一个死胡同。在 Ranger 下,范围在尝试渲染预览时会崩溃。
答案3
这是几个问题。以下是更有趣的答案:
为什么tmux报告
$TERM=screen-256color
旧版本的 tmux 使用 TERM=screen 或 TERM=screen-256color“因为它就在那里”。最终,情况发生了变化(a)因为 tmux 的开发人员想要添加功能,以及(b)因为屏幕干扰使用斜体。
通常小猫会报告
$TERM=xterm-kitty
如果我在 kitty 内运行 tmux,我应该使用哪个?
您应该让 tmux 选择(它查看外部终端描述以了解如何处理颜色和功能键)。
- 为什么屏幕报告它是屏幕-256
可能是说“screen-256color”。 GNU 屏幕查看外部 $TERM 值并选择一个内部值。但这个特定的文件来自用户的 .screenrc 文件(通常 - 打包者可能会参与其中)。
- 是否有程序需要知道它们正在屏幕中运行?
并不真地...
- 在kitty xterm-kitty中调用screen运行会有问题吗?
一些screen
默认情况下,配置使用 bce(背景颜色擦除)。 kitty 不支持该功能(ymmv)。