Почему gedit постоянно открывает новые экземпляры при открытии файлов из nautilus?

32

О, как я люблю Ubuntu и все его возможности, но эта «ошибка» так долго злила меня, и я наконец решил обратиться за помощью сюда.

Я назначил все .phpфайлы, которые будут открываться с помощью gedit, каждый раз, когда я дважды щелкаю их в nautilus. Теперь поведение странное.

  1. У меня нет гедит бега
  2. Я дважды щелкаю файл, который нужно открыть
  3. Откроется окно Gedit, и файл загрузится
  4. Я дважды щелкаю другой файл, который нужно открыть

Теперь есть 2 возможных результата:

5A) Файл открывается в том же окне Gedit в новой вкладке

5B) Файл открывается в новом окне gedit, в результате чего запускается 2 gedits.

Происходит ли случай А или В, кажется совершенно случайным и продолжается бесконечно. Это означает, что я дважды щелкну по 100 файлам, и у меня может получиться 60 гедитов, некоторые из которых будут иметь 1 вкладку, некоторые - 2 вкладки, некоторые - 3 вкладки ...

Это очень раздражает, и решение этой проблемы было бы очень ценно. Кто-нибудь когда-нибудь пытался решить эту проблему?

Это произошло в Ubuntu 10.04, 10.10 и 11.10. Все версии Ubuntu, которые я когда-либо тестировал.

Ричард Родригес
источник

Ответы:

39

Зачем...

gedit имеет довольно интересный алгоритм, чтобы определить, открывает ли он новый экземпляр или он открывается на вкладке в существующем экземпляре.

Расположенный в исходном файле gedit-app.cфункции static boolean is_in_viewport, алгоритм проверяет, является ли текущий экземпляр gedit

  1. в том же номере экрана и отображаемого имени
  2. в том же рабочем пространстве
  3. больше 25% краев порта просмотра

Если все верно, то gedit открывается в том же экземпляре в новой вкладке, в противном случае он открывается в новом окне.

В итоге - единственный реалистичный способ изменить поведение - это изменить алгоритм ...

Как...

Ниже приведен быстрый способ получить последовательный способ открытия gedit ... он всегда будет открывать новый экземпляр.

установить основные инструменты разработки

sudo apt-get install devscripts build-essential fakeroot 

получить источник

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

внести изменения

Откройте gedit-app.c

gedit gedit/gedit-app.c

введите описание изображения здесь

добавить return FALSE;как показано и сохранить.

Для этого нужно всегда выходить из процедуры, говоря: «Я не работаю в области просмотра и поэтому всегда открываю новый экземпляр»

Если вы используете return TRUE;это, то всегда будет открываться в существующем экземпляре gedit в новой вкладке ...

дать ему уникальное имя пакета

Хорошо, нам нужно дать пакету уникальное имя, чтобы обновления хранилища не перезаписывали измененный пакет.

gedit debian/changelog

теперь добавьте +yournameв верхнюю строку версию и сохраните файл, т.е.

Обратите внимание - чтобы быть абсолютно уверенным - после установки измененного пакета ниже заблокируйте версию в соответствии со связанным вопросом ниже.

введите описание изображения здесь

собрать пакет

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

Пойти на кофе ...

cd ..
sudo dpkg -i gedit*.deb

Связанный вопрос:

  1. Как предотвратить обновление определенного пакета?
свобода ископаемых
источник
1
Это, мой сэр, БОЛЬНО! Большое спасибо, надеюсь, это сработает ...
Ричард Родригес
... конечно, сделал во время моего тестирования ... NB - я использовал наблюдение других ответов, что если вы перетаскиваете gedit, чтобы перекрыть края, новый экземпляр открывается, но если у вас есть gedit на рабочем столе, новый экземпляр открывается в вкладка. При вышеупомянутой компиляции - он всегда открывается в новом экземпляре или вкладке, в зависимости от того, что скомпилировано с «return FALSE» или «return TRUE».
fossfreedom
Я официально подтверждаю это решение РАБОТАЕТ!
Ричард Родригес
3
святой дерьмо @fossfreedom, я кланяюсь вам, сэр, вы сделали это время, качество и решение этого ответа имба. Если бы я мог, я бы потратил весь день, нажимая кнопку голосования! Gj.
Бруно Перейра
2
Похоже, что было бы лучше сделать запрос на получение, чтобы иметь переменную конфигурации, и выполнить простой (псевдокод) «if ​​$ config-variable, затем return FALSE». Предлагаемый способ блокирует вас из обновлений на неопределенный срок.
pbhj
13

