Perché gedit continua ad aprire casualmente nuove istanze quando si aprono file da nautilus?


32

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

Ho assegnato tutti i .phpfile da aprire con gedit ogni volta che faccio doppio clic su 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 esecuzione 2 gedit.

Il fatto che A o B si verifichino sembra essere del tutto casuale e continua all'infinito. Ciò significa che faccio doppio clic su 100 file e potrei finire con 60 gedits, 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 provato.

Risposte:


39

Perché...

gedit ha un algoritmo abbastanza 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.cnella funzione static boolean is_in_viewport, l'algoritmo verifica se è presente l'istanza gedit corrente

  1. nello stesso numero di schermo e nome visualizzato
  2. nello stesso spazio di lavoro
  3. maggiore del 25% dei bordi della porta di visualizzazione

Se tutti sono 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...

Il seguente è un modo rapido per ottenere un modo coerente di aprire gedit ... aprirà sempre una nuova istanza.

installare 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*

Fai il cambiamento

Apri gedit-app.c

gedit gedit/gedit-app.c

inserisci qui la descrizione dell'immagine

aggiungi return FALSE;come mostrato e salva.

Quello che fa è uscire sempre dalla routine dicendo "Non sono in esecuzione in una finestra e quindi apro sempre una nuova istanza"

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

assegnagli un nome pacchetto univoco

OK, dobbiamo assegnare al pacchetto un nome univoco per impedire agli aggiornamenti del repository di sovrascrivere il pacchetto modificato

gedit debian/changelog

ora aggiungi +yournamealla versione della riga superiore e salva il file, ad es

Nota - per essere assolutamente sicuri - dopo aver installato il pacchetto modificato di seguito, blocca la versione secondo la domanda collegata di seguito.

inserisci qui la descrizione dell'immagine

costruire il pacchetto

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

Andare a prendere un caffè ...

cd ..
sudo dpkg -i gedit*.deb

Domanda collegata:

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

1
Questo, signore, è malato! Grazie mille, spero che questo funzioni ...
Richard Rodriguez,

... sicuramente durante i miei test ... NB: ho usato le altre risposte osservando che se trascini gedit per sovrapporre i bordi, viene aperta una nuova istanza, ma se hai gedit all'interno del desktop, la nuova istanza viene aperta in Una scheda. Con la compilazione di cui sopra - si apre sempre in una nuova istanza o scheda a seconda della compilazione con "return FALSE" o "return TRUE".
Fossfreedom

Sto confermando ufficialmente questa soluzione FUNZIONANTE!
Richard Rodriguez,

3
santo sh * t @fossfreedom, mi inchino a te signore, questa volta l'hai fatto, la qualità e la soluzione di questa risposta è imba. Se potessi, passerei tutto il giorno a premere quel pulsante di votazione! Gj.
Bruno Pereira,

2
Sembra che sarebbe stato meglio fare una richiesta pull per avere una variabile di configurazione e fare un semplice (pseudo codice) "se $ config-variabile restituisce FALSO". Il modo proposto ti blocca indefinitamente dagli aggiornamenti.
pbhj,

13

Volevo che tutti i file fossero aperti in una sola finestra di gedit. Non ho trovato queste informazioni da qualche altra parte, ma con le seguenti modifiche sono riuscito ad avere tutti i file di testo aperti in una sola finestra come nuove schede, senza dubbio come li apro (tramite launcher, via nautilus, via Gnome DO).

  1. Ottieni il numero visualizzato: digita echo $DISPLAYla riga di comando. ad esempio si ottiene :0come numero di visualizzazione.

  2. Apri /usr/share/applications/gedit.desktopcome superutente con un editor di testo.

  3. Cambia la riga dicendo:

    Exec=gedit %U
    

    a

    Exec=gedit --display=:0 %U
    

    dov'è il :0tuo numero di display.


2
Molto meglio che ricompilare gedit e fare strani pacchetti hack. Grazie!
rcrogers,

1
L'esecuzione con questa opzione dalla riga di comando non impedisce l' geditapertura di nuove istanze (Windows). Almeno nella versione corrente 3.18.
alfC

funziona per me nella versione 3.28.1 sia dalla riga di comando che dalla GUI. necessita di un riavvio però
efie,

2

Questo non accade in modo casuale

Di default Gedit non è fatto per aprire molte istanze ma una per ogni display. Se apri in visualizzazione dove Gedit non è ancora aperto, i file in Gedit sono ora presenti in quella schermata.

Quindi puoi fare in modo che la prima istanza di gedit sia su Tutte le aree di lavoro in modo che segua la tua visualizzazione attiva. Oppure lavora su ogni area di lavoro con ciascun progetto e ognuno con il proprio Gedit aperto. Nelle scorciatoie da tastiera puoi creare una nuova scorciatoia per attivare / disattivare la finestra su tutte le aree di lavoro.

O è possibile renderlo sempre aperto in una nuova istanza utilizzando il comando di scelta rapida in Apri con .. gedit --new-window

Quindi puoi provare a php aprire le proprietà con reset e inserire una nuova apertura con Gedit

usando gedit --help-allull vedi altre opzioni di apertura con gedit.

E puoi anche provare a rimuovere gedit con tutti i file di configurazione e installarlo pulito usando sudo apt-get purge gedit && sudo apt-get clean && sudo apt-get update && sudo apt-get install gedit

AGGIORNAMENTO: Sono stato in grado di riprodurre, spostando la finestra un po 'fuori dallo schermo e aprendo alcuni file si apre in una nuova finestra. In qualche modo pensa che sia in un altro display.


Sì, succede in modo casuale. Questo è il punto. L'implementazione è errata / non robusta. Per esempio, non sono riuscito a farlo, ma gedit ora ha deciso casualmente di passare a questa sempre una nuova modalità finestra dopo aver funzionato normalmente prima oggi ...
spinkus,

1

Questo ha iniziato a succedere a me. Non sono riuscito a trovare alcun file di configurazione rilevante e ho persino provato a eliminare + pulire. Finalmente ho trovato quello che era. La finestra di Gedit si stava aprendo in modo tale da sembrare ingrandita ma non lo era. Ho premuto il pulsante di ingrandimento sulla finestra e questo ha risolto il problema! Si noti che la finestra non ha cambiato dimensione, solo gli angoli sono passati da tondo a quadrato. Sembra che questo debba essere un bug nell'algoritmo @fossfreedom sopra descritto .

Nota: quando si chiude la finestra, lo stato di ingrandimento / minimizzazione deve essere memorizzato in qualche configurazione utente da qualche parte. Questo stato sopravvive a purge + clean, e non è nemmeno in conf Gedit per utente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.