GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Perché Gedit continua ad aprire casualmente nuove istanze quando si aprono file da Nautilus?

Oh come amo Ubuntu e tutte le sue funzionalità, ma questo "bug" mi ha fatto arrabbiare per così tanto tempo e finalmente ho deciso di chiedere aiuto qui.

Ho assegnato tutti i .php file da aprire con gedit ogni volta che faccio doppio clic su di essi in nautilus. Ora, il comportamento è strano.

  1. Non ho gedit in esecuzione
  2. Faccio doppio clic su un file da aprire
  3. Si apre una finestra di gedit e il file viene caricato
  4. Faccio doppio clic su un altro file da aprire

Ora, ci sono 2 possibili risultati:

5A) Il file si apre nella stessa finestra di gedit in una nuova scheda

5B) Il file si apre in una nuova finestra di gedit, risultando in 2 gedit in esecuzione.

Se accade A o B sembra essere totalmente casuale e continua all'infinito. Ciò significa che faccio doppio clic su 100 file e potrei finire con 60 gedit, alcuni dei quali avranno 1 scheda, alcuni avranno 2 schede, alcuni avranno 3 schede...

Questo è estremamente fastidioso e una soluzione per questo sarebbe molto apprezzata. Qualcuno ha mai provato a risolvere questo problema?

Questo è successo in Ubuntu 10.04, 10.10 e 11.10. Tutte le versioni di Ubuntu che abbia mai testato.

Migliore risposta

Perché...

gedit ha un algoritmo piuttosto interessante per determinare se apre una nuova istanza o se si apre in una scheda in un'istanza esistente.

Situato nel file sorgente gedit-app.c nella funzione static boolean is_in_viewport , l'algoritmo verifica se l'istanza gedit corrente è

  1. nello stesso numero di schermo e nome visualizzato
  2. nello stesso spazio di lavoro
  3. superiore al 25% dei bordi del viewport

Se sono tutti veri, gedit si apre nella stessa istanza in una nuova scheda, altrimenti si apre in una nuova finestra.

In sintesi, l'unico modo realistico per modificare il comportamento è cambiare l'algoritmo...

Come...

Quello che segue è un modo rapido per aprire gedit in modo coerente... aprirà sempre una nuova istanza.

installa gli strumenti di sviluppo di base

sudo apt-get install devscripts build-essential fakeroot 

ottenere la fonte

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

apporta la modifica

Apri gedit-app.c

gedit gedit/gedit-app.c

aggiungi return FALSE; come mostrato e salva.

Ciò che fa è uscire sempre dalla routine dicendo "non sono in esecuzione in un viewport e quindi apro sempre una nuova istanza"

Se usi return TRUE; questo si aprirà sempre in un'istanza esistente di gedit in una nuova scheda...

Correlati:come risolvere la risoluzione DNS che non funziona dopo l'aggiornamento a Ubuntu 13.10 (saucy) in Ubuntu?

assegnagli un nome di pacchetto univoco

OK, dobbiamo assegnare al pacchetto un nome univoco per evitare che gli aggiornamenti del repository sovrascrivano il pacchetto modificato

gedit debian/changelog

ora aggiungi +yourname alla versione della riga superiore e salva il file, ad es.

Nota – per essere assolutamente sicuro – dopo aver installato il pacchetto modificato di seguito, blocca la versione come da domanda collegata di seguito.

crea il pacchetto

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

Vai a prendere un caffè...

cd ..
sudo dpkg -i gedit*.deb

Domanda collegata:

  1. Come impedire l'aggiornamento di un pacchetto specifico?

Ubuntu
  1. Quando si utilizza Vlc, perché lo screen saver continua a svegliarsi?

  2. Fai in modo che vim segua i collegamenti simbolici quando apri i file dalla riga di comando

  3. Perché rsync non utilizza il trasferimento delta per i file locali?

  4. Perché `xdg-mime query filetype ...` non riesce a trovare un nuovo tipo di file aggiunto?

  5. Perché dd da /dev/random fornisce dimensioni di file diverse?

Come impedire a Gedit di aprire qualcosa?

Perché Nautilus si aprirà automaticamente al caricamento di Kde?

Come accedere ai file di Windows da Ubuntu?

Interrompere l'apertura di .py in Gedit?

Perché Windows non riconosce i file all'interno delle partizioni Linux?

Perché rsync non riesce a copiare i file da /sys in Linux?