Screen 和 kitty $TERM 应该是什么?

Screen 和 kitty $TERM 应该是什么?

为何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-256colorTERM=tmux-256color

男人tmux(1)说...

对于 tmux 内运行的所有程序,必须将 TERM 环境变量设置为“screen”。新窗口将自动将“TERM=screen”添加到其环境中,但必须注意不要在 shell 启动文件中重置它。

..并进一步澄清...

设置在此会话中创建的新窗口的默认终端 - TERM 环境变量的默认值。为了使 tmux 正常工作,必须将其设置为“screen”或其派生项。

...他们还强调必须

tmux 维基继续进行额外的澄清和回答......

tmux 内部的 TERM 必须是“screen”、“tmux”或类似的(例如“tmux-256color”)。不要费心报告不存在的问题!

是否有程序需要知道它们正在屏幕中运行?

是的。许多程序(例如)在( 或)tput中运行时将无法正确显示,除非它们使用正确的值。screentmuxTERM

什么是 TERM?它有什么作用?

环境变量 TERM 告诉应用程序要从 terminfo(5) 数据库读取的终端描述的名称。每个描述都包含许多命名功能,这些功能告诉应用程序发送什么内容来控制终端。例如,“cup”功能包含用于向上移动光标的转义序列。

重要的是 TERM 指向应用程序正在运行的终端的正确描述 - 如果不正确,应用程序可能会出现错误。

infocmp(1) 命令显示终端描述的内容,tic(1) 命令从文件构建并安装描述(两者通常都需要 -x 标志)。

在kitty xterm-kitty中调用screen运行会有问题吗?

不一定,只要TERM运行屏幕中的值设置正确(即TERM=screen-256color)并且有有效的 terminfo 字符串screentmux知道如何处理。

其他衍生品(在我的机器上)是:

/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)。

相关内容