Vim python's buffer.append (line) переключить фокус окна - PullRequest
2 голосов
/ 24 августа 2009

Я пытаюсь заполнить буфер Vim из отдельного потока, используя этот код Python.

python << PYTHON_CODE

import vim
import time

buffer_number = -1
class AppendLineTest( Thread ):
   def run(self):
      buffer = vim.buffers[buffer_number - 1]

      for i in range(10):
         buffer.append('Line number %s' % i)
         time.sleep(1)

PYTHON_CODE

function! s:test()
   split TestBuffer
   exec 'python buffer_number = '.bufnr('%')

   setlocal noswapfile
   setlocal bufhidden=delete
   setlocal buftype=nofile
   setlocal nobuflisted
   setlocal nonumber
   setlocal nowrap
   setlocal nocursorline

   python AppendLineTest().start()
endfunction

command! -nargs=0 PythonAppendTest call s:test()

Я не уверен, что доступ к буферам Vim из отдельных потоков разрешен, и удивляюсь, есть ли какой-нибудь безопасный способ отправки. Но если это разрешено, я бы хотел избавиться от прыжка курсора при добавлении строки.

Чтобы воспроизвести поведение, сохраните код в каком-нибудь файле name.vim и откройте его в Vim. Тогда

:source %

А потом

PythonAppendTest

Линии будут добавлены 10 раз во временный буфер. Просто переместите курсор назад в окно, где вы были, и вы поймете, о чем я говорю.

Если вам интересно, зачем кому-то нужно добавлять строки в буферы из отдельного потока, вот пример:

  • unix top
  • Хвост Unix
  • Новости
  • Адрес электронной почты * * 1023

Пока вы работаете, они появляются в некотором предопределенном буфере.

Заранее спасибо.

1 Ответ

2 голосов
/ 24 августа 2009

Я не думаю, что Vim очень терпим к нескольким потокам без исправлений. В обсуждении по этой ссылке гораздо больше деталей, но я подозреваю, что то, что вы хотите, далеко не тривиально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...