Quero definir o tmux como padrão ao abrir terminais (por exemplo, Yakuake, Konsole), mas excluir o terminal no gerenciador de arquivos Dolphin.
Coloquei o seguinte trecho no~/.zshrc
if [[ -x "$(command -v tmux)" ]] && [[ -n "${DISPLAY}" ]] && [[ -z "${TMUX}" ]]; then
windowname=$(xdotool getactivewindow getwindowname)
if [[ ${windowname} =~ ".*Yakuake$" ]] || [[ "${windowname}" =~ ".*Konsole$" ]]; then
exec tmux
fi
fi
Mas o comando xdotool getactivewindow
parece sempre obter a janela ativa errada. Então escrevi este trecho ~/.zshrc
para teste.
xdotool getactivewindow && xdotool getactivewindow getwindowname
sleep 3
xdotool getactivewindow && xdotool getactivewindow getwindowname
Mas obtenho o resultado abaixo quando o Yakuake é aberto por atalhos ctrl+ alt+ Y. Parece que xdotool
o nome da janela ativa está errado, qual a última janela ativada (no exemplo é sublimetext
), e deveria ser Yakuake.
94371843
~/.zshrc - Sublime Text
65011722
~ : sleep — Yakuake
Quando Yakuake ou Konsole ativados pelo plasma KDE ou linha de comando apresentam o mesmo fenômeno.
Como posso iniciar o tmux como padrão quando os terminais abertos excluem o terminal no Dolphin?
Atualização : Graças à resposta de Kamil Maciorowski , tudo funciona perfeitamente depois de adicionar este trecho no meu arquivo ~/.zshrc
.
if [[ -x "$(command -v tmux)" ]] && [[ -n "${DISPLAY}" ]] && [[ -z "${TMUX}" ]]; then
if [[ ! "$(readlink -f /proc/${PPID}/exe)" =~ "dolphin" ]]; then
exec tmux
fi
fi
Acho que um shell em um terminal no Dolphin será visto
/proc/$PPID/exe
como um link simbólico/usr/bin/dolphin
ou algo assim. Em vez dexdotool
, userealpath /proc/$PPID/exe
e construa sua lógica com base no resultado.$PPID
é o ID do processo do pai do shell, definido quando o shell é inicializado.