Mengapa MacVim memulai secara berbeda setiap doa lainnya?

13

Saya perhatikan ketika saya duduk untuk melakukan beberapa pekerjaan pada MacBook saya hari ini bahwa pada beberapa titik baru-baru ini ada sesuatu yang kacau sehubungan dengan .gvimrcpengaturan saya : ketika saya meluncurkan MacVim, semuanya tampak normal kecuali bahwa jendela saya sangat kecil (kira-kira ukuran standarnya) ). Penasaran, saya mencoba verbose set columns?yang mengatakan kepada saya "180, set terakhir dari ~ / .gvimrc" meskipun jendela itu jelas tidak lebar 180 kolom. set columns=180mengembalikan jendela ke lebar yang diharapkan.

Setelah debugging dan pembagian file RC saya yang biasa, saya melihat sesuatu yang tidak biasa. Saya tidak yakin apakah ini terkait dengan ukuran kolom saya yang tidak berlaku atau tidak, apa pun itu ingin tahu dan saya tidak bisa mengetahuinya.

Jika saya menjalankan:, mvim -u NONE -c "set columns=100"saya mendapatkan jendela seperti ini: mvim 1

Jika saya menjalankan perintah yang persis sama lagi, saya mendapatkan ini: mvim 2

verbose set co?melaporkan masing-masing 100 dan 66, dalam kedua kasus mengatakan "set terakhir dari argumen -c." Mengulangi perintah peluncuran menyebabkan status jendela berganti.

Saya sudah mencoba nuking di .viminfoantara run; itu tidak berpengaruh.

Saya menggunakan snapshot 74 MacVim sekarang, walaupun saya menggunakan versi sebelumnya ketika ini mulai terjadi dan ditingkatkan untuk melihat apakah itu hanya versi. Saya ada di 10.10.3, dan mungkin perilaku ini disebabkan oleh bug khusus MacVim yang telah muncul sebagai akibat dari pembaruan OS (yang hanya terjadi baru-baru ini). Namun jika saya menginstal MacVim pada laptop istri saya (menjalankan versi OS yang sama) perilaku tersebut tidak mereproduksi.

Saya bingung. Apa yang menyebabkan perilaku ini?


EDIT: Setelah melanjutkan debug, saya perhatikan sepertinya hanya mereproduksi dengan cara ini jika saya memiliki monitor eksternal yang terhubung ke laptop. Ini membuat saya percaya itu semacam bug.


sumber

Jawaban:

16

Setelah spelunking basis kode MacVim selama beberapa jam, saya pikir saya bisa melihat mengapa ini terjadi.

Ketika MacVim dimulai, ia membaca posisi jendela yang sebelumnya disimpan dari NSUserDefaultsdan mencoba mengembalikan posisi itu. Pada intinya jendela belum benar-benar ditampilkan, dan asalnya adalah beberapa (mungkin OS dipilih) default yang selalu di layar 'utama'. Jika posisi jendela sebelumnya pada monitor yang berbeda, mengubah posisi jendela akan memicu peristiwa "diubah ukurannya" (mungkin ini baru, atau bug, di 10.10.3, karena peristiwa "akan ubah ukuran" yang sesuai tidak akan terjadi. dihasilkan).

Ini akan menyebabkan MacVim untuk mencoba mengubah ukuran backend Vim, tetapi masih terlalu dini dalam pelaksanaan proses untuk negara yang digunakan untuk efek yang ukuran harus dibangun dengan benar. Dengan demikian, MacVim meminta agar Vim mengubah ukurannya sendiri menjadi apa yang secara efektif merupakan nilai default, yang menyebabkan jendela menyusut saat berikutnya MacVim mendapat respons terhadap perubahan ukuran dari backend Vim (MacVim mengubah ukuran jendela dengan malas).


EDIT: Perubahan ini memperbaiki bug , saya pikir. Itu menyebabkan ukuran jendela tidak merambat ke backend Vim sampai jendela disajikan.


sumber
1
Tautan rusak, yang memalukan karena kedengarannya menarik. (Juga: Saya suka Anda menggunakan kata "spelunking."): D
Wildcard
@Wildcard Saya memperbarui tautan ke titik di PR yang akhirnya saya buat alih-alih komit di cabang lokal saya (yang saya hapus ketika saya mendapat akses komit ke repositori utama MacVim).