aboutsummaryrefslogtreecommitdiff
path: root/lua/chadterm/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/chadterm/init.lua')
-rw-r--r--lua/chadterm/init.lua68
1 files changed, 68 insertions, 0 deletions
diff --git a/lua/chadterm/init.lua b/lua/chadterm/init.lua
new file mode 100644
index 0000000..2c14e9c
--- /dev/null
+++ b/lua/chadterm/init.lua
@@ -0,0 +1,68 @@
+local M = {}
+
+local terminal = require("chadterm.terminal")
+
+local defaults = {
+ terminals = {
+ list = {},
+ type_opts = {
+ float = {
+ relative = 'editor',
+ row = 0.3,
+ col = 0.25,
+ width = 0.5,
+ height = 0.4,
+ border = "single",
+ },
+ horizontal = { location = "rightbelow", split_ratio = .3, },
+ vertical = { location = "rightbelow", split_ratio = .5 },
+ }
+ },
+ behavior = {
+ close_on_exit = true,
+ auto_insert = true,
+ },
+ mappings = {
+ toggle = {
+ { '<A-i>', function () terminal.new_or_toggle('float') end },
+ { '<A-s>', function () terminal.new_or_toggle('horizontal') end },
+ { '<A-v>', function () terminal.new_or_toggle('vertical') end },
+ }
+ }
+}
+
+local set_behavior = function(behavior)
+ if behavior.close_on_exit then
+ vim.api.nvim_create_autocmd({"TermClose"},{
+ callback = function()
+ vim.schedule_wrap(vim.api.nvim_input('<CR>'))
+ end
+ })
+ end
+ if behavior.auto_insert then
+ vim.api.nvim_create_autocmd({"BufEnter"}, {
+ callback = function() vim.cmd('startinsert') end,
+ pattern = 'term://*'
+ })
+ vim.api.nvim_create_autocmd({"BufLeave"}, {
+ callback = function() vim.cmd('stopinsert') end,
+ pattern = 'term://*'
+ })
+ end
+end
+
+local create_mappings = function (mappings)
+ local opts = { noremap = true, silent = true }
+ for _, mapping in ipairs(mappings.toggle) do
+ vim.keymap.set({'n', 't'}, mapping[1], mapping[2], opts)
+ end
+end
+
+M.setup = function (config)
+ config = config and vim.tbl_deep_extend("force", config, defaults) or defaults
+ set_behavior(config.behavior)
+ create_mappings(config.mappings)
+ require('chadterm.terminal').init(config.terminals)
+end
+
+return M