Por que o gedit continua abrindo aleatoriamente novas instâncias ao abrir arquivos do nautilus?

29

Ah, como eu amo o Ubuntu e todas as suas características, mas esse "bug" tem me deixado irritado por tanto tempo e finalmente decidi pedir ajuda aqui.

Designei todos os arquivos .php para serem abertos com o gedit sempre que eu clicar duas vezes neles no nautilus. Agora, o comportamento é estranho.

  1. não tenho gedit em execução
  2. Eu clico duas vezes em um arquivo para ser aberto
  3. Uma janela do gedit é aberta e o arquivo é carregado
  4. Eu clico duas vezes em outro arquivo para ser aberto

Agora, existem dois resultados possíveis:

5A) O arquivo é aberto na mesma janela do gedit em uma nova aba

5B) O arquivo é aberto em uma nova janela do gedit, resultando em 2 scripts em execução.

Se A ou B acontece parece ser totalmente aleatório e continua indo infinitamente. Isso significa que eu clico duas vezes em 100 arquivos e posso acabar com 60 créditos, alguns dos quais terão 1 aba, alguns terão 2 abas, alguns terão 3 abas ...

Isso é extremamente irritante e uma correção para isso seria muito apreciada. Alguém já tentou consertar esse problema?

Isso aconteceu no Ubuntu 10.04, 10.10 e 11.10. Todas as versões do Ubuntu que já testei.

    
por Richard Rodriguez 05.11.2011 / 05:08

4 respostas

33

Por que ...

gedit tem um algoritmo bastante interessante para determinar se ele abre uma nova instância ou se é aberto em uma guia em uma instância existente.

Localizado no arquivo de origem gedit-app.c na função static boolean is_in_viewport , o algoritmo testa se a instância atual do gedit é

  1. no mesmo número de tela e nome de exibição
  2. na mesma área de trabalho
  3. maior que 25% das bordas da porta de exibição

Se todos forem verdadeiros, o gedit será aberto na mesma instância em uma nova guia ou será aberto em uma nova janela.

Em resumo - a única maneira realista de mudar o comportamento é mudar o algoritmo ...

Como ...

O seguinte é uma maneira rápida de obter uma maneira consistente de abrir o gedit ... ele sempre abrirá uma nova instância.

instale as ferramentas básicas de desenvolvimento

sudo apt-get install devscripts build-essential fakeroot 

obtenha a fonte

cd ~/Downloads
mkdir build
cd build
apt-get source gedit
cd gedit-3.2*

faça a alteração

Abra gedit-app.c

gedit gedit/gedit-app.c

adicione return FALSE; como mostrado e salve.

O que isto faz é sempre sair da rotina dizendo "Eu não estou correndo em uma viewport e, portanto, sempre abra uma nova instância"

Se você usar return TRUE; , isso sempre será aberto em uma instância existente do gedit em uma nova guia ...

atribua um nome de pacote exclusivo

OK, precisamos fornecer ao pacote um nome exclusivo para impedir que as atualizações do repositório sobrescrevam o pacote alterado

gedit debian/changelog

agora acrescente +yourname à versão top line e salve o arquivo, por exemplo

Observação - para ter certeza absoluta - depois de instalar o pacote modificado abaixo, bloqueie a versão conforme a pergunta vinculada abaixo.

construa o pacote

sudo apt-get build-dep gedit
debuild -i -us -uc -b

Vá tomar um café ...

cd ..
sudo dpkg -i gedit*.deb

Pergunta relacionada:

  1. Como evitar a atualização de um pacote específico?
por fossfreedom 14.11.2011 / 21:55
9

Eu queria que todos os arquivos fossem abertos em apenas uma janela do gedit. Eu não encontrei esta informação em outro lugar, mas com as seguintes mudanças eu consegui ter todos os arquivos de texto abertos em apenas uma janela como novas abas, não mais como eu abri-los (via launcher, via nautilus, via Gnome DO). / p>

  1. Obtenha o número de exibição: digite echo $DISPLAY na linha de comando. por exemplo. você recebe :0 como seu número de exibição.

  2. Abra /usr/share/applications/gedit.desktop como superusuário com um editor de texto.

  3. Altere a linha dizendo:

    Exec=gedit %U
    

    para

    Exec=gedit --display=:0 %U
    

    em que :0 é o seu número de exibição.

por Tim Banchi 09.10.2013 / 12:16
2

Isso não acontece aleatoriamente

Por padrão, o Gedit não é feito para abrir muitas instâncias, mas uma para cada exibição. Se vc abrir no display onde ainda não está o Gedit abrirá arquivos no Gedit que existe agora nesse display do arquivo que é aberto.

Então, você pode fazer com que a primeira instância do gedit esteja em Todos os espaços de trabalho, de modo que ela siga a exibição ativa. Ou trabalhe em cada espaço de trabalho com cada projeto e cada um com seu próprio Gedit aberto. Nos atalhos de teclado, você pode criar um novo atalho para alternar a janela em todos os espaços de trabalho.

OU é possível torná-lo sempre aberto em novas instâncias usando o comando de atalho em Abrir com .. gedit --new-window

Então você pode tentar nas propriedades do php abrir com reset e colocar nova abertura apenas com o Gedit

usando gedit --help-all ull ver outra opção de abertura com o gedit.

Você também pode tentar remover o gedit de todos os arquivos de configuração e instalá-lo usando sudo apt-get purge gedit && sudo apt-get clean && sudo apt-get update && sudo apt-get install gedit

ATUALIZAÇÃO: Eu era capaz de reproduzir-quando mover a janela um pouco fora da tela, em seguida, abrir algum arquivo é aberto em nova janela. De alguma forma, pensa que é em outro Display.

    
por Kangarooo 09.11.2011 / 15:58
0

Isso começou a acontecer comigo. Não encontrei nenhum ficheiro conf relevante e tentei limpar + limpar. Finalmente encontrei o que era. A janela do Gedit estava abrindo de tal forma que parecia maximizada, mas não estava. Eu pressionei o botão de maximizar na janela e isso resolveu o problema! Note que a janela não mudou de tamanho, apenas os cantos foram de redondo para quadrado. Parece que isso deve ser um bug no algoritmo @fossfreedom descrito acima.

Nota: Quando você fecha a janela, o estado maximizar / minimizar deve ser armazenado em alguma configuração do usuário em algum lugar. Esse estado sobrevive a limpeza + limpeza e não está no Gedit conf por usuário.

    
por spinkus 11.06.2018 / 13:08

Tags