Я хотел, чтобы все файлы открывались только в одном окне Gedit. Я не нашел эту информацию где-то еще, но со следующими изменениями мне удалось открыть все текстовые файлы только в одном окне в виде новых вкладок, независимо от того, как я их открываю (через панель запуска, через nautilus, через Gnome DO).

  1. Получить номер дисплея: введите echo $DISPLAYв командной строке. например, вы получаете в :0качестве вашего номера дисплея.

  2. Открыть /usr/share/applications/gedit.desktopкак суперпользователь с помощью текстового редактора.

  3. Измените строку, сказав:

    Exec=gedit %U
    

    в

    Exec=gedit --display=:0 %U
    

    где :0ваш номер дисплея

Тим Банчи
источник
2
Намного лучше, чем перекомпилировать gedit и делать странные хаки пакетов. Благодарность!
rcrogers
1
Запуск с этой опцией из командной строки не препятствует geditоткрытию новых экземпляров (окон). По крайней мере, в текущей версии 3.18.
alfC
у меня в версии 3.28.1 работает как из командной строки, так и из графического интерфейса. хотя требуется перезагрузка
efie
2

Это не происходит случайно

По умолчанию Gedit не предназначен для открытия множества экземпляров, но по одному на каждый дисплей. Если вы открываете на дисплее, где еще нет, Gedit откроет файлы в Gedit, ведь теперь существует отображение, которое открывается из файла.

Таким образом, вы можете сделать первый экземпляр gedit для всех рабочих пространств, чтобы он следовал за вашим активным отображением. Или работайте над каждым рабочим пространством с каждым проектом, и у каждого свой Gedit`s. В сочетаниях клавиш вы можете создать новый ярлык для переключения окон во всех рабочих пространствах.

ИЛИ можно сделать его всегда открытым в новом экземпляре с помощью команды быстрого вызова в Open With. gedit --new-window

Так что вы можете попробовать открыть в php свойства с помощью reset и поставить новое открытие с помощью Gedit.

используя gedit --help-allUll, смотрите другой вариант открытия с помощью gedit.

И вы также можете попробовать удалить Gedit со всеми файлами конфигурации и установить его в чистом виде, используя sudo apt-get purge gedit && sudo apt-get clean && sudo apt-get update && sudo apt-get install gedit

ОБНОВЛЕНИЕ: я смог воспроизвести - когда немного сдвинул окно с экрана, затем открыв какой-то файл, открывается в новом окне. Он почему-то думает, что это в другом дисплее.

Kangarooo
источник
Да, это происходит случайно. Вот и весь смысл. Реализация глючная / не надежная. Например, я в растерянности, но сейчас Gedit случайно решила переключиться на этот всегда новый режим окна после работы как обычно ранее сегодня ...
spinkus
1

Это начало происходить со мной. Я не мог найти соответствующий файл conf, и даже попытался очистить + очистить. Наконец-то нашел, что это было. Окно Gedit открывалось так, что казалось, что оно было развернуто, но это не так. Я нажал кнопку максимизации в окне, и это решило проблему! Обратите внимание, что окно не изменило размер, только углы перешли от круглого к квадратному. Похоже, это должно быть ошибкой в ​​алгоритме @fossfreedom, описанном выше.

Примечание. Когда вы закрываете окно, состояние максимизации / минимизации должно быть сохранено где-то в пользовательской конфигурации. Это состояние сохраняется при очистке + очистка, и оно не входит в число пользовательских конфессий Gedit.

spinkus
источник