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.