Чому MacVim починає по-різному кожне інше виклик?


13

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

Після звичайної налагодження та розбиття моїх RC-файлів я помітив щось незвичне. Я не впевнений, що це стосується того, що розміри моїх стовпців не застосовуються чи ні, інакше це цікаво, і я не можу це зрозуміти.

Якщо я запускаю:, mvim -u NONE -c "set columns=100"я отримую таке вікно: mvim 1

Якщо я повторю точно таку ж команду , я отримую це: mvim 2

verbose set co?повідомляє 100 і 66 відповідно в обох випадках, кажучи "останній набір з -c аргументу". Повторення команди запуску призводить до чергування стану вікна.

Я намагався нукінг .viminfoміж пробіжками; це не має ефекту.

Зараз я використовую знімок MacVim 74, хоча я працював на більш ранній версії, коли це почалося і вдосконалено, щоб побачити, чи це просто версія версії. Я 10.10.3, і цілком можливо, що така поведінка пов’язана із специфічною для MacVim помилкою, що з’явилася в результаті оновлення ОС (що відбулося лише нещодавно). Однак якщо я встановив MacVim на ноутбук своєї дружини (працює з тією ж версією ОС), поведінка не відтворюється.

Я в збитку. Що на землі може спричинити таку поведінку?


EDIT: Після тривалої налагодження я помітив, що, здається, він відтворюється лише таким чином, якщо у мене підключений зовнішній монітор до ноутбука. Це змушує мене повірити, що це якась помилка.

Відповіді:


16

Після прорахування бази коду MacVim протягом декількох годин, я думаю, я можу зрозуміти, чому це відбувається.

Коли запускається MacVim, він зчитує збережену раніше позицію вікна NSUserDefaultsі намагається відновити це положення. На даний момент вікно ще фактично не показане, і його походження є деяким (можливо, вибраним ОС) за замовчуванням, яке завжди знаходиться на "головному" екрані. Якщо попереднє положення вікна було на іншому моніторі, зміна положення вікна спричинить "зміни розміру" події (можливо, це нова або помилка в 10.10.3, оскільки відповідна подія "змінить розмір" не є згенеровано).

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


EDIT: Я думаю, що ця зміна виправляє помилку . Це призводить до того, що розмір вікна не поширюється вниз на сервер Vim, поки вікно не буде представлено.


1
Посилання розірвано, що шкода, бо це звучить цікаво. (Також: я люблю вживати слово "spelunking"): D
Wildcard

@Wildcard Я оновив посилання, щоб вказати на PR, який я врешті-решт зробив замість комітету в моєму місцевому відділенні (який я видалив, коли отримав доступ до основного сховища MacVim).
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.