Warum startet MacVim bei jedem zweiten Aufruf anders?


13

Als ich mich heute .gvimrchinsetzte, um an meinem MacBook zu arbeiten, bemerkte ich, dass sich irgendwann in letzter Zeit etwas in Bezug auf meine Einstellungen geändert hatte: Als ich MacVim startete, schien alles normal zu sein, außer dass mein Fenster sehr klein war (ungefähr die Standardgröße) ). Neugierig versuchte ich, verbose set columns?was mir sagte "180, zuletzt eingestellt von ~ / .gvimrc", obwohl das Fenster offensichtlich nicht 180 Spalten breit war. set columns=180stellte das Fenster auf die erwartete Breite wieder her.

Nach dem üblichen Debugging und der Zweiteilung meiner RC-Dateien fiel mir etwas Ungewöhnliches auf. Ich bin mir nicht sicher, ob dies damit zusammenhängt, dass meine Spaltengrößen nicht zutreffen oder nicht. So oder so ist es merkwürdig und ich kann es nicht herausfinden.

Wenn ich: mvim -u NONE -c "set columns=100"renne, bekomme ich folgendes Fenster: mvim 1

Wenn ich genau den gleichen Befehl erneut ausführe , erhalte ich Folgendes: mvim 2

verbose set co?meldet jeweils 100 und 66 und sagt in beiden Fällen "last set from -c argument". Wenn Sie den Startbefehl wiederholen, wechselt der Fensterstatus.

Ich habe versucht, .viminfozwischen den Läufen Nuking ; es hat keine Wirkung.

Ich verwende jetzt MacVim Snapshot 74, obwohl ich mich in einer früheren Version befand, als dies passierte, und ein Upgrade durchgeführt habe, um festzustellen, ob es sich nur um eine Versionierungssache handelte. Ich bin auf 10.10.3 und es ist möglich, dass dieses Verhalten auf einen MacVim-spezifischen Fehler zurückzuführen ist, der als Ergebnis des Betriebssystem-Updates aufgetreten ist (was erst kürzlich passiert ist). Wenn ich jedoch MacVim auf dem Laptop meiner Frau installiere (mit derselben Betriebssystemversion), wird das Verhalten nicht reproduziert.

Ich bin ratlos. Was in aller Welt könnte dieses Verhalten verursachen?


BEARBEITEN: Nach dem fortgesetzten Debuggen ist mir aufgefallen, dass es nur so wiedergegeben werden kann, wenn ein externer Monitor an den Laptop angeschlossen ist. Das lässt mich glauben, dass es eine Art Fehler ist.

Antworten:


16

Nachdem ich die MacVim-Codebasis einige Stunden lang analysiert habe, kann ich nachvollziehen, warum dies passiert.

Beim Start von MacVim wird die zuvor gespeicherte Fensterposition gelesen NSUserDefaultsund versucht, diese Position wiederherzustellen. Zu diesem Zeitpunkt wurde das Fenster noch nicht angezeigt, und sein Ursprung ist eine Standardeinstellung (möglicherweise das ausgewählte Betriebssystem), die immer auf dem Hauptbildschirm angezeigt wird. Wenn sich die vorherige Position des Fensters auf einem anderen Monitor befand, wird durch Ändern der Fensterposition ein Ereignis "Größe geändert" ausgelöst (dies ist möglicherweise neu oder ein Fehler in 10.10.3, da ein entsprechendes Ereignis "Größe ändern" nicht vorhanden ist erzeugt).

Dies veranlasst MacVim, zu versuchen, die Größe des Vim-Backends zu ändern, aber es ist zu früh in der Ausführung des Prozesses, damit der Status, der verwendet wird, diese Größenänderung bewirkt, ordnungsgemäß erstellt wird. Aus diesem Grund fordert MacVim Vim auf, sich selbst auf einen Standardwert zu verkleinern, wodurch das Fenster verkleinert wird, wenn MacVim das nächste Mal vom Vim-Backend eine Antwort auf die Größenänderung erhält (MacVim ändert die Größe von Fenstern träge).


EDIT: Diese Änderung behebt den Fehler , denke ich. Dadurch wird die Größe des Fensters erst dann in das Vim-Backend übertragen, wenn das Fenster angezeigt wurde.


1
Die Verbindung ist unterbrochen, was schade ist, weil es interessant klingt. (Auch: Ich liebe deine Verwendung des Wortes "Höhlenforschung".): D
Wildcard

@Wildcard Ich habe den Link aktualisiert, um auf den PR zu verweisen, den ich letztendlich anstelle des Commits in meiner lokalen Filiale erstellt habe (den ich gelöscht habe, als ich den Commit-Zugriff auf das Haupt-Repository von MacVim erhalten habe).
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.