st端末エミュレータでウィンドウタイトルを任意の文字列に設定する

st端末エミュレータでウィンドウタイトルを任意の文字列に設定する

以前に入力したコマンドやPWDなどの情報を含めるように端末ウィンドウのタイトルを設定するためにZSHフックを設定したいと思います。単純なウィンドウタイトルの設定シェル関数は次のとおりです。

title() { printf "\033]0;%s\007" "$*" }

しかし、基本的な使用法では、これだけでは完全に不足していることがわかりました。さまざまな特殊文字を使用する(例:無駄な文字を明示的に変更しようとしました。);ウィンドウのタイトルを正しく設定するために有効なエスケープシーケンスが生成されるように、ランダムな文字シーケンスをエスケープするにはどうすればよいですか。;\;

編集:問題は実際には次のとおりです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);
}

これは良い解決策かもしれません。

関連情報