(Этот ответ, вероятно, значительно фрагментирован, мне потребовалось некоторое время, чтобы поиграть - я тоже хотел найти решение, потому что оно меня заинтриговало, а не просто награду в 200: P. Он более или менее показывает мой ход мыслей и экспериментирование.)
Теперь я могу воспроизвести его с gvim
в Linux, то есть /usr/bin/vim.gnome -g
; работает как vim -g
делает то же самое.
Ввод в код: (бесполезно в данном случае, но интересно делать и учиться делать)
Я просмотрел исходный код и теперь могу объяснить его несколько (но не с пользой!); он получает набор outfile
FILE (src/globals.h:1004
) (src/main.h:2275
); затем это записывается в src/getchar.h:1501
, в методе updatescript
, который используется gotchars
(строка 1215), который используется vgetorpeek
, который используется vgetc
и vpeekc
... ( нет, я не знаю, куда это идет!) тогда они используются во многих местах.
В любом случае, я полагаю, ключ находится где-то в src/gui.c
, но я не знаю, где сейчас! Также возможно, что некоторая последовательность клавиш «отправляется» (физически или виртуально, я не знаю), но, учитывая, что проблема одинакова для разных платформ, скорее всего, это проблема Vim, чем в противном случае.
Интересные ситуации , приводящие к вероятному объяснению:
Стоит также отметить, что если вы автоматически завершите работу, gvim -u NONE -w scriptout -c quit
(:quit
после загрузки) или gvim -u NONE -w scriptout -c quit
(мгновенный :quit
, никогда не показывает GUI), файл сценария останется пустым.
Кроме того, если вы откроете gvim, а затем закроете его с помощью кнопки X , не нажимая клавиши:
0000000: 80fd 6280 fd63 80fd 62 ..b..c..b
Если вы открываете gvim, кликаете, кликаете назад и используете :q
:
0000000: 80fd 6280 fd63 80fd 6280 fd2c 80fd 2e3a ..b..c..b..,...:
0000010: 710d q.
Так что я думаю, что оконные события внутренне переводятся во что-то еще. 80 fd 62
является открытой последовательностью, а 80 fd 63 80 fd 62
является закрытой последовательностью.
Я нашел и другой способ запуска 80fd
, который подводит меня к мысли, что это своего рода «пользователь имеет доступ к окну»; по умолчанию с GNOME в Ubuntu, Ctrl + Alt + S что-то делает с окном (не могу вспомнить, как он называется; вставляет все это в строку заголовка, приложение внутри теряет управление с клавиатуры и т. д.). gvim ...
(вы знаете аргументы!), i <</kbd> Ctrl + Alt + S (контракт) Ctrl + Alt + S (расширенный) > Esc Z Q производит это для меня:
0000000: 80fd 6269 3c80 fd63 80fd 623e 1b5a 51 ..bi<..c..b>.ZQ
Резюме: так что у нас есть то, что я считаю решением; gVim отлавливает оконные сообщения в некоторой форме и - должен или не должен - помещает их в scriptout
. Если вы думаете, что это не должно (или хотели бы знать, почему они остались, или если они вообще должны быть, или вам вообще нужно заботиться), спросите в списке Vim, я думаю.