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 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
|
||||||
|
@ -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,
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user