Mengapa gedit terus secara acak membuka instance baru saat membuka file dari nautilus?

32

Oh betapa saya mencintai Ubuntu dan semua fitur-fiturnya, tetapi "bug" ini telah membuat saya marah begitu lama dan akhirnya saya memutuskan untuk meminta bantuan di sini.

Saya telah menetapkan semua .phpfile untuk dibuka dengan gedit setiap kali saya mengklik dua kali dalam nautilus. Sekarang, perilakunya aneh.

  1. Saya tidak menjalankan gedit
  2. Saya klik dua kali file yang akan dibuka
  3. Jendela gedit terbuka dan file dimuat
  4. Saya klik dua kali file lain untuk dibuka

Sekarang, ada 2 hasil yang mungkin:

5A) File dibuka di jendela gedit yang sama di tab baru

5B) File dibuka di jendela gedit baru, menghasilkan 2 gedit berjalan.

Apakah A atau B terjadi tampaknya benar-benar acak dan terus berjalan tanpa batas. Itu berarti saya klik dua kali pada 100 file dan saya mungkin berakhir dengan 60 gedits, beberapa di antaranya akan memiliki 1 tab, beberapa akan memiliki 2 tab, beberapa akan memiliki 3 tab ...

Ini sangat menjengkelkan dan perbaikan untuk ini akan sangat dihargai. Adakah yang pernah mencoba untuk memperbaiki masalah ini?

Ini telah terjadi di Ubuntu 10.04, 10.10 dan 11.10. Semua versi Ubuntu yang pernah saya uji.

Richard Rodriguez
sumber

Jawaban:

39

Mengapa...

gedit memiliki algoritma yang cukup menarik untuk menentukan apakah itu membuka instance baru atau jika itu terbuka di tab pada instance yang ada.

Terletak di file sumber gedit-app.cdalam fungsi static boolean is_in_viewport, algoritma menguji apakah instance gedit saat ini

  1. dalam nomor layar dan nama tampilan yang sama
  2. di ruang kerja yang sama
  3. lebih besar dari 25% tepi port tampilan

Jika semuanya benar, maka gedit terbuka dalam instance yang sama di tab baru, jika tidak maka akan terbuka di jendela baru.

Singkatnya - satu-satunya cara realistis untuk mengubah perilaku adalah mengubah algoritme ...

Bagaimana...

Berikut ini adalah cara cepat untuk mendapatkan cara konsisten membuka gedit ... itu akan selalu membuka contoh baru.

instal alat pengembangan dasar

sudo apt-get install devscripts build-essential fakeroot 

dapatkan sumbernya

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

membuat perubahan

Buka gedit-app.c

gedit gedit/gedit-app.c

masukkan deskripsi gambar di sini

tambahkan return FALSE;seperti yang ditunjukkan dan simpan.

Apa yang dilakukan adalah selalu keluar dari pepatah rutin, "Saya tidak menjalankan viewport dan karena itu selalu membuka instance baru"

Jika Anda menggunakan return TRUE;ini akan selalu terbuka di instance gedit yang ada di tab baru ...

berikan nama paket yang unik

OK, kami perlu memberi nama unik paket untuk mencegah pembaruan repositori dari menimpa paket Anda yang diubah

gedit debian/changelog

sekarang menambahkan +yournameke versi baris atas dan menyimpan file yaitu

Catatan - untuk benar-benar yakin - setelah menginstal paket yang dimodifikasi di bawah ini, kunci versi sesuai pertanyaan terkait di bawah ini.

masukkan deskripsi gambar di sini

bangun paket

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

Pergi untuk minum kopi ...

cd ..
sudo dpkg -i gedit*.deb

Pertanyaan Terkait:

  1. Bagaimana mencegah pembaruan paket tertentu?
kebebasan fosil
sumber
1
Ini, tuan saya, SAKIT! Terima kasih banyak, semoga ini berhasil ...
Richard Rodriguez
... tentu saja selama pengujian saya ... NB - Saya menggunakan pengamatan jawaban lain bahwa jika Anda menyeret gedit untuk tumpang tindih tepi, contoh baru dibuka, tetapi jika Anda memiliki gedit di desktop, contoh baru dibuka di sebuah tab. Dengan kompilasi di atas - selalu terbuka dalam instance atau tab baru tergantung dengan dikompilasi dengan "return FALSE" atau "return TRUE".
fossfreedom
Saya secara resmi mengkonfirmasi solusi ini BEKERJA!
Richard Rodriguez
3
hai sh * t @fossfreedom, saya tunduk kepada Anda, tuan, yang telah Anda lakukan kali ini, kualitas dan solusi dari jawaban ini adalah imba. Jika saya bisa, saya akan menghabiskan sepanjang hari dengan menekan tombol pilih itu! Gj.
Bruno Pereira
2
Sepertinya itu mungkin lebih baik untuk membuat permintaan tarikan untuk memiliki variabel config dan melakukan yang sederhana (kode semu) "jika $ config-variable lalu kembalikan FALSE". Cara yang diusulkan mengunci Anda dari pembaruan tanpa batas.
pbhj
13

