go.nvim/lua/go/term.lua
Aleš Brelih edda37cb5e
Cmd is tranformed to string before pushed to term (#151)
* 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>
2022-07-02 12:33:20 +10:00

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 }