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);
}

이는 좋은 해결책일 수도 있고 아닐 수도 있습니다.

관련 정보