¿Por qué MacVim comienza de manera diferente cada otra invocación?

13

Cuando me senté a trabajar en mi MacBook hoy, noté que en algún momento recientemente algo se había estropeado con respecto a mi .gvimrcconfiguración: cuando lancé MacVim, todo parecía normal, excepto que mi ventana era muy pequeña (aproximadamente el tamaño predeterminado ) Curioso, intenté lo verbose set columns?que me dijo "180, último conjunto de ~ / .gvimrc" a pesar de que la ventana obviamente no tenía 180 columnas de ancho. set columns=180restauró la ventana al ancho esperado.

Después de la depuración y bisección habituales de mis archivos RC, noté algo inusual. No estoy seguro de si esto está relacionado con que los tamaños de mis columnas no se apliquen o no, de cualquier manera es curioso y no puedo entenderlo.

Si ejecuto: mvim -u NONE -c "set columns=100"obtengo una ventana como esta: mvim 1

Si ejecuto exactamente el mismo comando nuevamente, obtengo esto: mvim 2

verbose set co?informa 100 y 66, respectivamente, en ambos casos diciendo "último conjunto de argumento -c". La repetición del comando de inicio hace que el estado de la ventana se alterne.

He intentado bombardear .viminfoentre carreras; No tiene ningún efecto.

Estoy usando la instantánea 74 de MacVim ahora, aunque estaba en una versión anterior cuando esto comenzó a suceder y actualicé para ver si era solo una versión. Estoy en 10.10.3, y es posible que este comportamiento se deba a un error específico de MacVim que surgió como resultado de la actualización del sistema operativo (que solo ocurrió recientemente). Sin embargo, si instalo MacVim en la computadora portátil de mi esposa (que ejecuta la misma versión del sistema operativo), el comportamiento no se reproduce.

Estoy perdido ¿Qué demonios podría estar causando este comportamiento?


EDITAR: después de continuar la depuración, he notado que parece que solo se reproduce de esta manera si tengo un monitor externo conectado a la computadora portátil. Esto me lleva a creer que es algún tipo de error.


fuente

Respuestas:

16

Después de explicar la base de código de MacVim durante unas horas, creo que puedo ver por qué sucede esto.

Cuando se inicia MacVim, lee la posición de la ventana guardada anteriormente NSUserDefaultse intenta restaurar esa posición. En este momento, la ventana aún no se ha mostrado, y su origen es un valor predeterminado (posiblemente seleccionado por el sistema operativo) que siempre está en la pantalla 'principal'. Si la posición anterior de la ventana estaba en un monitor diferente, cambiar la posición de la ventana desencadenará un evento "redimensionado" (es posible que esto sea nuevo, o un error, en 10.10.3, ya que un evento "redimensionar" correspondiente no es generado).

Esto hará que MacVim intente cambiar el tamaño del backend de Vim, pero es demasiado temprano en la ejecución del proceso para que el estado que se usa para efectuar ese cambio de tamaño se construya correctamente. Por lo tanto, MacVim solicita que Vim cambie su tamaño a lo que efectivamente es un valor predeterminado, lo que hace que la ventana se reduzca la próxima vez que MacVim obtenga una respuesta al cambio de tamaño desde el backend de Vim (MacVim cambia el tamaño de las ventanas perezosamente).


EDITAR: Este cambio corrige el error , creo. Hace que los cambios de tamaño de la ventana no se propaguen hacia el backend de Vim hasta que se haya presentado la ventana.


fuente
1
El enlace está roto, lo cual es una pena porque suena interesante. (También: Me encanta su uso de la palabra "espeleología"): D
Comodín
@Wildcard Actualicé el enlace para señalar el PR que eventualmente hice en lugar de la confirmación en mi sucursal local (que eliminé cuando obtuve acceso de confirmación al repositorio principal de MacVim).