From 52f8acb1244b3ed71c1ae4fff8e299790b42be8d Mon Sep 17 00:00:00 2001 From: glacambre Date: Sun, 28 Apr 2024 15:37:24 +0200 Subject: [PATCH] Add firenvim#write() function enabling users to write arbitrary data The goal of this commit is to enable the use case desired by #1589. This isn't a perfect fit as the user was asking for a way to setup post-processing of their text instead of having to call firenvim#write, but as I am on a tight schedule for publishing a new release I do not have time for further discussions, and following the pattern of firenvim#hide_frame, firenvim#eval_js, firenvim#focus_* feels like a very safe choice. --- autoload/firenvim.vim | 16 ++++++++++++++++ src/frame.ts | 9 +-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/autoload/firenvim.vim b/autoload/firenvim.vim index 5cebd091..0f206ad1 100644 --- a/autoload/firenvim.vim +++ b/autoload/firenvim.vim @@ -50,6 +50,22 @@ function! firenvim#hide_frame() abort call rpcnotify(firenvim#get_chan(), 'firenvim_hide_frame') endfunction +" Asks the browser extension to hide the firenvim frame +function! firenvim#write(...) abort + let l:text = "" + let l:cursor = [0, 0] + if len(a:000) == 0 + let l:text = nvim_buf_get_lines(0, 0, -1, 0) + let l:cursor = nvim_win_get_cursor(0) + elseif len(a:000) == 2 + let l:text = a:0 + let l:cursor = a:1 + else + throw "firenvim#write should be called either with 0 arguments or with 2 arguments (string, [number, number])" + endif + call rpcnotify(firenvim#get_chan(), 'firenvim_bufwrite', {"text": l:text, "cursor": l:cursor}) +endfunction + " Asks the browser extension to send one or multiple key events to the " underlying input field. function! firenvim#press_keys(...) abort diff --git a/src/frame.ts b/src/frame.ts index 80a10c67..c35db697 100644 --- a/src/frame.ts +++ b/src/frame.ts @@ -118,14 +118,7 @@ export const isReady = browser group = group, pattern = filename, callback = function(ev) - vim.fn.rpcnotify( - channel, - "firenvim_bufwrite", - { - text = vim.api.nvim_buf_get_lines(0, 0, -1, 0), - cursor = vim.api.nvim_win_get_cursor(0) - } - ) + vim.fn["firenvim#write"]() end }) vim.api.nvim_create_autocmd("VimLeave", {