aboutsummaryrefslogtreecommitdiff
path: root/lua/nvterm/terminal.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/nvterm/terminal.lua')
-rw-r--r--lua/nvterm/terminal.lua148
1 files changed, 85 insertions, 63 deletions
diff --git a/lua/nvterm/terminal.lua b/lua/nvterm/terminal.lua
index 3915158..1f93e85 100644
--- a/lua/nvterm/terminal.lua
+++ b/lua/nvterm/terminal.lua
@@ -1,111 +1,133 @@
-local util = require('nvterm.termutil')
+local util = require "nvterm.termutil"
local a = vim.api
local nvterm = {}
local terminals = {}
-
local function get_last(list)
- if list then return not vim.tbl_isempty(list) and list[#list] or nil end
- return terminals[#terminals] or nil
+ if list then
+ return not vim.tbl_isempty(list) and list[#list] or nil
+ end
+ return terminals[#terminals] or nil
end
local function get_type(type)
- return vim.tbl_filter(function(t)
- return t.type == type
- end, terminals.list)
+ return vim.tbl_filter(function(t)
+ return t.type == type
+ end, terminals.list)
end
local function get_still_open()
- return vim.tbl_filter(function(t)
- return t.open == true
- end, terminals.list)
+ return vim.tbl_filter(function(t)
+ return t.open == true
+ end, terminals.list)
end
local function get_last_still_open()
- return get_last(get_still_open())
+ return get_last(get_still_open())
end
local function get_type_last(type)
- return get_last(get_type(type))
+ return get_last(get_type(type))
end
-local create_term_window = function (type)
- util.execute_type_cmd(type, terminals)
- vim.wo.relativenumber = false
- vim.wo.number = false
- return a.nvim_get_current_win()
+local create_term_window = function(type)
+ util.execute_type_cmd(type, terminals)
+
+ vim.wo.relativenumber = false
+ vim.wo.number = false
+
+ return a.nvim_get_current_win()
end
-local create_term = function (type)
- local win = create_term_window(type)
- local buf = a.nvim_create_buf(false, true)
- a.nvim_buf_set_option(buf, 'filetype', 'terminal')
- a.nvim_buf_set_option(buf, 'buflisted', false)
- a.nvim_win_set_buf(win, buf)
- local job_id = vim.fn.termopen(vim.o.shell)
- local term = { win = win, buf = buf, open = true, type=type, job_id=job_id}
- table.insert(terminals.list, term)
- vim.cmd('startinsert')
- return term
+local create_term = function(type)
+ local win = create_term_window(type)
+ local buf = a.nvim_create_buf(false, true)
+
+ a.nvim_buf_set_option(buf, "filetype", "terminal")
+ a.nvim_buf_set_option(buf, "buflisted", false)
+ a.nvim_win_set_buf(win, buf)
+
+ local job_id = vim.fn.termopen(vim.o.shell)
+ local term = { win = win, buf = buf, open = true, type = type, job_id = job_id }
+
+ table.insert(terminals.list, term)
+ vim.cmd "startinsert"
+
+ return term
end
local ensure_and_send = function(cmd, type)
- terminals = util.verify_terminals(terminals)
- local term = type and get_type_last(type) or get_last_still_open() or nvterm.new("vertical")
- if not term then term = nvterm.new("horizontal") end
- a.nvim_chan_send(term.job_id, cmd..'\n')
+ terminals = util.verify_terminals(terminals)
+ local term = type and get_type_last(type) or get_last_still_open() or nvterm.new "vertical"
+
+ if not term then
+ term = nvterm.new "horizontal"
+ end
+
+ a.nvim_chan_send(term.job_id, cmd .. "\n")
end
-local call_and_restore = function (fn, opts)
- local current_win = a.nvim_get_current_win()
- local mode = a.nvim_get_mode().mode == 'i' and 'startinsert' or 'stopinsert'
- fn(unpack(opts))
- a.nvim_set_current_win(current_win)
- vim.cmd(mode)
+local call_and_restore = function(fn, opts)
+ local current_win = a.nvim_get_current_win()
+ local mode = a.nvim_get_mode().mode == "i" and "startinsert" or "stopinsert"
+
+ fn(unpack(opts))
+ a.nvim_set_current_win(current_win)
+
+ vim.cmd(mode)
end
nvterm.send = function(cmd, type)
- if not cmd then return end
- call_and_restore(ensure_and_send, {cmd, type})
+ if not cmd then
+ return
+ end
+
+ call_and_restore(ensure_and_send, { cmd, type })
end
-nvterm.hide_term = function (term)
- term.open = false
- a.nvim_win_close(term.win, false)
+nvterm.hide_term = function(term)
+ term.open = false
+ a.nvim_win_close(term.win, false)
end
-nvterm.show_term = function (term)
- term.open = true
- term.win = create_term_window(term.type)
- a.nvim_win_set_buf(term.win, term.buf)
- vim.cmd('startinsert')
+nvterm.show_term = function(term)
+ term.open = true
+ term.win = create_term_window(term.type)
+ a.nvim_win_set_buf(term.win, term.buf)
+
+ vim.cmd "startinsert"
end
-nvterm.hide = function (type)
- local term = type and get_type_last(type) or get_last()
- nvterm.hide_term(term)
+nvterm.hide = function(type)
+ local term = type and get_type_last(type) or get_last()
+ nvterm.hide_term(term)
end
nvterm.show = function(type)
- local term = type and get_type_last(type) or terminals.last
- nvterm.show_term(term)
+ local term = type and get_type_last(type) or terminals.last
+ nvterm.show_term(term)
end
-nvterm.new = function (type)
- local term = create_term(type)
- return term
+nvterm.new = function(type)
+ local term = create_term(type)
+ return term
end
-nvterm.toggle = function (type)
- terminals = util.verify_terminals(terminals)
- local term = get_type_last(type)
- if not term then term = nvterm.new(type)
- elseif term.open then nvterm.hide_term(term)
- else nvterm.show_term(term) end
+nvterm.toggle = function(type)
+ terminals = util.verify_terminals(terminals)
+ local term = get_type_last(type)
+
+ if not term then
+ term = nvterm.new(type)
+ elseif term.open then
+ nvterm.hide_term(term)
+ else
+ nvterm.show_term(term)
+ end
end
nvterm.init = function(term_config)
- terminals = term_config
+ terminals = term_config
end
return nvterm