Dlaczego gedit losowo otwiera nowe instancje podczas otwierania plików z nautilus?


32

Och, jak uwielbiam Ubuntu i wszystkie jego funkcje, ale ten „błąd” doprowadzał mnie do złości od tak dawna i ostatecznie postanowiłem poprosić o pomoc tutaj.

Przypisałem wszystkie .phppliki do otwarcia za pomocą gedit za każdym razem, gdy kliknę je dwukrotnie w nautilus. Teraz zachowanie jest dziwne.

  1. Nie mam uruchomionego programu GEDIT
  2. Kliknij dwukrotnie plik, który chcesz otworzyć
  3. Zostanie otwarte okno gedit i plik zostanie załadowany
  4. Kliknij dwukrotnie inny plik, który chcesz otworzyć

Teraz są 2 możliwe wyniki:

5A) Plik otwiera się w tym samym oknie gedit w nowej karcie

5B) Plik otworzy się w nowym oknie gedit, w wyniku czego uruchomione zostaną 2 gedity.

To, czy zdarzy się A lub B, wydaje się być całkowicie losowe i trwa nieskończenie długo. Oznacza to, że podwójnie klikam 100 plików i może skończyć się 60 edycjami, z których niektóre będą miały 1 kartę, niektóre będą miały 2 karty, niektóre będą miały 3 karty ...

Jest to bardzo denerwujące i bardzo doceniłoby to rozwiązanie. Czy ktoś próbował rozwiązać ten problem?

Stało się tak w Ubuntu 10.04, 10.10 i 11.10. Wszystkie wersje Ubuntu, które kiedykolwiek testowałem.

Odpowiedzi:


39

Czemu...

gedit ma dość interesujący algorytm, aby ustalić, czy otwiera nowe wystąpienie, czy też otwiera się na karcie w istniejącym wystąpieniu.

Algorytm umieszczony gedit-app.cw pliku źródłowym funkcji static boolean is_in_viewportsprawdza, czy jest to bieżąca instancja gedit

  1. pod tym samym numerem ekranu i nazwą wyświetlaną
  2. w tym samym obszarze roboczym
  3. więcej niż 25% krawędzi portu widoku

Jeśli wszystkie są prawdziwe, gedit otwiera się w tej samej instancji na nowej karcie, w przeciwnym razie otwiera się w nowym oknie.

Podsumowując - jedynym realistycznym sposobem zmiany zachowania jest zmiana algorytmu ...

W jaki sposób...

Oto szybki sposób na uzyskanie spójnego sposobu otwierania gedit ... zawsze otworzy nowe wystąpienie.

zainstaluj podstawowe narzędzia programistyczne

sudo apt-get install devscripts build-essential fakeroot 

zdobądź źródło

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

dokonać zmiany

Otwórz gedit-app.c

gedit gedit/gedit-app.c

wprowadź opis zdjęcia tutaj

dodaj return FALSE;jak pokazano i zapisz.

Powoduje to zawsze wyjście z rutyny: „Nie działam w rzutni i dlatego zawsze otwieram nową instancję”

Jeśli go użyjesz return TRUE;, zawsze otworzy się w istniejącej instancji gedit w nowej karcie ...

nadaj mu unikalną nazwę pakietu

OK, musimy nadać pakietowi unikalną nazwę, aby zapobiec zastąpieniu zmienionego pakietu przez aktualizacje repozytorium

gedit debian/changelog

teraz dołącz +yournamedo górnej linii i zapisz plik, tj

Uwaga - aby być absolutnie pewnym - po zainstalowaniu zmodyfikowanego pakietu poniżej, zablokuj wersję zgodnie z połączonym pytaniem poniżej.

wprowadź opis zdjęcia tutaj

zbuduj pakiet

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

Idź na kawę ...

cd ..
sudo dpkg -i gedit*.deb

Połączone pytanie:

  1. Jak zapobiec aktualizacji konkretnego pakietu?

1
To jest, mój panie, CHOROBA! Wielkie dzięki, mam nadzieję, że to zadziała ...
Richard Rodriguez

... z pewnością zrobiłem to podczas moich testów ... NB - Wykorzystałem inne spostrzeżenie w odpowiedzi, że jeśli przeciągniesz gedit w celu nałożenia się na krawędzie, nowe wystąpienie zostanie otwarte, ale jeśli masz gedit na pulpicie, nowe wystąpienie zostanie otwarte w zakładka. Z powyższą kompilacją - zawsze otwiera się w nowej instancji lub karcie w zależności od kompilacji z „return FALSE” lub „return TRUE”.
fossfreedom

Oficjalnie potwierdzam to rozwiązanie DZIAŁA!
Richard Rodriguez

