이전에 입력한 명령 및 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);
}
이는 좋은 해결책일 수도 있고 아닐 수도 있습니다.