(got one possible solution on stack overflow : https://stackoverflow.com/a/51769020/9497573)
좀 더 정확하게 수정했습니다
화면의 창 제목을 작업 디렉터리의 경로와 자동으로 동일하게 만들어 보았습니다.추가하다(예: npm 시작또는vim 파일.js)
이를 위해 다음 줄을 내 항목에 추가했습니다 .zshrc
.
precmd () {
local action = action_to_define
if [[ $TERM == screen* ]]; then
printf -Pn '\ek%~ $action\e\\'
fi
}
이것은 (어쨌든) 제목으로 화면에 대한 경로를 보냅니다(참조:Stefan Chazeras의 답변)
존재하는 경우 이 변수는 action
실행 중인 프로그램을 인쇄합니다.
나는 local action= $(history | tail -1 | sed 's#[0-9 ]*##') | grep vim
이것이 기록의 마지막 명령에 대한 프롬프트를 선택하기 때문에 시도했습니다. ( history !!
해당 옵션을 인식할 때 와 마찬가지로 !!
어떤 이유로든 그렇지 않습니다...)
local action= $(ps -lr | tail -1 | sed 's#^.*:...##')
실행 중인 프로세스의 명령을 선택하기 때문에
하지만 작동하지 않습니다. 프로세스가 잡히지 않거나 history
... ps
작업이 시작되기 전에 실행될 수도 있으므로 운이 좋든 없든 precmd
다른 기능을 시도했습니다 ...preexec
zshaddhistory
실행 중인 프로세스를 어떻게 캡처하여 헤더에 넣을 수 있나요?
첫 번째 질문 게시됨
나는 이것을 찾았다:GNU 화면: 새 창 이름이 변경되었습니다..zshrc 파일을 수정하여 특정 작업을 수행하는 방법을 제공하고 화면 매뉴얼의 이 섹션에서 설명을 가져옵니다.https://www.gnu.org/software/screen/manual/screen.html#Dynamic-Titles
하지만 파일이 아닌 폴더만 표시되고 설명이 무엇인지 이해하지 못하여 필요에 맞게 조정할 수 없습니다. 디렉토리만 인쇄하는 것이 아니라 작업 파일도 인쇄합니다.
지금까지 .zshrc 파일 스크립트에 대한 나의 이해는 다음과 같습니다.
precmd () {
local tmp='%~'
local HPWD=${(%)tmp}
if [[ $TERM == screen* ]]; then
printf '\ek%s\e\\' $HPWD
fi
}
- precmd ()
각 프롬프트 전에 실행되는 함수입니다 chpwd ()
(src:http://tldp.org/HOWTO/Xterm-Title-4.html)
- local
변수에 로컬 범위가 있음을 나타냅니다(src:https://stackoverflow.com/questions/13667284/how-do-i-keep-functions-variables-local-to-my-zshrc)
- tmp='%~'
tmp는 $HOME 디렉토리를 참조하는 문자열 '%~'와 동일한 변수입니다. (근데 왜 다음 변수를 분해하기 위해 이 변수를 사용합니까??)
- HPWD=${(%)tmp}
HPWD는 pwd(작업 디렉터리 인쇄)와 관련된 변수로 내부의 앞선 변수와 같지만 괄호 앞의 달러 기호는 무엇을 의미하는지 모르겠습니다.
if [[ $TERM == screen* ]]; then printf
-소프트웨어 화면이 실행 중인 경우 인쇄
- '\ek%s\e\\'
전혀 모르겠어...
(어떻게 그 화면이 이 스크립트를 들을 수 있었나요?)
답변1
그게 ${(flag)tmp}
어디야 ?(flag)
매개변수 확장 플래그(참조 info zsh 'flags, parameter expansion'
. %
매개변수 확장 플래그가 켜짐급속한 확장변수가 확장된 경우 $tmp
.
%~
/home/you
프롬프트 확장 에서 현재 작업 디렉터리로 확장하되 ~
.
임시 변수는 필요하지 않으며 ${(%):-%~}
더 간단하게 수행할 수 있습니다.
print -Pn '\ek%~\e\\'
이 -P
옵션은 print
프롬프트 확장도 켭니다( 참조 info zsh print
).
precmd
다음을 사용하는 대신 프롬프트에 문자열을 직접 추가할 수도 있습니다.
PROMPT=$'%{\ek%~\e\\%}$ '
␛kTITLE␛\
GNU 화면에서 인식되고 제목을 설정하는 데 사용되는 이스케이프 시퀀스입니다. info screen -n 'Dynamic Titles'
자세히보다.