O problema é que você não pode dissociar um aplicativo do processo que o lançou, a solução que funciona para mim é ter algum outro processo, já em execução, que faça isso para mim. Aqui está a minha solução:
pkill -n xterm
cd /mnt/0/botany
xterm -g 80x59+885+0 -title 'Botany' -e vim -S bot.vim -o g y d "+res 8|2winc w|res 30" &
xp=
dp=
while ps ax|grep Botany|grep -v grep; do
if [ -f q ]; then
s=$(cat q)
rm q
if [[ "$s" =~ 'images.*' ]]; then
kill $dp 2> /dev/null
vd="$s $vd"
xv -geometry +0+380 ${vd% *} &
dp=$(pgrep xv|tail -1)
else
kill $xp 2> /dev/null
vx="$s $vx"
xv -geometry +0+0 ${vx% *} &
xp=$(pgrep xv|tail -1)
fi
sleep 1
wmctrl -a Botany
fi
done
kill $dp $xp 2> /dev/null
Os três primeiros comandos, para o xterm, compõem o script original que eu usei para abrir este projeto, então este script continuou aberto e aguardando até o momento em que eu fechei o vim e deixei o xterm morrer, ponto no qual esse script de chamada também se fecharia . Então, aqui estava um processo de execução útil, sem fazer nada, e no diretório que eu estava trabalhando.
Eu adicionei o resto do código, que verifica a existência de um arquivo q, lê e imediatamente destrói e mata qualquer instância em execução do visualizador. em seguida, reinicia o visualizador usando o caminho de arquivo do arquivo q como a imagem a ser exibida.
Tudo completamente dissociado do vim, onde meu vimscript apenas grava o caminho do arquivo para o arquivo q, e nunca faz referência ao aplicativo visualizador, xp.
&
?