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

О, как я люблю 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, которые я когда-либо тестировал.

4 ответа

Решение

Зачем...

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. Как предотвратить обновление определенного пакета?

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

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

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

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

    Exec=gedit %U
    

    в

    Exec=gedit --display=:0 %U
    

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

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

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

Просто разверните окно gedit, и все откроется на разных вкладках. Работал у меня в Ubuntu 18.

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

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

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

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

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

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

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

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

Другие вопросы по тегам