GNU/Linux >> Znalost Linux >  >> Ubuntu

Proč Gedit při otevírání souborů z Nautilus stále náhodně otevírá nové instance?

Ach, jak miluji Ubuntu a všechny jeho funkce, ale tato „chyba“ mě tak dlouho zlobila a nakonec jsem se rozhodl požádat o pomoc zde.

Přiřadil jsem všechny .php soubory, které se mají otevřít pomocí gedit, kdykoli na ně dvakrát kliknu v nautilus. Chování je divné.

  1. Nemám spuštěný gedit
  2. Dvakrát kliknu na soubor, který se má otevřít
  3. Otevře se okno gedit a soubor se načte
  4. Dvakrát kliknu na jiný soubor, který se má otevřít

Nyní existují 2 možné výsledky:

5A) Soubor se otevře ve stejném okně gedit na nové kartě

5B) Soubor se otevře v novém okně gedit, což vede ke spuštění 2 geditů.

Zda se stane A nebo B, se zdá být zcela náhodné a pokračuje donekonečna. To znamená, že dvakrát kliknu na 100 souborů a mohu skončit s 60 gedits, z nichž některé budou mít 1 kartu, některé budou mít 2 karty, některé budou mít 3 karty…

To je velmi nepříjemné a oprava by byla velmi oceněna. Pokusil se někdo tento problém vyřešit?

Stalo se to v Ubuntu 10.04, 10.10 a 11.10. Všechny verze Ubuntu, které jsem kdy testoval.

Nejlepší odpověď

Proč…

gedit má docela zajímavý algoritmus, který určuje, zda se otevře nová instance, nebo zda se otevře na kartě v existující instanci.

Nachází se ve zdrojovém souboru gedit-app.c ve funkci static boolean is_in_viewport , algoritmus otestuje, zda je aktuální instance gedit

  1. na stejném čísle obrazovky a zobrazovaném názvu
  2. ve stejném pracovním prostoru
  3. více než 25 % okrajů zobrazovacího pole

Pokud jsou všechny pravdivé, gedit se otevře ve stejné instanci na nové kartě, jinak se otevře v novém okně.

Stručně řečeno – jediný realistický způsob, jak změnit chování, je změnit algoritmus…

Jak…

Následující je rychlý způsob, jak získat konzistentní způsob otevírání gedit... vždy se otevře nová instance.

nainstalujte si základní vývojové nástroje

sudo apt-get install devscripts build-essential fakeroot 

získejte zdroj

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

proveďte změnu

Otevřete gedit-app.c

gedit gedit/gedit-app.c

přidat return FALSE; podle obrázku a uložte.

To znamená, že vždy opustíte rutinu se slovy „Neběžím ve výřezu, a proto vždy otevřu novou instanci“

Pokud použijete return TRUE; toto se vždy otevře v existující instanci gedit na nové kartě…

Související:Jak opravit řešení DNS, které nefunguje po upgradu na Ubuntu 13.10 (Saucy) v Ubuntu?

dejte mu jedinečný název balíčku

OK, musíme dát balíčku jedinečný název, aby aktualizace úložiště nepřepsaly váš změněný balíček

gedit debian/changelog

nyní připojte +yourname na verzi horního řádku a uložte soubor, tj.

Poznámka – abyste si byli naprosto jistí – po instalaci upraveného balíčku níže zamkněte verzi podle odkazované otázky níže.

sestavte balíček

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

Jděte na kávu…

cd ..
sudo dpkg -i gedit*.deb

Propojená otázka:

  1. Jak zabránit aktualizaci konkrétního balíčku?

Ubuntu
  1. Umožněte vim sledovat symbolické odkazy při otevírání souborů z příkazového řádku

  2. Proč systém Windows nerozpozná soubory uvnitř oddílů Linux?

  3. Proč `xdg-mime query filetype ...` nedokáže najít nový přidaný typ souboru?

  1. Proč Find -mtime +1 vrací pouze soubory starší než 2 dny?

  2. Proč dd z /dev/random dává různé velikosti souborů?

  3. Proč se rsync nedaří zkopírovat soubory z /sys v Linuxu?

  1. Jak získat přístup k souborům Flash ze streamovaných webových stránek?

  2. Proč má Ls -l na výstupu jinou velikost než Ls -s?

  3. Nelze přenášet soubory z domova na USB?