Pourquoi MacVim démarre-t-il différemment toutes les autres invocations?


13

J'ai remarqué quand je me suis assis pour faire un peu de travail sur mon MacBook aujourd'hui qu'à un moment donné récemment quelque chose s'était gâché par rapport à mes .gvimrcparamètres: quand j'ai lancé MacVim, tout semblait normal sauf que ma fenêtre était très petite (environ la taille par défaut ). Curieux, j'ai essayé verbose set columns?qui m'a dit "180, dernier ensemble de ~ / .gvimrc" même si la fenêtre n'était évidemment pas large de 180 colonnes. set columns=180restauré la fenêtre à la largeur attendue.

Après le débogage et la bissection habituels de mes fichiers RC, j'ai remarqué quelque chose d'inhabituel. Je ne sais pas si cela est lié au fait que mes colonnes ne s'appliquent pas ou non, de toute façon c'est curieux et je ne peux pas le comprendre.

Si je lance mvim -u NONE -c "set columns=100":, j'obtiens une fenêtre comme celle-ci: mvim 1

Si je lance à nouveau exactement la même commande , j'obtiens ceci: mvim 2

verbose set co?rapporte 100 et 66, respectivement, dans les deux cas en disant "dernier ensemble à partir de l'argument -c". La répétition de la commande de lancement fait alterner l'état de la fenêtre.

J'ai essayé de parcourir les .viminfopistes; cela n'a aucun effet.

J'utilise maintenant MacVim snapshot 74, bien que j'étais sur une version antérieure lorsque cela a commencé et que j'ai été mis à niveau pour voir s'il s'agissait simplement d'une version. Je suis sur 10.10.3, et il est possible que ce comportement soit dû à un bogue spécifique à MacVim qui est apparu à la suite de la mise à jour du système d'exploitation (ce qui n'est arrivé que récemment). Cependant, si j'installe MacVim sur l'ordinateur portable de ma femme (exécutant la même version du système d'exploitation), le comportement ne se reproduit pas.

Je suis à perte. Qu'est-ce qui pourrait bien causer ce comportement?


EDIT: Après un débogage continu, j'ai remarqué qu'il semble ne se reproduire de cette façon que si j'ai un moniteur externe connecté à l'ordinateur portable. Cela m'amène à croire que c'est une sorte de bogue.

Réponses:


16

Après avoir fait tourner la base de code MacVim pendant quelques heures, je pense que je peux voir pourquoi cela se produit.

Lorsque MacVim démarre, il lit la position de la fenêtre précédemment enregistrée NSUserDefaultset essaie de restaurer cette position. À ce stade, la fenêtre n'a pas encore été affichée, et son origine est une valeur par défaut (éventuellement sélectionnée par le système d'exploitation) qui est toujours sur l'écran `` principal ''. Si la position précédente de la fenêtre était sur un moniteur différent, changer la position de la fenêtre déclenchera un événement "redimensionné" (il est possible que ce soit nouveau, ou un bug, en 10.10.3, car un événement "redimensionner" correspondant n'est pas généré).

Cela amènera MacVim à essayer de redimensionner le backend Vim, mais il est trop tôt dans l'exécution du processus pour que l'état utilisé pour effectuer ce redimensionnement soit correctement construit. Ainsi, MacVim demande à Vim de se redimensionner à ce qui est effectivement une valeur par défaut, ce qui entraîne la réduction de la fenêtre la prochaine fois que MacVim obtient une réponse au redimensionnement du backend Vim (MacVim redimensionne les fenêtres paresseusement).


EDIT: Ce changement corrige le bug , je pense. Cela empêche les redimensionnements de fenêtre de se propager dans le backend Vim tant que la fenêtre n'a pas été présentée.


1
Le lien est rompu, ce qui est dommage car cela semble intéressant. (Aussi: j'adore votre utilisation du mot "spéléologie".): D
Wildcard

@Wildcard J'ai mis à jour le lien pour pointer vers le PR que j'ai finalement fait au lieu de la validation dans ma branche locale (que j'ai supprimée lorsque j'ai obtenu l'accès de validation au référentiel principal de MacVim).
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.