Você pode usar xdotool
para definir a propriedade WM_WINDOW_ROLE
da janela:
$ xdotool set_window --role <ROLE_STRING> <WINDOW_ID>
Você pode encontrar WINDOW_ID
por PID
:
$ xdotool search --onlyvisible --pid <PID>
Observe que há uma mensagem de bug inofensiva impressa em xdotool 2.x
ao usar este método:
$ xdotool search --onlyvisible --pid 16076
Can't consume 1 args; are only 0 available. This is a bug.
23068675
Você pode usar xdotool 3.x para se livrar deste bug.
Dito isso, é possível criar um wrapper personalizado para iniciar uma instância de gvim
, esperar que uma janela apareça e definir uma nova string de função nela. Poderia ser assim:
#!/bin/sh
role="$1"
shift
gvim --nofork "$@" &
pid="$!"
window_id=
while true; do
window_id=$(xdotool search --onlyvisible --pid "$pid" 2>&1 | tail -1)
case $window_id in
''|*[!0-9]*) continue ;;
*) break ;;
esac
done
xdotool set_window --role "$role" "$window_id"
Uso:
$ ./gvim.sh FANTASTIC-NEW-ROLE <FILENAME> <OTHER-GVIM-PARAMS> <...>
Esta linha:
window_id=$(xdotool search --onlyvisible --pid "$pid" 2>&1 | tail -1)
funcionará bem com xdotool 2.x
e 3.x
. Demora algum tempo a partir do início de um processo gvim
para a janela sendo mostrada, de modo que o loop como aqui ou o sleep()
é necessário. A opção --nofork
é necessária para poder obter gvim
instance PID. Uma maneira portátil de verificar se a variável contém um número é copiada de essa resposta SO .
Se você já usa algum tipo de gancho em janelas recém-criadas, como devilspie , esse código pode não funcionar para você. xdotool
deve ser usado com --onlyvisible
porque uma nova instância de gvim
criará duas janelas, mas apenas uma visível. Se devilspie
, por exemplo, mover a janela gvim
para uma área de trabalho diferente, ela não ficará mais visível.