bashrc: como saber que a janela X está disponível ou não?

10

Existe uma parte no meu ~/.bashrc , que define $ EDITOR como gvim. Funciona bem quando estou na janela X. No entanto, se eu ssh para minha estação de trabalho (de outra estação de trabalho) o gvim começa a reclamar "não é possível abrir a tela".

Portanto, desejo colocar uma instrução if em bashrc, que se a janela X estiver disponível, use gvim, caso contrário, deixe-a ser vim.

Como eu poderia conseguir isso?

    
por Ryan 10.02.2011 / 21:15

6 respostas

11

Uma maneira de fazer isso testa a existência da variável de ambiente DISPLAY:

if [ "$DISPLAY" ]
then
    EDITOR=gvim
else
    EDITOR=vim
fi

Em alguns casos, o DISPLAY será configurado mesmo que o seu gvim não possa entrar em contato com o servidor X. Nesses casos, use o programa RunningX :

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi
    
por 10.02.2011 / 21:33
7

A variável de ambiente $DISPLAY deve ser definida para algo se você estiver no X e não configurada se você não estiver conectado a uma exibição.

Você pode usar isso:

if [ -n "$DISPLAY" ]; then
    alias vim='gvim'
else
    alias vim='vim'
fi

Mas há outra solução. É chamado de encaminhamento ssh X.

Executar

ssh -X yourworkstation

então você pode executar o vim em uma máquina em que você está usando o ssh, e ele será exibido na máquina onde você está executando o X.

    
por 10.02.2011 / 21:30
3

Coloque isso no seu .bashrc:

if [ -z "${DISPLAY:-}" ]; then
  EDITOR='vim'
else
  EDITOR='gvim'
fi
    
por 10.02.2011 / 21:26
1

Embora esta não seja uma resposta para sua pergunta, achei que seria útil ressaltar que, se você estiver trabalhando em uma estação de trabalho executando X * em outra estação de trabalho, você pode usar o gvim se você configura o encaminhamento do X com o ssh. A informação da janela será enviada apenas pela rede e o gvim irá simplesmente aparecer como se fosse executado localmente.

Adicione o seguinte em ~ / .ssh / config

Host *
   ForwardX11 yes 

Agora você poderá executar o gvim.

Se você é a estação de trabalho de origem é o Windows e não está executando o X, na verdade você pode inicializar um servidor X localmente usando o Cygwin. Uma vez configurado, você pode configurar clientes ssh populares como o PuTTy para fazer o encaminhamento do X11, e então o gvim irá aparecer no que parece ser uma janela nativa com janelas.

    
por 12.02.2011 / 18:46
0

Basta verificar uma das variáveis de ambiente que o Xorg define na inicialização, como o XLOCAL, que contém informações sobre a sessão atual do X11.

    
por 10.02.2011 / 21:25
0

Eu gostei da resposta do garyjohn usando o RunningX, já que é inteligente sobre variáveis do DISPLAY ruins mas não vazias.

Mas .. eu gostaria de ir um melhor. Costumo usar sessões de tela. Eu poderia começar uma sessão de tela em casa, DISPLAY é definido. Então, eu ssh de em outro lugar, DISPLAY ainda é definido e ele realmente exibe ... em casa! Então, então eu vou exportar $ DISPLAY = '. Isso é bom, mas desde que a resposta já foi verificada e encontrou uma variável DISPLAY válida no momento .bashrc inicialmente correu EDITOR ainda seria definido para gvim.

Eu vim aqui procurando por uma solução para um problema similar, eu queria usar yelp para navegação de páginas X-GUI, mas automaticamente cair para o comando man tradicional quando não estava usando X. Baseado no que li aqui, eu criei com isso:

man () {
    if RunningX
    then
        yelp "man:$@";
    else
        /usr/bin/man "$@";
    fi
}

Estou pensando que, para o problema do EDITOR, alguém poderia fazer o seguinte:

EDITOR=vim
vim () {
    if RunningX
    then
        gvim "$@";
    else
        vim "$@";
    fi
}

Eu teria postado apenas a longa história, mas não testei. Eu me considero um novato bash. Eu testei meu 'comando man', isso funciona! Eu estou usando o emacs para o meu editor, ele faz o seu próprio cheque para o X. Eu nem tenho o gvim instalado.

    
por 17.11.2015 / 18:02