Screen 和 kitty $TERM 应该是什么?

Eva*_*oll 8 gnu-screen tmux environment-variables kitty

为何tmux举报

$TERM=screen-256color
Run Code Online (Sandbox Code Playgroud)

通常kitty报告

$TERM=xterm-kitty
Run Code Online (Sandbox Code Playgroud)

如果我跑tmux进去应该使用哪个kitty?显然kitty提供了高级功能,并且它的报告是有意义的xterm-kitty。为什么屏幕报告有screen-256程序需要知道它们正在屏幕中运行?在 kitty 中调用 screen 运行会有问题吗xterm-kitty

Jos*_*ris 4

如果我在 kitty 内运行 tmux,我应该使用哪个?

\n\n

运行时tmux,您必须使用TERM=screenTERM=tmux或其中一个导数,例如TERM=screen-256colorTERM=tmux-256color

\n\n

男人tmux(1)说...

\n\n
\n

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

\n
\n\n

..并进一步澄清...

\n\n
\n

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

\n
\n\n

……他们还强调必须

\n\n

tmux wiki继续提供额外的说明和答案......

\n\n
\n

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

\n
\n\n

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

\n\n

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

\n\n
\n

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

\n\n

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

\n\n

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

\n\n

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

\n
\n\n

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

\n\n

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

\n\n

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

\n\n
/usr/share/terminfo/s/screen\n/usr/share/terminfo/s/screen-16color\n/usr/share/terminfo/s/screen-256color\n/usr/share/terminfo/s/screen.Eterm\n/usr/share/terminfo/s/screen.gnome\n/usr/share/terminfo/s/screen.konsole\n/usr/share/terminfo/s/screen.linux\n/usr/share/terminfo/s/screen.mlterm\n/usr/share/terminfo/s/screen.mrxvt\n/usr/share/terminfo/s/screen.rxvt\n/usr/share/terminfo/s/screen.teraterm\n/usr/share/terminfo/s/screen.vte\n/usr/share/terminfo/s/screen.xterm-r6\n/usr/share/terminfo/s/screen.xterm-new\n/usr/share/terminfo/s/screen.xterm-xfree86\n
Run Code Online (Sandbox Code Playgroud)\n\n

设置完成后TERM,就可以运行了infocmp。这将报告该值是否有有效的 terminfo。其他测试可以验证基本 terminfo 功能,例如:

\n\n

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

\n