Почему MacVim запускается по-разному при каждом другом вызове?

13

Когда я сел сегодня поработать над своим MacBook, я заметил, что в какой-то момент недавно что-то .gvimrcиспортилось из- за моих настроек: когда я запустил MacVim, все выглядело нормально, за исключением того, что мое окно было очень маленьким (примерно по умолчанию) ). Любопытно, я попробовал, verbose set columns?который сказал мне "180, последний набор из ~ / .gvimrc", хотя окно было явно не 180 столбцов в ширину. set columns=180восстановил окно до ожидаемой ширины.

После обычной отладки и деления пополам моих файлов RC я заметил нечто необычное. Я не уверен, связано ли это с тем, что размеры моего столбца не применяются или нет, в любом случае это любопытно, и я не могу понять это.

Если я запускаю:, mvim -u NONE -c "set columns=100"я получаю окно, подобное этому: мвим 1

Если я снова выполню ту же самую команду , я получу это: мвим 2

verbose set co?сообщает 100 и 66 соответственно, в обоих случаях говоря «последний набор из аргумента -c». Повторение команды запуска приводит к изменению состояния окна.

Я пробовал стрелять .viminfoмежду пробежками; это не имеет никакого эффекта.

Сейчас я использую снимок MacVim 74, хотя я был на более ранней версии, когда это начало происходить и обновлялся, чтобы посмотреть, была ли это просто версиями. Я на 10.10.3, и вполне возможно, что такое поведение связано с MacVim-специфической ошибкой, которая появилась в результате обновления ОС (что произошло только недавно). Однако, если я установлю MacVim на ноутбук моей жены (с той же версией ОС), поведение не воспроизводится.

Я в растерянности. Что на земле может быть причиной такого поведения?


РЕДАКТИРОВАТЬ: После продолжительной отладки, я заметил, что, кажется, воспроизводится таким образом, только если у меня есть внешний монитор, подключенный к ноутбуку. Это наводит меня на мысль, что это какая-то ошибка.


источник

Ответы:

16

После нескольких часов написания базы кода MacVim, я думаю, я понимаю, почему это происходит.

Когда MacVim запускается, он считывает ранее сохраненную позицию окна NSUserDefaultsи пытается восстановить эту позицию. В данный момент окно на самом деле еще не было показано, и его происхождение является некоторым (возможно, выбранной ОС) по умолчанию, которое всегда находится на «главном» экране. Если предыдущая позиция окна была на другом мониторе, изменение позиции окна вызовет событие «измененного размера» (возможно, это новое или ошибка, в 10.10.3, поскольку соответствующее событие «будет изменять размер» не генерируется).

Это приведет к тому, что MacVim попытается изменить размер серверной части Vim, но пока слишком рано выполнять процесс для состояния, которое используется для того, чтобы изменить размер, чтобы он был правильно сконструирован. Таким образом, MacVim запрашивает, чтобы Vim изменил свой размер до значения, которое является значением по умолчанию, что заставляет окно уменьшаться в следующий раз, когда MacVim получает ответ на изменение размера от бэкэнда Vim (MacVim изменяет размер окон лениво).


РЕДАКТИРОВАТЬ: Это изменение исправляет ошибку , я думаю. Это приводит к тому, что размеры окна не распространяются в бэкэнд Vim до тех пор, пока окно не будет представлено.


источник
1
Ссылка не работает, это позор, потому что это звучит интересно. (Также: я люблю ваше использование слова "spelunking."): D
Wildcard
@Wildcard Я обновил ссылку, чтобы указать на PR, который я в итоге сделал вместо коммита в моей локальной ветке (который я удалил, когда получил доступ к коммиту в главный репозиторий MacVim).