Dlaczego MacVim uruchamia się inaczej przy każdym innym wywołaniu?

13

Zauważyłem, kiedy usiadłem dzisiaj, aby popracować nad moim MacBookiem, że w pewnym momencie ostatnio coś się .gvimrcpopsuło w stosunku do moich ustawień: kiedy uruchomiłem MacVima, wszystko wydawało się normalne, z wyjątkiem tego, że moje okno było bardzo małe (w przybliżeniu domyślny rozmiar ). Ciekawe, próbowałem, verbose set columns?który powiedział mi „180, ostatni zestaw z ~ / .gvimrc”, mimo że okno oczywiście nie miało 180 kolumn szerokości. set columns=180przywrócono okno do oczekiwanej szerokości.

Po zwykłym debugowaniu i podziale moich plików RC zauważyłem coś niezwykłego. Nie jestem pewien, czy ma to związek z tym, że moje kolumny nie mają zastosowania, czy nie, w każdym razie jest to ciekawe i nie mogę tego rozgryźć.

Jeśli uruchomię mvim -u NONE -c "set columns=100":, otrzymam takie okno: mvim 1

Jeśli ponownie uruchomię dokładnie to samo polecenie , otrzymuję: mvim 2

verbose set co?zgłasza odpowiednio 100 i 66, w obu przypadkach mówiąc „ostatni zestaw z argumentu -c”. Powtórzenie polecenia uruchomienia powoduje zmianę stanu okna.

Próbowałem nukania .viminfomiędzy biegami; to nie ma wpływu.

Używam teraz migawek MacVim 74, chociaż byłem na wcześniejszej wersji, kiedy to się zaczęło i uaktualniłem, aby zobaczyć, czy to tylko kwestia wersji. Mam 10.10.3 i możliwe jest, że to zachowanie jest spowodowane błędem specyficznym dla MacVima, który pojawił się w wyniku aktualizacji systemu operacyjnego (co nastąpiło dopiero niedawno). Jednak jeśli zainstaluję MacVima na laptopie mojej żony (z tą samą wersją systemu operacyjnego), zachowanie się nie powiela.

Jestem zagubiony. Co, u licha, może być przyczyną takiego zachowania?


EDYCJA: Po dalszym debugowaniu zauważyłem, że wydaje się to odtwarzać tylko wtedy, gdy mam zewnętrzny monitor podłączony do laptopa. To prowadzi mnie do przekonania, że ​​to jakiś błąd.


źródło

Odpowiedzi:

16

Po kilku godzinach spelunkowania bazy kodu MacVim, myślę, że rozumiem, dlaczego tak się dzieje.

Kiedy MacVim się uruchamia, odczytuje wcześniej zapisaną pozycję okna NSUserDefaultsi próbuje przywrócić tę pozycję. W tym momencie okno nie zostało jeszcze pokazane, a jego źródłem jest niektóre (prawdopodobnie wybrane w systemie operacyjnym) ustawienie domyślne, które zawsze znajduje się na ekranie głównym. Jeśli poprzednia pozycja okna znajdowała się na innym monitorze, zmiana pozycji okna wywoła zdarzenie „przeskalowane” (możliwe, że jest to nowe lub błąd w 10.10.3, ponieważ odpowiednie zdarzenie „przeskaluje” nie jest wygenerowane).

Spowoduje to, że MacVim będzie próbował zmienić rozmiar backendu Vima, ale jest zbyt wcześnie na wykonanie procesu, aby stan, który jest używany do zmiany rozmiaru, został poprawnie skonstruowany. Dlatego MacVim żąda, aby Vim zmienił rozmiar do wartości, która faktycznie jest wartością domyślną, co powoduje, że okno się kurczy następnym razem, gdy MacVim otrzyma odpowiedź na zmianę rozmiaru z backendu Vima (MacVim leniwie zmienia rozmiar okna).


EDYCJA: Myślę, że ta zmiana naprawia błąd . Powoduje, że zmiana rozmiaru okna nie następuje propagacja do backendu Vima, dopóki okno nie zostanie przedstawione.


źródło
1
Link jest zepsuty, a szkoda, bo brzmi interesująco. (Również: Uwielbiam używanie słowa „spelunking”): D
Wildcard
@Wildcard Zaktualizowałem link, aby wskazywał na PR, który ostatecznie dokonałem zamiast zatwierdzenia w moim oddziale lokalnym (który usunąłem, kiedy dostałem dostęp do zatwierdzenia do głównego repozytorium MacVima).