edda37cb5e
* Cmd is tranformed to string before pushed to term Float terminal command is tranformed to string using table.concat before used. This allow us to use neovim buff option to unite quoting. * Update term.lua Co-authored-by: Ales Brelih <ales.brelih@3fs.si> Co-authored-by: rayx <rayx.cn@gmail.com>
66 lines
2.0 KiB
Lua
66 lines
2.0 KiB
Lua
local utils = require("go.utils")
|
|
local api = vim.api
|
|
local guihua_term = utils.load_plugin("guihua.lua", "guihua.floating")
|
|
if not guihua_term then
|
|
utils.warn("guihua not installed, please install ray-x/guihua.lua for GUI functions")
|
|
end
|
|
|
|
local function close_float_terminal()
|
|
local cur_buf = api.nvim_get_current_buf()
|
|
local has_var, float_term_win = pcall(api.nvim_buf_get_var, cur_buf, "go_float_terminal_win")
|
|
if not has_var then
|
|
return
|
|
end
|
|
if float_term_win[1] ~= nil and api.nvim_buf_is_valid(float_term_win[1]) then
|
|
api.nvim_buf_delete(float_term_win[1], { force = true })
|
|
end
|
|
if float_term_win[2] ~= nil and api.nvim_win_is_valid(float_term_win[2]) then
|
|
api.nvim_win_close(float_term_win[2], true)
|
|
end
|
|
end
|
|
|
|
local term = function(opts)
|
|
close_float_terminal()
|
|
|
|
local columns = api.nvim_get_option("columns")
|
|
local lines = api.nvim_get_option("lines")
|
|
|
|
local cur_buf = api.nvim_get_current_buf()
|
|
local win_width, win_height
|
|
if columns > 140 then
|
|
-- split in right
|
|
win_height = math.ceil(lines * 0.98)
|
|
win_width = math.ceil(columns * 0.45)
|
|
win_width = math.max(80, win_width)
|
|
|
|
opts.y = win_height
|
|
opts.x = columns - win_width
|
|
else
|
|
win_height = math.ceil(lines * 0.45)
|
|
win_width = math.ceil(columns * 0.98)
|
|
|
|
opts.y = opts.y or lines - win_height
|
|
opts.x = opts.x or 1
|
|
end
|
|
opts.win_height = opts.win_height or win_height
|
|
opts.win_width = opts.win_width or win_width
|
|
opts.border = opts.border or "single"
|
|
if opts.autoclose == nil then
|
|
opts.autoclose = true
|
|
end
|
|
-- run in neovim shell
|
|
if type(opts.cmd) == "table" then
|
|
opts.cmd = table.concat(opts.cmd, " ")
|
|
end
|
|
|
|
utils.log(opts)
|
|
local buf, win, closer = guihua_term.floating_term(opts)
|
|
api.nvim_command("setlocal nobuflisted")
|
|
api.nvim_buf_set_var(cur_buf, "go_float_terminal_win", { buf, win })
|
|
api.nvim_buf_set_var(cur_buf, "shellcmdflag", "shell-unquoting")
|
|
return buf, win, closer
|
|
end
|
|
|
|
-- term({cmd = 'echo abddeefsfsafd', autoclose = false})
|
|
return { run = term, close = close_float_terminal }
|