我想设置一个 ZSH 挂钩来设置终端窗口标题以包含先前输入的命令和 PWD 等信息。简单的窗口标题设置 shell 函数如下所示:
title() { printf "\033]0;%s\007" "$*" }
但是,在基本用法中,这被证明是完全不够的。使用各种特殊字符(例如;
.我已经尝试明确地替换;
为\;
which 不起作用。如何转义任意字符序列,以便生成有效的转义序列来正确设置窗口标题?
编辑:这个问题实际上似乎是st
.我将在下面发布我想到的解决方案。
答案1
st
将 解释;
为界定转义序列中的另一个参数。st
仅将窗口标题设置为第一个参数的内容。为了解决这个问题,我替换了处理特定转义序列的代码:
if (narg > 1)
xsettitle(strescseq.args[1]);
对此:
if (narg > 1) {
char *buf = malloc(1);
buf[0] = '\0';
int n = 0;
for (int i=1;i<narg;i++) {
buf = realloc(buf, n+=(strlen(strescseq.args[i]) + 1));
strcat(buf, strescseq.args[i]);
if (i + 1 != narg)
strcat(buf, ";");
}
xsettitle(buf);
free(buf);
}
这可能是也可能不是一个好的解决方案。