将窗口标题设置为 st 终端模拟器中的任意字符序列

将窗口标题设置为 st 终端模拟器中的任意字符序列

我想设置一个 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);
}

这可能是也可能不是一个好的解决方案。

相关内容