Oh, wie ich Ubuntu und all seine Funktionen liebe, aber dieser „Bug“ macht mich schon so lange wütend und ich habe mich endlich entschlossen, hier um Hilfe zu bitten.
Ich habe alle .php
zugewiesen Dateien, die mit gedit geöffnet werden, wenn ich sie in Nautilus doppelklicke. Jetzt ist das Verhalten seltsam.
- Ich habe kein Gedit am Laufen
- Ich doppelklicke auf eine zu öffnende Datei
- Ein Gedit-Fenster öffnet sich und die Datei wird geladen
- Ich doppelklicke auf eine andere zu öffnende Datei
Jetzt gibt es 2 mögliche Ergebnisse:
5A) Die Datei öffnet sich im selben Gedit-Fenster in einem neuen Tab
5B) Die Datei öffnet sich in einem neuen Gedit-Fenster, was dazu führt, dass 2 Gedits ausgeführt werden.
Ob A oder B passiert, scheint völlig zufällig zu sein und geht unendlich weiter. Das bedeutet, dass ich auf 100 Dateien doppelklicke und am Ende vielleicht 60 Gedits habe, von denen einige 1 Registerkarte, einige 2 Registerkarten, einige 3 Registerkarten haben …
Das ist extrem ärgerlich und eine Lösung dafür wäre sehr dankbar. Hat schon mal jemand versucht, dieses Problem zu beheben?
Dies ist in Ubuntu 10.04, 10.10 und 11.10 passiert. Alle Ubuntu-Versionen, die ich je getestet habe.
Beste Antwort
Warum…
gedit
hat einen ziemlich interessanten Algorithmus, um zu bestimmen, ob es eine neue Instanz öffnet oder ob es in einem Tab in einer bestehenden Instanz geöffnet wird.
Befindet sich in der Quelldatei gedit-app.c
in der Funktion static boolean is_in_viewport
, testet der Algorithmus, ob die aktuelle Gedit-Instanz
- mit derselben Bildschirmnummer und demselben Anzeigenamen
- im selben Arbeitsbereich
- mehr als 25 % der Ränder des Darstellungsbereichs
Wenn alle wahr sind, wird gedit in derselben Instanz in einem neuen Tab geöffnet, andernfalls wird es in einem neuen Fenster geöffnet.
Zusammenfassend lässt sich sagen, dass die einzig realistische Möglichkeit, das Verhalten zu ändern, darin besteht, den Algorithmus zu ändern…
Wie…
Das Folgende ist ein schneller Weg, um gedit konsistent zu öffnen … es wird immer eine neue Instanz öffnen.
Installieren Sie die grundlegenden Entwicklungstools
sudo apt-get install devscripts build-essential fakeroot
Quelle abrufen
cd ~/Downloads
mkdir build
cd build
apt-get source gedit
cd gedit-3.2*
Änderung vornehmen
Öffnen Sie gedit-app.c
gedit gedit/gedit-app.c
füge return FALSE;
hinzu wie gezeigt und speichern.
Dadurch wird die Routine immer mit den Worten "Ich laufe nicht in einem Ansichtsfenster und öffne daher immer eine neue Instanz" beendet
Wenn Sie return TRUE;
verwenden dies wird immer in einer bestehenden Instanz von gedit in einem neuen Tab geöffnet…
geben Sie ihm einen eindeutigen Paketnamen
OK, wir müssen dem Paket einen eindeutigen Namen geben, um zu verhindern, dass Repository-Updates Ihr geändertes Paket überschreiben
gedit debian/changelog
hängen Sie nun +yourname
an zur obersten Zeilenversion und speichern Sie die Datei, z. B.
Beachten Sie – um ganz sicher zu gehen – nach der Installation des modifizierten Pakets unten die Version gemäß der verlinkten Frage unten zu sperren.
Bauen Sie das Paket
sudo apt-get build-dep gedit
debuild -i -us -uc -b
Geh auf einen Kaffee…
cd ..
sudo dpkg -i gedit*.deb
Verknüpfte Frage:
- Wie kann ich die Aktualisierung eines bestimmten Pakets verhindern?