3
Holy Sh * t @fossfreedom, kłaniam się panu, zrobiliście tym razem, jakość i rozwiązanie tej odpowiedzi to imba. Gdybym mógł, spędziłbym cały dzień, naciskając ten przycisk głosowania! Gj.
Bruno Pereira,

2
Wydaje się, że lepiej byłoby złożyć żądanie ściągnięcia, aby mieć zmienną config i zrobić prosty (pseudo kod) „jeśli $ config-zmienna, to zwróci FALSE”. Proponowany sposób blokuje dostęp do aktualizacji na czas nieokreślony.
pbhj

13

Chciałem, aby wszystkie pliki były otwarte tylko w jednym oknie gedit. Nie znalazłem tych informacji gdzie indziej, ale dzięki następującym zmianom udało mi się otworzyć wszystkie pliki tekstowe tylko w jednym oknie jako nowe karty, bez względu na to, jak je otwieram (przez program uruchamiający, przez nautilus, przez Gnome DO).

  1. Uzyskaj numer wyświetlacza: wpisz echo $DISPLAYw wierszu polecenia. np. otrzymujesz :0jako numer wyświetlacza.

  2. Otwórz /usr/share/applications/gedit.desktopjako superużytkownik w edytorze tekstu.

  3. Zmień wiersz mówiąc:

    Exec=gedit %U
    

    do

    Exec=gedit --display=:0 %U
    

    gdzie :0jest twój wyświetlany numer.


2
O wiele lepsze niż ponowne kompilowanie gedit i robienie dziwnych hacków. Dzięki!
rcrogers

1
Uruchamianie z tą opcją z wiersza poleceń nie uniemożliwia geditotwierania nowych instancji (Windows). Przynajmniej w aktualnej wersji 3.18.
alfC

działa dla mnie w wersji 3.28.1 zarówno z wiersza poleceń, jak iz GUI. wymaga jednak ponownego uruchomienia
efie

2

To się nie dzieje losowo

Domyślnie Gedit nie jest otwierany w wielu instancjach, ale po jednym dla każdego ekranu. Jeśli otworzysz na ekranie, gdzie jeszcze nie jest Gedit otworzy pliki w Gedit, to czarownica istnieje teraz na tym ekranie z pliku, który jest otwarty.

Możesz więc ustawić pierwszą instancję gedit na Wszystkie obszary robocze, aby śledziła twój aktywny widok. Lub pracuj nad każdym obszarem roboczym z każdym projektem i każdym z własnym otwartym programem Gedit. Za pomocą skrótów klawiaturowych możesz utworzyć nowy skrót do przełączania okna na wszystkich obszarach roboczych.

LUB możliwe jest, aby zawsze był otwierany w nowej instancji za pomocą polecenia skrótu w Otwórz za pomocą .. gedit --new-window

Więc możesz spróbować we właściwościach php otwartych z resetem i umieścić nowe otwarcie za pomocą Gedit

używając gedit --help-allull zobacz inną opcję otwierania za pomocą gedit.

Możesz także spróbować usunąć gedit ze wszystkimi plikami konfiguracyjnymi i zainstalować go w czystości za pomocą sudo apt-get purge gedit && sudo apt-get clean && sudo apt-get update && sudo apt-get install gedit

AKTUALIZACJA: Byłem w stanie odtworzyć - po przesunięciu okna nieco poza ekran, a następnie otwarciu niektórych plików otwiera się w nowym oknie. Jakoś myśli, że jest na innym wyświetlaczu.


Tak, dzieje się to losowo. To o to chodzi. Wdrożenie jest błędne / nie jest niezawodne. Na przykład, jestem zagubiony, ale zrobiłem to, ale gedit teraz losowo zdecydował się na przełączenie do tego zawsze nowego trybu okna po pracy dzisiaj jak zwykle wcześniej ...
spinkus

1

Zaczęło mi się to dziać. Nie mogłem znaleźć żadnego odpowiedniego pliku conf, a nawet próbowałem wyczyścić + wyczyścić. W końcu znalazłem, co to było. Okno Gedit otwierało się tak, że wyglądało na zmaksymalizowane, ale tak nie było. Nacisnąłem przycisk maksymalizacji w oknie i to rozwiązało problem! Zauważ, że okno nie zmieniło rozmiaru, tylko rogi przeszły z rundy na kwadrat. Wygląda na to, że to musi być błąd w algorytmie @fossfreedom opisanym powyżej.

Uwaga: po zamknięciu okna stan maksymalizacji / minimalizacji musi być gdzieś zapisany w konfiguracji użytkownika. Ten stan przetrwa czyszczenie + czyszczenie i nie ma go także w Gedit confs na użytkownika.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.