Saya ingin semua file dibuka hanya dalam satu jendela gedit. Saya tidak menemukan informasi ini di tempat lain, tetapi dengan perubahan berikut ini saya berhasil membuka semua file teks hanya dalam satu jendela sebagai tab baru, tidak ada cara bagaimana saya membukanya (melalui peluncur, melalui nautilus, melalui Gnome DO).

  1. Dapatkan nomor layar: ketik echo $DISPLAYdi baris perintah. mis. Anda mendapatkan :0sebagai nomor tampilan Anda.

  2. Buka /usr/share/applications/gedit.desktopsebagai pengguna super dengan editor teks.

  3. Ubah kalimat yang berbunyi:

    Exec=gedit %U
    

    untuk

    Exec=gedit --display=:0 %U
    

    di mana :0nomor tampilan Anda.

Tim Banchi
sumber
2
Jauh lebih baik daripada mengkompilasi ulang gedit dan melakukan hack paket aneh. Terima kasih!
rcrogers
1
Menjalankan dengan opsi ini dari baris perintah tidak mencegah geditmembuka instance baru (windows). Setidaknya dalam versi saat ini 3.18.
alfC
bekerja untuk saya di versi 3.28.1 baik dari baris perintah dan dari gui. perlu restart
efie
2

Ini tidak terjadi secara acak

Secara default, Gedit tidak dibuat untuk membuka banyak instance tetapi masing-masing satu tampilan. Jika Anda membuka di tampilan di mana belum Gedit akan membuka file di Gedit penyihir ada sekarang di tampilan dari penyihir dibuka file.

Jadi, Anda dapat membuat instance pertama gedit berada di Semua ruang kerja sehingga ia mengikuti tampilan aktif Anda. Atau bekerja pada setiap ruang kerja dengan setiap proyek dan masing-masing dengan Gedit terbuka sendiri. Di pintasan keyboard, Anda dapat membuat pintasan baru untuk mengaktifkan jendela di semua ruang kerja.

ATAU memungkinkan untuk membuatnya tetap terbuka di instance baru menggunakan perintah pintasan di Open With .. gedit --new-window

Jadi Anda dapat mencoba properti php terbuka dengan reset dan menempatkan pembukaan baru hanya dengan Gedit

menggunakan gedit --help-allull, lihat opsi pembukaan lainnya dengan gedit.

Dan Anda juga dapat mencoba menghapus gedit dengan semua file konfigurasi dan menginstalnya menggunakan bersih sudo apt-get purge gedit && sudo apt-get clean && sudo apt-get update && sudo apt-get install gedit

UPDATE: Saya dapat mereproduksi - ketika memindahkan jendela sedikit dari layar lalu membuka beberapa file terbuka di jendela baru. Itu entah bagaimana berpikir bahwa itu di Display lain.

Kanguru
sumber
Ya itu memang terjadi secara acak. Itulah intinya. Implementasinya buggy / tidak kuat. Sebagai contoh, saya bingung saya lakukan, tetapi gedit sekarang telah secara acak memutuskan untuk beralih ke ini selalu mode jendela baru setelah bekerja seperti biasa sebelumnya hari ini ...
spinkus
1

Ini mulai terjadi pada saya. Saya tidak dapat menemukan file conf yang relevan, dan bahkan mencoba membersihkan + bersih. Akhirnya menemukan apa itu. Jendela Gedit terbuka sehingga tampak seperti dimaksimalkan tetapi tidak. Saya menekan tombol maksimalkan pada jendela dan ini memperbaiki masalah! Perhatikan bahwa jendela tidak mengubah ukuran, hanya sudut-sudutnya berubah dari bulat ke persegi. Sepertinya ini pasti bug dalam algoritma @fossfreedom yang dijelaskan di atas.

Catatan: Saat Anda menutup jendela, status maksimalkan / perkecil harus disimpan di beberapa konfigurasi pengguna di suatu tempat. Status ini bertahan bersih + bersih, dan tidak juga dalam konfigurasi Gedit per-pengguna.

spinkus
sumber