当我尝试设置终端窗口标题时:
$ echo -n "\033]0;foo\007"
\033]0;foo\007
它只是打印纯文本,终端标题没有变化。如何解决?
最佳答案
您缺少 echo 的 -e
,它告诉它解释反斜杠转义序列。试试这个:
$ echo -en "\033]0;foo\007"
虽然 @chris-page 关于 -n
是非标准的说法是正确的,但 bash 内置 echo 和系统/bin/echo 都支持 -n
。但是,系统 echo 不支持 -e
,这是尝试将这些转义码发送到终端时真正重要的功能。
另请注意,系统范围的 /etc/bashrc
将 PROMPT_COMMAND
设置为函数 update_terminal_cwd
,其定义为:
update_terminal_cwd() {
# Identify the directory using a "file:" scheme URL,
# including the host name to disambiguate local vs.
# remote connections. Percent-escape spaces.
local SEARCH=' '
local REPLACE='%20'
local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
printf '\e]7;%s\a' "$PWD_URL"
}
显然是 operating system code 7.为Apple的Terminal.app设置一个特殊的图标链接到当前工作目录。您可以右键单击标题栏中的文件夹图标以在该位置打开 Finder。此代码还通过添加当前工作目录的最后一个组件来稍微修改标题栏标题。
我一直在研究 Terminal.app 的选项卡标题与标题栏标题是如何设置的。显然他们跟随 xterm's很好,其中“图标名称”是选项卡标题,“窗口标题”是标题栏标题。
- 标题栏标题是您使用 osc-2(或 osc-0)设置的任何内容。如果额外的路径组件由 osc-7 设置,它将被添加到标题栏标题的前面。如果在“首选项”->“设置”->“窗口”中选中任何组件,它们将被附加到标题栏标题中。
- 选项卡标题是您使用 osc-1(或 osc-0)设置的任何内容。如果未设置,它将是“首选项”->“设置”->“窗口”的
Title
框中的内容,并附加事件进程名称。如果标题恰好是Terminal
(无论是通过首选项中的文本框设置还是通过osc-1设置),选项卡标题将只是事件进程名称。
关于macos - 终端转义序列在 OS X Mavericks 10.9DP7 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18629224/