Como posso identificar de forma única diferentes instâncias do GVim?

4

Com gnome-terminal , posso usar o argumento de linha de comando --role para tornar a nova janela de terminal identificável exclusivamente pelo gerenciador de janelas ou outros aplicativos, por exemplo:

gnome-terminal --role=irc

Isso define a função da janela X como "irc", conforme exibido por xprop :

WM_WINDOW_ROLE(STRING) = "foo"

Existe uma maneira de fazer o mesmo com o GVim? Eu vasculhei gvim --help e pesquisei sem sucesso.

    
por Hubro 22.04.2015 / 03:01

1 resposta

4

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.

    
por 22.04.2015 / 15:12

Tags