This (slightly) speeds up loading of all files that don't have
filetype=bqn as ftplugin/bqn.vim isn't sourced. On the other hand
plugin/*.vim files are always sourced on startup.
To investigate startup behavior, run with `nvim -Vnvim.log`.
---
ftplugin/bqn.vim | 53 ++++++++++++++++++++++++++++++++++++++++++++++++
plugin/bqn.vim | 52 -----------------------------------------------
2 files changed, 53 insertions(+), 52 deletions(-)
delete mode 100644 plugin/bqn.vim
diff --git a/ftplugin/bqn.vim b/ftplugin/bqn.vim
index 1550ec0..8a2d00f 100644
--- a/ftplugin/bqn.vim
+++ b/ftplugin/bqn.vim
@@ -1,3 +1,56 @@
+function! BQNEvalTillLine()
+ return luaeval(
+ \ 'require("bqn").evalBQN(0, _A[1], false)',
+ \ [line(".")])
+endfunction
+
+function! BQNEvalRange() range
+ return luaeval(
+ \ 'require("bqn").evalBQN(_A[1] - 1, _A[2], false)',
+ \ [a:firstline, a:lastline])
+endfunction
+
+function! BQNExplain()
+ return luaeval(
+ \ 'require("bqn").evalBQN(_A[1] - 1, _A[1], true)',
+ \ [line(".")])
+endfunction
+
+function! BQNClearAfterLine()
+ return luaeval(
+ \ 'require("bqn").clearBQN(_A[1] - 1, -1)',
+ \ [line(".")])
+endfunction
+
+function! BQNClearRange()
+ return luaeval(
+ \ 'require("bqn").clearBQN(_A[1] - 1, _A[2])',
+ \ [a:firstline, a:lastline])
+endfunction
+
+hi link bqnoutok Comment
+hi link bqnouterr Error
+
+command! BQNEvalTillLine call BQNEvalTillLine()
+command! -range BQNEvalRange <line1>,<line2>call BQNEvalRange()
+command! BQNEvalFile :lua require("bqn").evalBQN(0, -1, false)
+
+command! BQNExplain call BQNExplain()
+
+command! BQNClearAfterLine call BQNClearAfterLine()
+command! -range BQNClearRange <line1>,<line2>call BQNClearRange()
+command! BQNClearFile :lua require("bqn").clearBQN(0, -1)
+
+nnoremap <silent> <plug>(bqn_eval_till_line) :BQNEvalTillLine<CR>
+xnoremap <silent> <plug>(bqn_eval_range) :BQNEvalRange<CR>
+nnoremap <silent> <plug>(bqn_eval_file) :BQNEvalFile<CR>
+
+nnoremap <silent> <plug>(bqn_explain) :BQNExplain<CR>
+
+nnoremap <silent> <plug>(bqn_clear_after_line) :BQNClearAfterLine<CR>
+xnoremap <silent> <plug>(bqn_clear_range) :BQNClearRange<CR>
+nnoremap <silent> <plug>(bqn_clear_file) :BQNClearFile<CR>
+
nmap <buffer> <CR> <plug>(bqn_eval_till_line)
xmap <buffer> <CR> <plug>(bqn_eval_range)
nmap <buffer> <leader>bf <plug>(bqn_eval_file)
diff --git a/plugin/bqn.vim b/plugin/bqn.vim
deleted file mode 100644
index 6872065..0000000
--- a/plugin/bqn.vim
@@ -1,52 +0,0 @@
-function! BQNEvalTillLine()
- return luaeval(
- \ 'require("bqn").evalBQN(0, _A[1], false)',
- \ [line(".")])
-endfunction
-
-function! BQNEvalRange() range
- return luaeval(
- \ 'require("bqn").evalBQN(_A[1] - 1, _A[2], false)',
- \ [a:firstline, a:lastline])
-endfunction
-
-function! BQNExplain()
- return luaeval(
- \ 'require("bqn").evalBQN(_A[1] - 1, _A[1], true)',
- \ [line(".")])
-endfunction
-
-function! BQNClearAfterLine()
- return luaeval(
- \ 'require("bqn").clearBQN(_A[1] - 1, -1)',
- \ [line(".")])
-endfunction
-
-function! BQNClearRange()
- return luaeval(
- \ 'require("bqn").clearBQN(_A[1] - 1, _A[2])',
- \ [a:firstline, a:lastline])
-endfunction
-
-hi link bqnoutok Comment
-hi link bqnouterr Error
-
-command! BQNEvalTillLine call BQNEvalTillLine()
-command! -range BQNEvalRange <line1>,<line2>call BQNEvalRange()
-command! BQNEvalFile :lua require("bqn").evalBQN(0, -1, false)
-
-command! BQNExplain call BQNExplain()
-
-command! BQNClearAfterLine call BQNClearAfterLine()
-command! -range BQNClearRange <line1>,<line2>call BQNClearRange()
-command! BQNClearFile :lua require("bqn").clearBQN(0, -1)
-
-nnoremap <silent> <plug>(bqn_eval_till_line) :BQNEvalTillLine<CR>
-xnoremap <silent> <plug>(bqn_eval_range) :BQNEvalRange<CR>
-nnoremap <silent> <plug>(bqn_eval_file) :BQNEvalFile<CR>
-
-nnoremap <silent> <plug>(bqn_explain) :BQNExplain<CR>
-
-nnoremap <silent> <plug>(bqn_clear_after_line) :BQNClearAfterLine<CR>
-xnoremap <silent> <plug>(bqn_clear_range) :BQNClearRange<CR>
-nnoremap <silent> <plug>(bqn_clear_file) :BQNClearFile<CR>
--
2.38.1
This is required if the code has any references to relative paths. E.g.
imports typically require this unless the working directory was already
the correct one.
---
lua/bqn.lua | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/lua/bqn.lua b/lua/bqn.lua
index 8414acc..372b01a 100644
--- a/lua/bqn.lua
+++ b/lua/bqn.lua
@@ -59,6 +59,12 @@ function evalBQN(from, to, explain)
bqn = "BQN"
end
+ -- NOTE: BQN imports from relative paths only work by setting the
+ -- working directory to that of the script. We will set it back
+ -- afterwards.
+ local origdir = vim.api.nvim_eval("getcwd()")
+ local bufdir = vim.fn.expand("%:p:h")
+
-- FIXME: Lua's io.popen() does not support reading stderr, nor combining
-- stdout and stderr to a single stream. Using 2>&1 to combine the streams
-- in the meantime.
@@ -69,9 +75,11 @@ function evalBQN(from, to, explain)
cmd = cmd .. "p \"" .. program .. "\" 2>&1"
end
+ vim.cmd.cd(bufdir)
local p = assert(io.popen(cmd))
local output = p:read('*all')
p:close()
+ vim.cmd.cd(origdir)
local error = nil
local lines = {}
--
2.38.1