aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzbirenbaum <zacharyobirenbaum@gmail.com>2022-06-22 16:07:19 -0400
committerzbirenbaum <zacharyobirenbaum@gmail.com>2022-06-22 16:07:19 -0400
commitd86fef06a5dbccc71b7b357ca30b497b70d7eb0c (patch)
treeb4e22bda8e67aeb9468a03afbb9efa9f2cd422cf
parentfix send term type parameter (diff)
fix #13
-rw-r--r--README.md4
-rw-r--r--lua/nvterm/init.lua28
-rw-r--r--lua/nvterm/terminal.lua21
3 files changed, 53 insertions, 0 deletions
diff --git a/README.md b/README.md
index 69f6672..f8bf827 100644
--- a/README.md
+++ b/README.md
@@ -36,6 +36,10 @@ require("nvterm").setup({
}
},
behavior = {
+ autoclose_on_quit = {
+ enabled = false,
+ confirm = true,
+ },
close_on_exit = true,
auto_insert = true,
},
diff --git a/lua/nvterm/init.lua b/lua/nvterm/init.lua
index 3794f35..0e53550 100644
--- a/lua/nvterm/init.lua
+++ b/lua/nvterm/init.lua
@@ -17,12 +17,40 @@ local defaults = {
},
},
behavior = {
+ autoclose_on_quit = {
+ enabled = false,
+ confirm = true,
+ },
close_on_exit = true,
auto_insert = true,
},
}
local set_behavior = function(behavior)
+ if behavior.autoclose_on_quit.enabled then
+ local function force_exit ()
+ require("nvterm.terminal").close_all_terms()
+ vim.api.nvim_command("qa")
+ end
+ vim.api.nvim_create_autocmd({ "WinClosed" }, {
+ callback = vim.schedule_wrap(function()
+ local open_terms = require("nvterm.terminal").list_active_terms("win")
+
+ local non_terms = vim.tbl_filter(function(win)
+ return not vim.tbl_contains(open_terms, win)
+ end, vim.api.nvim_list_wins())
+
+ if not vim.tbl_isempty(non_terms) then return end
+
+ if not behavior.autoclose_on_quit.confirm then return force_exit() end
+
+ vim.ui.input({ prompt = "Close all terms and quit? (Y/N): " }, function (input)
+ if not input or not string.lower(input) == "y" then return end
+ force_exit()
+ end)
+ end),
+ })
+ end
if behavior.close_on_exit then
vim.api.nvim_create_autocmd({ "TermClose" }, {
callback = function()
diff --git a/lua/nvterm/terminal.lua b/lua/nvterm/terminal.lua
index 45f1569..970bd12 100644
--- a/lua/nvterm/terminal.lua
+++ b/lua/nvterm/terminal.lua
@@ -18,6 +18,7 @@ local function get_type(type, list)
end
local function get_still_open()
+ if not terminals.list then return {} end
return #terminals.list > 0 and vim.tbl_filter(function(t)
return t.open == true
end, terminals.list) or {}
@@ -131,6 +132,26 @@ nvterm.toggle = function(type)
end
end
+nvterm.close_all_terms = function ()
+ for _, buf in ipairs(nvterm.list_active_terms("buf")) do
+ vim.cmd("bd! " .. tostring(buf))
+ end
+end
+
+nvterm.list_active_terms = function (property)
+ local terms = get_still_open()
+ if property then
+ return vim.tbl_map(function(t)
+ return t[property]
+ end, terms)
+ end
+ return terms
+end
+
+nvterm.list_terms = function ()
+ return terminals.list
+end
+
nvterm.init = function(term_config)
terminals = term_config
end