2013-08-31 1 views
3

Я пишу плагин VIM в Python. Я хотел бы иметь возможность запускать функцию, которая будет ждать события в фоновом режиме и при необходимости обновлять буфер, без замораживания всего окна. Это возможно?Как правильно запустить бесконечный цикл и по-прежнему работать с буферами в плагине VIM?

Я попытался запустить отдельную тему, используя модуль threading, который не помог. Изменения в буфере отражаются только тогда, когда функция возвращается (и блокирующий поток завершается).

Уточнение: У меня есть функция, которая может занять несколько десятков секунд, чтобы вернуть обновления. Мне нужно обновить один из буферов с возвращенными данными (и снова вызвать функцию).

Как это назвать «асинхронно» и не замерзать окно? Если я могу это сделать, охватывая отдельный процесс, как мне настроить IPC?

Еще одно обновление: Что делать, если я создать временный файл, иметь отдельный процесс записи на него, и наблюдать за FileChangedShell как предложено here автоматически обновить его?

(Если у меня нет ответа «это не сработает», и у меня нет идей, я попытаюсь это сделать через некоторое время и обновить результаты).

+0

Я всегда думал, что vim был выделен в виде резьбы, и было очень сложно сделать что-нибудь многопоточное. – FDinoff

+0

@FDinoff. Я столкнулся с чем-то подобным; но не мог понять, что это значит. Хотелось бы надеяться, что задание прямого вопроса даст мне некоторую ясность в этом вопросе. –

ответ

0

Это может быть абстрактным, не зная деталей. Но будет ли опрос для данных о событиях работать для вашего плагина? Обратно назад я писал какой-то плагин vim для Ensime (демон sca compaletion) и имел аналогичную проблему. Для меня открытие нового процесса и ожидание присутствия данных в сокетах работало очень хорошо. Это было очевидно из-за того, что сам сервер был асинхронным и использовался для записи результата в сокете в том порядке, в котором они были получены. Надеюсь это поможет.

+0

Я не уверен, что понимаю ваше предложение. Вы создавали процесс и записывали обновления в сокет? Как вы читали его тогда, разве у вас не было той же проблемы с блокировкой во время чтения? Я попытался уточнить свой вопрос, fwiw. –

 Смежные вопросы

  • Нет связанных вопросов^_^