neovim/pynvim

simplify remote plugins

justinmk opened this issue · 0 comments

Problem

The design, and usage, of remote plugins can be simplified, as described in neovim/neovim#27949

tl;dr:

  • remove the concept of "remote plugins"
  • instead, any python module that imports pynvim can call set_handler('foo', myFunction) to handle the "foo" request from Nvim
  • "remote plugins" become plain old Lua plugins which call RPC methods on the python module

Solution

  • Apply the above proposal to pynvim.
  • Deprecate the old rplugin interface.
  • Provide a migration script or documentation for old rplugins.

Reference

Implementation in node-client: neovim/node-client#344

Related work here (this Nvim RPC application does not use rplugins, it sets up its own RPC methods which can be called from the Nvim peer): https://github.com/b0o/blender.nvim/blob/eb495c3d7217efb4bdec4e50d1f9be1372d33e2c/blender_nvim/rpc.py#L115-L127

Since I'm attaching to neovim from an external python program, not as an rplugin, pynvim doesn't start its event loop by default. So I'm spawning a new thread, and starting pynvim's event loop on it. I'm also registering request/notification handlers which I call when pynvim receives RPC messages from neovim. I'm using an "executor" to run the registered callbacks on the main thread. It's working great.