Чому gedit постійно відкриває нові екземпляри, відкриваючи файли з nautilus?


32

О, як я люблю Ubuntu та всі його особливості, але ця «помилка» мене так довго злила, і я нарешті вирішив попросити тут допомоги.

Я призначив всі .phpфайли, які потрібно відкрити за допомогою gedit, коли я двічі клацнув по них у наутилусі. Зараз поведінка дивна.

  1. У мене не працює гедіт
  2. Я двічі клацніть файл, який потрібно відкрити
  3. Відкриється вікно gedit і файл завантажується
  4. Я двічі клацніть інший файл, який потрібно відкрити

Зараз є два можливі результати:

5A) Файл відкривається в тому ж вікні gedit на новій вкладці

5B) Файл відкривається у новому вікні gedit, в результаті чого працює 2 gedit.

Незалежно від того, чи відбудеться "А", "Б" здається абсолютно випадковим і триває безкінечно. Це означає, що я двічі клацну на 100 файлах, і, можливо, я отримаю 60 gedits, деякі з яких матимуть 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
Це, мій пане, БУДЬ! Дякую велике, сподіваюся, що це спрацює ...
Річард Родрігес

... звичайно, я робив під час мого тестування ... Примітка. Я використовував інші відповіді, спостерігаючи, що якщо перетягнути gedit, щоб перекрити краї, відкриється новий екземпляр, але якщо ви gedit на робочому столі, новий екземпляр відкриється в вкладка. З вищезгаданою компіляцією - вона завжди відкривається в новому екземплярі або вкладці залежно від компільованого з "return FALSE" або "return TRUE".
fossfreedom

Я офіційно підтверджую це рішення РОБОТИ!
Річард Родрігес

3
Holy sh * t @fossfreedom, кланяюсь вам, пане, ви цього разу зробили, якість та рішення цієї відповіді - imba. Якби я міг, я би провів цілий день натисканням на цю кнопку голосування! Gj.
Бруно Перейра

2
Здається, що, можливо, було б краще зробити запит на потяг, щоб мати змінну конфігурації та зробити простий (псевдо-код) "якщо $ config-змінна, то поверніть 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відкривати нові екземпляри (windows). Принаймні в поточній версії 3.18.
alfC

працює для мене у версії 3.28.1 і з командного рядка, і з gui. потрібен перезапуск, хоча
efie

2

Це не відбувається випадковим чином

За замовчуванням Gedit зроблений не для відкриття багатьох примірників, але по одному для кожного дисплея. Якщо ви відкриваєтесь у дисплеї, де ще немає, Gedit відкриє файли у відьмі Gedit, що існує в цьому дисплеї від відьми.

Таким чином, ви можете зробити перший екземпляр gedit на всіх робочих просторах. Або працювати над робочим простором з кожним проектом і кожен зі своїми відкритими Gedit. У комбінаціях клавіш u можна створити новий ярлик для переключення вікон на всіх робочих просторах.

АБО можна зробити його завжди відкритим у новому екземплярі, використовуючи команду швидкого доступу у Open With .. gedit --new-window

Таким чином, ви можете спробувати властивості php, відкриті з перезавантаженням, і відкрити нове відкриття просто за допомогою Gedit

за допомогою gedit --help-allull див. інший варіант відкриття з gedit.

І ви також можете спробувати видалити gedit зі всіма файлами конфігурації та встановити його чистим за допомогою sudo apt-get purge gedit && sudo apt-get clean && sudo apt-get update && sudo apt-get install gedit

ОНОВЛЕННЯ: Я зміг відтворити- коли переміщувати вікно трохи поза екраном, то відкриваючи якийсь файл, відкривається у новому вікні. Це якось вважає, що це в іншому дисплеї.


Так, це відбувається випадковим чином. У цьому вся суть. Реалізація є помилковою / ненадійною. Наприклад, я
збився

1

Це почалося зі мною. Я не зміг знайти жодного відповідного файлу conf, і навіть спробував очистити + очистити. Нарешті знайшов, що це було. Вікно Gedit відкривалося таким чином, що виглядало так, що воно було максимальним, але це не так. Я натиснув кнопку вікна на вікні, і це вирішило проблему! Зауважте, що вікно не змінило розмір, лише кути йшли від круглих до квадратних. Схоже, це має бути помилка в алгоритмі @fossfreedom, описаному вище.

Примітка: Коли ви закриваєте вікно, стан максимізації / мінімізації повинен зберігатися десь у конфігурації користувача. Цей стан переживає очищення + чисто, і це не в Gedit confs на кожного користувача.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.