(got one possible solution on stack overflow : https://stackoverflow.com/a/51769020/9497573)
editado para ser mais preciso
Eu tento tornar o título das minhas janelas na tela automaticamente igual ao caminho do diretório de trabalho PLUS o processo em execução se houver um ( por exemplo: npm start ou vim file.js )
para esse propósito, adicionei essas linhas no meu .zshrc
:
precmd () {
local action = action_to_define
if [[ $TERM == screen* ]]; then
printf -Pn '\ek%~ $action\e\'
fi
}
enviar (de alguma forma) o caminho como título para a tela (veja resposta de Stéphane Chazelas )
e a variável action
imprimiria o programa em execução se ele existir
Eu tentei local action= $(history | tail -1 | sed 's#[0-9 ]*##') | grep vim
porque isso seleciona o prompt do último comando no histórico (assim como history !!
faria se a opção !!
fosse reconhecida, o que não é por algum motivo ...)
e local action= $(ps -lr | tail -1 | sed 's#^.*:...##')
porque isso seleciona o comando do processo em execução
mas não funciona, como se o processo não tivesse sido capturado nem por history
ou ps
... talvez precmd
fosse executado antes que a ação fosse lançada, então tentei outras funções como preexec
ou zshaddhistory
sem sorte ...
como posso capturar o processo em execução para colocá-lo no título?
primeira pergunta publicada
Eu encontrei isto: Tela GNU: mudança de nome de nova janela O que dá uma maneira de fazer algo próximo, modificando o arquivo .zshrc, e fonte a explicação com esta seção do manual da tela:
no entanto ele mostra apenas a pasta, não o arquivo, e eu não entendo uma única palavra do que é exlained, então não posso me adaptar à minha necessidade: que não é imprimir apenas o diretório, mas também o arquivo de trabalho
minha compreensão do script do arquivo .zshrc até agora:
precmd () {
local tmp='%~'
local HPWD=${(%)tmp}
if [[ $TERM == screen* ]]; then
printf '\ek%s\e\' $HPWD
fi
}
- precmd ()
é uma função que é executada antes de cada prompt (também pode ser chpwd ()
) (src: link )
- local
significa que a variável tem um escopo local (src: link )
- tmp='%~'
tmp é uma variável igual à string '% ~' que se refere ao diretório $ HOME (mas por que decompor a próxima variável com essa?)
- HPWD=${(%)tmp}
HPWD é uma variável, tem algo a ver com pwd (print working directory), e é igual a algo com a variável anterior dentro, mas eu não sei qual é o significado de um sinal de dólar antes de algo entre colchetes
- if [[ $TERM == screen* ]]; then printf
se a tela do software estiver em execução e, em seguida, imprimir
- '\ek%s\e\'
sem ideia ...
(e como é que esse ecrã está a ouvir este script?)