如何在标题栏中打印xterm的尺寸?

如何在标题栏中打印xterm的尺寸?

是否可以在标题栏中打印 xterm 的尺寸?我想要一些简单的东西,比如WxH,只要调整终端大小,它就会更新。

答案1

您可以通过环境变量$COLUMNS和来获取 xterm 的尺寸$LINES。然后,您可以通过记录的某些转义码设置标题,例如在 Bash 提示符 HOWTO 中。这是一个设置标题的一次性命令:

# The title text is the stuff between ; and \a
printf "\e]0;${COLUMNS}x${LINES}\a"

我不知道是否有办法在调整窗口大小时更新标题。然后,您可以捕获 SIGWINCH 信号,该信号是 xterm 在终端大小更改时发送的。如果您使用 Bash,请将其放入您的~/.bashrc

function update_title {
    printf "\e]0;${COLUMNS}x${LINES}\a"
}

trap -- update_title SIGWINCH

警告:我有一种感觉,这个解决方案可能会引起一些奇怪的相互作用。如果您在调整窗口大小时发现某些终端应用程序行为异常,请尝试禁用上面的陷阱并查看问题是否仍然存在。

答案2

这不是 xterm 的内置功能。

如果您在该终端中运行交互式 shell,则可以让它在每次显示提示时更新窗口标题。对于所有流行的 shell,变量COLUMNSLINES都会更新以反映终端的当前尺寸。您可以将转义序列设置为窗口标题作为提示的一部分(您需要告诉 shell 转义序列的宽度为零,否则 shell 会对光标的位置感到困惑),或者您可以安排在显示提示之前打印字符串。在 bash 中,要将窗口标题设置为当前目录,后跟窗口大小,您可以使用类似

set_term_title () {
  printf '\[\033]2;%s %dx%d\007\]' "$PWD" "$LINES" "$COLUMNS"
}
PROMPT_COMMAND="$PROMPT_COMMAND
set_term_title"

在 zsh 中:

set_term_title () {
  printf '\[\033]2;%s %dx%d\007\]' $PWD $LINES $COLUMNS
}
precmd+=set_term_title

如果在 shell 显示提示时调整窗口大小,shell 会收到信号绞车信号。为该信号添加一个处理程序。

trap set_term_title SIGWINCH

如果在执行命令时调整窗口大小,则标题只会在 shell 下次显示提示时更新。在这种情况下,只有前台进程会收到信号,因此 shell 永远不会发现,它只能在命令完成或挂起并且 shell 恢复执行时查询更新的信息。

如果您希望标题的更新独立于终端中执行的内容,则需要加入一些外部组件。一个精美的窗口管理器应该能够做到这一点——但大多数都做不到。在锯鳐中,你可以调整rewrite-window-title添加窗口尺寸而不是应用基于正则表达式的转换。

您可以使用xdotool获取信息并更改标题:

(
  title="$(xdotool getwindowname "$windowid")"
  eval "$(xdotool getwindowgeometry --shell)"
  title="${title% *} ${WIDTH}x${HEIGHT}"
  xdotool set_window --name "$title" "$windowid"
)

请注意,xdotool getwindowgeometry返回的尺寸以像素为单位,而不是字符。我不知道该怎么办反应在没有窗口管理器配合的情况下调整窗口大小。

相关内容