fix: leaving the window now destroys both border and content win

This commit is contained in:
mpaulson 2023-11-30 15:44:07 -07:00
parent 0904ae057f
commit 7d5d1415c2
5 changed files with 44 additions and 10 deletions

4
lua/harpoon/autocmd.lua Normal file
View File

@ -0,0 +1,4 @@
local augroup = vim.api.nvim_create_augroup
return augroup("Harpoon", {})

View File

@ -1,4 +1,6 @@
local utils = require("harpoon.utils") local utils = require("harpoon.utils")
local HarpoonGroup = require("harpoon.autocmd")
local M = {} local M = {}
local HARPOON_MENU = "__harpoon-menu__" local HARPOON_MENU = "__harpoon-menu__"
@ -18,8 +20,6 @@ end
---strings back into the ui. it feels gross and it puts odd coupling ---strings back into the ui. it feels gross and it puts odd coupling
---@param bufnr number ---@param bufnr number
function M.setup_autocmds_and_keymaps(bufnr) function M.setup_autocmds_and_keymaps(bufnr)
--[[
-- TODO: Do the highlighting better
local curr_file = vim.api.nvim_buf_get_name(0) local curr_file = vim.api.nvim_buf_get_name(0)
local cmd = local cmd =
string.format( string.format(
@ -31,9 +31,7 @@ function M.setup_autocmds_and_keymaps(bufnr)
.. "call matchadd('HarpoonCurrentFile', '\\V'.path.'\\$')", .. "call matchadd('HarpoonCurrentFile', '\\V'.path.'\\$')",
curr_file:gsub("\\", "\\\\") curr_file:gsub("\\", "\\\\")
) )
print(cmd)
vim.cmd(cmd) vim.cmd(cmd)
--]]
if vim.api.nvim_buf_get_name(bufnr) == "" then if vim.api.nvim_buf_get_name(bufnr) == "" then
vim.api.nvim_buf_set_name(bufnr, get_harpoon_menu_name()) vim.api.nvim_buf_set_name(bufnr, get_harpoon_menu_name())
@ -71,6 +69,7 @@ function M.setup_autocmds_and_keymaps(bufnr)
bufnr bufnr
) )
) )
-- TODO: Do we want this? is this a thing? -- TODO: Do we want this? is this a thing?
-- its odd... why save on text change? shouldn't we wait until close / w / esc? -- its odd... why save on text change? shouldn't we wait until close / w / esc?
--[[ --[[
@ -89,9 +88,14 @@ function M.setup_autocmds_and_keymaps(bufnr)
bufnr bufnr
) )
) )
vim.cmd(
"autocmd BufLeave <buffer> ++nested ++once silent lua require('harpoon').ui:toggle_quick_menu()" vim.api.nvim_create_autocmd({ "BufLeave" }, {
) group = HarpoonGroup,
pattern = "__harpoon*",
callback = function()
require("harpoon").ui:toggle_quick_menu()
end
})
end end
---@param bufnr number ---@param bufnr number

View File

@ -3,6 +3,7 @@ local Data = require("harpoon.data")
local Config = require("harpoon.config") local Config = require("harpoon.config")
local List = require("harpoon.list") local List = require("harpoon.list")
local Listeners = require("harpoon.listeners") local Listeners = require("harpoon.listeners")
local HarpoonGroup = require("harpoon.autocmd")
-- setup -- setup
-- read from a config file -- read from a config file
@ -48,8 +49,6 @@ function Harpoon:setup(partial_config)
---TODO: should we go through every seen list and update its config? ---TODO: should we go through every seen list and update its config?
if self.hooks_setup == false then if self.hooks_setup == false then
local augroup = vim.api.nvim_create_augroup
local HarpoonGroup = augroup("Harpoon", {})
vim.api.nvim_create_autocmd({ "BufLeave", "VimLeavePre" }, { vim.api.nvim_create_autocmd({ "BufLeave", "VimLeavePre" }, {
group = HarpoonGroup, group = HarpoonGroup,

View File

@ -70,4 +70,23 @@ describe("harpoon", function()
eq(created_files, list:display()) eq(created_files, list:display())
end) end)
it("using :q to leave harpoon should quit everything", function()
harpoon.ui:toggle_quick_menu(harpoon:list())
local bufnr = harpoon.ui.bufnr
local win_id = harpoon.ui.win_id
eq(vim.api.nvim_buf_is_valid(bufnr), true)
eq(vim.api.nvim_win_is_valid(win_id), true)
eq(vim.api.nvim_get_current_buf(), bufnr)
vim.cmd [[ q! ]] -- TODO: I shouldn't need q! here
eq(vim.api.nvim_buf_is_valid(bufnr), false)
eq(vim.api.nvim_win_is_valid(win_id), false)
eq(harpoon.ui.bufnr, nil)
eq(harpoon.ui.win_id, nil)
end)
end) end)

View File

@ -4,6 +4,7 @@ local DEFAULT_WINDOW_WIDTH = 69 -- nice
---@class HarpoonUI ---@class HarpoonUI
---@field win_id number ---@field win_id number
---@field border_win_id number
---@field bufnr number ---@field bufnr number
---@field settings HarpoonSettings ---@field settings HarpoonSettings
---@field active_list HarpoonList ---@field active_list HarpoonList
@ -16,6 +17,7 @@ HarpoonUI.__index = HarpoonUI
function HarpoonUI:new(settings) function HarpoonUI:new(settings)
return setmetatable({ return setmetatable({
win_id = nil, win_id = nil,
border_win_id = nil,
bufnr = nil, bufnr = nil,
active_list = nil, active_list = nil,
settings = settings, settings = settings,
@ -37,8 +39,13 @@ function HarpoonUI:close_menu()
vim.api.nvim_win_close(self.win_id, true) vim.api.nvim_win_close(self.win_id, true)
end end
if self.border_win_id ~= nil and vim.api.nvim_win_is_valid(self.border_win_id) then
vim.api.nvim_win_close(self.border_win_id, true)
end
self.active_list = nil self.active_list = nil
self.win_id = nil self.win_id = nil
self.border_win_id = nil
self.bufnr = nil self.bufnr = nil
self.closing = false self.closing = false
@ -73,7 +80,8 @@ function HarpoonUI:_create_window()
Buffer.setup_autocmds_and_keymaps(bufnr) Buffer.setup_autocmds_and_keymaps(bufnr)
self.win_id = win_id self.win_id = win_id
vim.api.nvim_win_set_option(self.win_id, "number", true) self.border_win_id = popup_info.border.win_id
vim.api.nvim_win_set_option(win_id, "number", true)
vim.api.nvim_win_set_option(win_id, "winhl", "Normal:HarpoonBorder") vim.api.nvim_win_set_option(win_id, "winhl", "Normal:HarpoonBorder")
return win_id, bufnr return win_id, bufnr