よさげなレポジトリを発見した。

GitHub - RMichelsen/Nvy: Nvy - A Neovim client in C++
Nvy - A Neovim client in C++. Contribute to RMichelsen/Nvy development by creating an account on GitHub.
GitHub - RMichelsen/Nvy: Nvy - A Neovim client in C++ favicon https://github.com/RMichelsen/Nvy
GitHub - RMichelsen/Nvy: Nvy - A Neovim client in C++

だいぶ前に作ろうとして頓挫した

GitHub - ousttrue/nvim-dx: nvim frontend by D2D
nvim frontend by D2D. Contribute to ousttrue/nvim-dx development by creating an account on GitHub.
GitHub - ousttrue/nvim-dx: nvim frontend by D2D favicon https://github.com/ousttrue/nvim-dx
GitHub - ousttrue/nvim-dx: nvim frontend by D2D

の完成形。 どこがうまくいかなかったのか忘れてしまったが。

改造

GitHub - ousttrue/Nvy: Nvy - A Neovim client in C++
Nvy - A Neovim client in C++. Contribute to ousttrue/Nvy development by creating an account on GitHub.
GitHub - ousttrue/Nvy: Nvy - A Neovim client in C++ favicon https://github.com/ousttrue/Nvy
GitHub - ousttrue/Nvy: Nvy - A Neovim client in C++

20210815

MsgPack-RPC のバックエンドに昔作った

GitHub - ousttrue/msgpackpp: c++17 header only msgpack implementation. (msgpack-rpc-asio)
c++17 header only msgpack implementation. (msgpack-rpc-asio) - ousttrue/msgpackpp
GitHub - ousttrue/msgpackpp: c++17 header only msgpack implementation. (msgpack-rpc-asio) favicon https://github.com/ousttrue/msgpack-rpc-asio
GitHub - ousttrue/msgpackpp: c++17 header only msgpack implementation. (msgpack-rpc-asio)

におきかえる。

さらに、これのシリアライザーを自前の https://github.com/ousttrue/msgpackpp におきかえる。

  • CMake 化
  • RPC を c++20 化 (co_await)

で、最初の nvim 初期化を

auto api_info = co_await rpc.request("nvim_get_api_info");
rpc.notity("nvim_set_var", "nvy", 1);
auto path = co_await rpc.request("nvim_eval","stdpath('config')");
// initialize
rpc.notify("nvim_ui_attach");
rpc.on_message(&dispatcher);

のように書けるようにして整理する。

20210829

  • MsgPack-RPC のバックエンドを置きかえた
  • logger に RPC の内容を JSON 化して表示

だいたいリファクタリングが終わって改造しやすい状態になった。

  • <C-/> できるようにする。

を実装できた。 特定の VK が来たときに nvim のキーに変換するテーブルがあるので追加した。

case VK_OEM_2:
return "";

[2,"nvim_input",["<C-/>"]] が送信される。

修正が必要

非control時に

[2,"nvim_input",["</>"]] が送信される。

case VK_OEM_2:
if (GetKeyState(VK_CONTROL) < 0) {
// C-/
return "/";
}

なるほど。

NvimTexture へ続く

20210829 太字がずれる?