mirror of
https://github.com/ThePrimeagen/harpoon.git
synced 2025-07-14 10:00:29 +00:00
fix: leaving the window now destroys both border and content win
This commit is contained in:
parent
0904ae057f
commit
7d5d1415c2
4
lua/harpoon/autocmd.lua
Normal file
4
lua/harpoon/autocmd.lua
Normal file
@ -0,0 +1,4 @@
|
||||
local augroup = vim.api.nvim_create_augroup
|
||||
return augroup("Harpoon", {})
|
||||
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user