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 HarpoonGroup = require("harpoon.autocmd")
local M = {}
local HARPOON_MENU = "__harpoon-menu__"
@ -18,8 +20,6 @@ end
---strings back into the ui. it feels gross and it puts odd coupling
---@param bufnr number
function M.setup_autocmds_and_keymaps(bufnr)
--[[
-- TODO: Do the highlighting better
local curr_file = vim.api.nvim_buf_get_name(0)
local cmd =
string.format(
@ -31,9 +31,7 @@ function M.setup_autocmds_and_keymaps(bufnr)
.. "call matchadd('HarpoonCurrentFile', '\\V'.path.'\\$')",
curr_file:gsub("\\", "\\\\")
)
print(cmd)
vim.cmd(cmd)
--]]
if vim.api.nvim_buf_get_name(bufnr) == "" then
vim.api.nvim_buf_set_name(bufnr, get_harpoon_menu_name())
@ -71,6 +69,7 @@ function M.setup_autocmds_and_keymaps(bufnr)
bufnr
)
)
-- TODO: Do we want this? is this a thing?
-- 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
)
)
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
---@param bufnr number

View File

@ -3,6 +3,7 @@ local Data = require("harpoon.data")
local Config = require("harpoon.config")
local List = require("harpoon.list")
local Listeners = require("harpoon.listeners")
local HarpoonGroup = require("harpoon.autocmd")
-- setup
-- 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?
if self.hooks_setup == false then
local augroup = vim.api.nvim_create_augroup
local HarpoonGroup = augroup("Harpoon", {})
vim.api.nvim_create_autocmd({ "BufLeave", "VimLeavePre" }, {
group = HarpoonGroup,

View File

@ -70,4 +70,23 @@ describe("harpoon", function()
eq(created_files, list:display())
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)

View File

@ -4,6 +4,7 @@ local DEFAULT_WINDOW_WIDTH = 69 -- nice
---@class HarpoonUI
---@field win_id number
---@field border_win_id number
---@field bufnr number
---@field settings HarpoonSettings
---@field active_list HarpoonList
@ -16,6 +17,7 @@ HarpoonUI.__index = HarpoonUI
function HarpoonUI:new(settings)
return setmetatable({
win_id = nil,
border_win_id = nil,
bufnr = nil,
active_list = nil,
settings = settings,
@ -37,8 +39,13 @@ function HarpoonUI:close_menu()
vim.api.nvim_win_close(self.win_id, true)
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.win_id = nil
self.border_win_id = nil
self.bufnr = nil
self.closing = false
@ -73,7 +80,8 @@ function HarpoonUI:_create_window()
Buffer.setup_autocmds_and_keymaps(bufnr)
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")
return win_id, bufnr