From f4eec72eb37397b87cc3a9cf4764ebb9f3674ae7 Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Tue, 25 Feb 2025 07:54:22 +0100 Subject: [PATCH 01/14] feat: enable more config can create a keymap to preview can disable the auto preview on "CursoHold" --- lua/float-preview.lua | 60 ++++++++++++++++++++++++++---------- lua/float-preview/config.lua | 5 +++ 2 files changed, 48 insertions(+), 17 deletions(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index c96f748..210e540 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -67,6 +67,17 @@ local function all_open() end end +local function toggle_or_preview() + local node = api.tree.get_node_under_cursor() + if not node then + return + end + + if node.type ~= "file" then + api.node.open.edit() -- Toggle folder + end +end + function FloatPreview.setup(cfg) CFG.update(cfg) @@ -75,11 +86,16 @@ function FloatPreview.setup(cfg) disabled = not cfg.toggled_on if cfg.wrap_nvimtree_commands then + if cfg.preview_on_bakground then + api.node.open.preview = FloatPreview.close_wrap(api.node.open.preview) + else + api.node.open.preview = toggle_or_preview -- disable the + end + api.node.open.tab = FloatPreview.close_wrap(api.node.open.tab) api.node.open.vertical = FloatPreview.close_wrap(api.node.open.vertical) api.node.open.horizontal = FloatPreview.close_wrap(api.node.open.horizontal) api.node.open.edit = FloatPreview.close_wrap(api.node.open.edit) - api.node.open.preview = FloatPreview.close_wrap(api.node.open.preview) api.node.open.no_window_picker = FloatPreview.close_wrap(api.node.open.no_window_picker) api.fs.create = FloatPreview.close_wrap(api.fs.create) api.fs.remove = FloatPreview.close_wrap(api.fs.remove) @@ -137,9 +153,6 @@ end function FloatPreview:_close(reason) if self.path ~= nil and self.buf ~= nil then - if reason then - -- vim.notify(string.format("fp close %s", reason)) - end pcall(vim.api.nvim_win_close, self.win, { force = true }) pcall(vim.api.nvim_buf_delete, self.buf, { force = true }) self.win = nil @@ -305,21 +318,34 @@ function FloatPreview:attach(bufnr) FloatPreview.toggle() end, { buffer = bufnr }) end + + for _, key in ipairs(self.cfg.mapping.preview) do + vim.keymap.set("n", key, function() + if bufnr == vim.api.nvim_get_current_buf() then + self:preview_under_cursor() + else + self:_close "changed buffer" + end + end, { buffer = bufnr }) + end + local au = {} - table.insert( - au, - vim.api.nvim_create_autocmd({ "CursorHold" }, { - group = preview_au, - callback = function() - if bufnr == vim.api.nvim_get_current_buf() then - self:preview_under_cursor() - else - self:_close "changed buffer" - end - end, - }) - ) + if self.cfg.auto_preview then + table.insert( + au, + vim.api.nvim_create_autocmd({ "CursorHold" }, { + group = preview_au, + callback = function() + if bufnr == vim.api.nvim_get_current_buf() then + self:preview_under_cursor() + else + self:_close "changed buffer" + end + end, + }) + ) + end api.events.subscribe(Event.TreeClose, function(opts) if not self then diff --git a/lua/float-preview/config.lua b/lua/float-preview/config.lua index e8f6097..1e046e8 100644 --- a/lua/float-preview/config.lua +++ b/lua/float-preview/config.lua @@ -2,6 +2,9 @@ local CFG = { _cfg = { -- Whether the float preview is enabled by default. When set to false, it has to be "toggled" on. toggled_on = true, + -- preview in background + preview_on_bakground = false, --can get the default behavior if needed + auto_preview = true, -- wrap nvimtree commands wrap_nvimtree_commands = true, -- lines for scroll @@ -21,6 +24,8 @@ local CFG = { up = { "", "" }, -- enable/disable float windows toggle = { "" }, + -- preview with key + preview = nil, }, -- hooks if return false preview doesn't shown hooks = { From c0482ea7db158dae7d317384f1f34bcac0215c1d Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Tue, 25 Feb 2025 21:41:39 +0100 Subject: [PATCH 02/14] fix: reverse logic about events --- lua/float-preview.lua | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index 210e540..21bc3ba 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -321,31 +321,29 @@ function FloatPreview:attach(bufnr) for _, key in ipairs(self.cfg.mapping.preview) do vim.keymap.set("n", key, function() - if bufnr == vim.api.nvim_get_current_buf() then - self:preview_under_cursor() - else - self:_close "changed buffer" + if self.cfg.mapping.preview then + self.cfg.auto_preview = true end end, { buffer = bufnr }) end local au = {} - if self.cfg.auto_preview then - table.insert( - au, - vim.api.nvim_create_autocmd({ "CursorHold" }, { - group = preview_au, - callback = function() + table.insert( + au, + vim.api.nvim_create_autocmd({ "CursorHold" }, { + group = preview_au, + callback = function() + if self.cfg.auto_preview then if bufnr == vim.api.nvim_get_current_buf() then self:preview_under_cursor() else self:_close "changed buffer" end - end, - }) - ) - end + end + end, + }) + ) api.events.subscribe(Event.TreeClose, function(opts) if not self then From 7900a4d1d9955603170fdd1d3cc084626831ecce Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Tue, 25 Feb 2025 21:55:53 +0100 Subject: [PATCH 03/14] feat: close preview on scroll and preview key just preview --- lua/float-preview.lua | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index 21bc3ba..46de09b 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -278,6 +278,13 @@ function FloatPreview:preview_under_cursor() end function FloatPreview:scroll(line) + local _, node = pcall(get_node) + if not node then + return + end + if node.absolute_path == self.path then + self:_close "change file" + end if self.win then local ok, _ = pcall(vim.api.nvim_win_set_cursor, self.win, { line, 0 }) if ok then @@ -319,14 +326,13 @@ function FloatPreview:attach(bufnr) end, { buffer = bufnr }) end - for _, key in ipairs(self.cfg.mapping.preview) do - vim.keymap.set("n", key, function() - if self.cfg.mapping.preview then - self.cfg.auto_preview = true - end - end, { buffer = bufnr }) + if self.cfg.mapping.preview then + for _, key in ipairs(self.cfg.mapping.preview) do + vim.keymap.set("n", key, function() + self:preview_under_cursor() + end, { buffer = bufnr }) + end end - local au = {} table.insert( From 742c19d20bbf7804ad71935816146aa5426c0e3d Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Tue, 25 Feb 2025 22:08:05 +0100 Subject: [PATCH 04/14] feat/fix: uses nvim event to close preview, can toggle preview with key --- lua/float-preview.lua | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index 46de09b..792a668 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -258,11 +258,7 @@ function FloatPreview:preview_under_cursor() if not node then return end - - if node.absolute_path == self.path then - return - end - self:_close "change file" + self.close_preview(self) if node.type ~= "file" then return @@ -278,13 +274,6 @@ function FloatPreview:preview_under_cursor() end function FloatPreview:scroll(line) - local _, node = pcall(get_node) - if not node then - return - end - if node.absolute_path == self.path then - self:_close "change file" - end if self.win then local ok, _ = pcall(vim.api.nvim_win_set_cursor, self.win, { line, 0 }) if ok then @@ -307,6 +296,18 @@ function FloatPreview:scroll_up() end end +function FloatPreview:close_preview() + local _, node = pcall(get_node) + if not node then + return + end + + if node.absolute_path == self.path then + return + end + self:_close "cursor moved" +end + function FloatPreview:attach(bufnr) for _, key in ipairs(self.cfg.mapping.up) do vim.keymap.set("n", key, function() @@ -351,6 +352,21 @@ function FloatPreview:attach(bufnr) }) ) + table.insert( + au, + vim.api.nvim_create_autocmd("CursorMoved", { + group = preview_au, + callback = function() + local _, node = pcall(get_node) + if self.path == node.path then + self.close_preview(self) + return + end + self.close_preview(self) + end, + }) + ) + api.events.subscribe(Event.TreeClose, function(opts) if not self then return From 109f5700c2ec8581ed3dcae5b9e489dc1e4f5bf3 Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Tue, 25 Feb 2025 22:24:20 +0100 Subject: [PATCH 05/14] fix: double tap the preview key make an infinite preview --- lua/float-preview.lua | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index 792a668..f29706a 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -330,6 +330,12 @@ function FloatPreview:attach(bufnr) if self.cfg.mapping.preview then for _, key in ipairs(self.cfg.mapping.preview) do vim.keymap.set("n", key, function() + local _, node = pcall(get_node) + if self.path == node.path then + self.close_preview(self) + return + end + self:preview_under_cursor() end, { buffer = bufnr }) end @@ -354,7 +360,7 @@ function FloatPreview:attach(bufnr) table.insert( au, - vim.api.nvim_create_autocmd("CursorMoved", { + vim.api.nvim_create_autocmd({ "CursorMoved" }, { group = preview_au, callback = function() local _, node = pcall(get_node) From aac28a7c023cb5c3a9c4fbfbed3970d582a8635d Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Tue, 25 Feb 2025 22:31:37 +0100 Subject: [PATCH 06/14] fix: self.path is nil on startup ... --- lua/float-preview.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index f29706a..fcbcd1b 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -331,7 +331,7 @@ function FloatPreview:attach(bufnr) for _, key in ipairs(self.cfg.mapping.preview) do vim.keymap.set("n", key, function() local _, node = pcall(get_node) - if self.path == node.path then + if self.path ~= nil and self.path == node.path then self.close_preview(self) return end From 10c60621823fe4880fc3fd37a71dda5b3f5d16b9 Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Tue, 25 Feb 2025 22:35:16 +0100 Subject: [PATCH 07/14] fix: does the close_preview function really works ? --- lua/float-preview.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index fcbcd1b..9f26b64 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -332,7 +332,8 @@ function FloatPreview:attach(bufnr) vim.keymap.set("n", key, function() local _, node = pcall(get_node) if self.path ~= nil and self.path == node.path then - self.close_preview(self) + -- self.close_preview(self) + self:_close "toggle preview" return end From 83059507cf1979c525cf1f69787fcc7d84ae5fa8 Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Tue, 25 Feb 2025 22:38:01 +0100 Subject: [PATCH 08/14] fix: double check path --- lua/float-preview.lua | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index 9f26b64..35f1ca5 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -302,9 +302,6 @@ function FloatPreview:close_preview() return end - if node.absolute_path == self.path then - return - end self:_close "cursor moved" end @@ -332,8 +329,7 @@ function FloatPreview:attach(bufnr) vim.keymap.set("n", key, function() local _, node = pcall(get_node) if self.path ~= nil and self.path == node.path then - -- self.close_preview(self) - self:_close "toggle preview" + self.close_preview(self) return end From 6975a1c3de75a16fdeb5f0959e3a2e69ea4de11a Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Tue, 25 Feb 2025 22:42:49 +0100 Subject: [PATCH 09/14] fix: fix toggle logic --- lua/float-preview.lua | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index 35f1ca5..738d254 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -328,7 +328,7 @@ function FloatPreview:attach(bufnr) for _, key in ipairs(self.cfg.mapping.preview) do vim.keymap.set("n", key, function() local _, node = pcall(get_node) - if self.path ~= nil and self.path == node.path then + if self.path ~= nil and self.path == node.absolute_path then self.close_preview(self) return end @@ -347,9 +347,11 @@ function FloatPreview:attach(bufnr) if self.cfg.auto_preview then if bufnr == vim.api.nvim_get_current_buf() then self:preview_under_cursor() - else - self:_close "changed buffer" + return end + + self:_close "changed buffer" + return end end, }) @@ -360,12 +362,7 @@ function FloatPreview:attach(bufnr) vim.api.nvim_create_autocmd({ "CursorMoved" }, { group = preview_au, callback = function() - local _, node = pcall(get_node) - if self.path == node.path then - self.close_preview(self) - return - end - self.close_preview(self) + self:close_preview() end, }) ) From 9eb4c35a394f3b99b98d389b9fc519ea78d364dc Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Tue, 25 Feb 2025 22:55:23 +0100 Subject: [PATCH 10/14] feat: create user command and delete the toggle key --- lua/float-preview.lua | 29 +++++++++++------------------ lua/float-preview/config.lua | 3 --- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index 738d254..9b7d50a 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -86,12 +86,7 @@ function FloatPreview.setup(cfg) disabled = not cfg.toggled_on if cfg.wrap_nvimtree_commands then - if cfg.preview_on_bakground then - api.node.open.preview = FloatPreview.close_wrap(api.node.open.preview) - else - api.node.open.preview = toggle_or_preview -- disable the - end - + api.node.open.preview = toggle_or_preview -- disable the api.node.open.tab = FloatPreview.close_wrap(api.node.open.tab) api.node.open.vertical = FloatPreview.close_wrap(api.node.open.vertical) api.node.open.horizontal = FloatPreview.close_wrap(api.node.open.horizontal) @@ -258,7 +253,6 @@ function FloatPreview:preview_under_cursor() if not node then return end - self.close_preview(self) if node.type ~= "file" then return @@ -324,19 +318,18 @@ function FloatPreview:attach(bufnr) end, { buffer = bufnr }) end - if self.cfg.mapping.preview then - for _, key in ipairs(self.cfg.mapping.preview) do - vim.keymap.set("n", key, function() - local _, node = pcall(get_node) - if self.path ~= nil and self.path == node.absolute_path then - self.close_preview(self) - return - end - - self:preview_under_cursor() - end, { buffer = bufnr }) + local toggle_preview = function() + local _, node = pcall(get_node) + if self.path ~= nil and self.path == node.absolute_path then + self.close_preview(self) + return end + + self:preview_under_cursor() end + + vim.api.nvim_create_user_command("ToggleFilePreview", toggle_preview, { buffer = bufnr }) + local au = {} table.insert( diff --git a/lua/float-preview/config.lua b/lua/float-preview/config.lua index 1e046e8..a56e20c 100644 --- a/lua/float-preview/config.lua +++ b/lua/float-preview/config.lua @@ -3,7 +3,6 @@ local CFG = { -- Whether the float preview is enabled by default. When set to false, it has to be "toggled" on. toggled_on = true, -- preview in background - preview_on_bakground = false, --can get the default behavior if needed auto_preview = true, -- wrap nvimtree commands wrap_nvimtree_commands = true, @@ -24,8 +23,6 @@ local CFG = { up = { "", "" }, -- enable/disable float windows toggle = { "" }, - -- preview with key - preview = nil, }, -- hooks if return false preview doesn't shown hooks = { From d8dd87f8f7b397d79a026177da96d68398d1187a Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Tue, 25 Feb 2025 23:03:26 +0100 Subject: [PATCH 11/14] fix: create user command via auto command --- lua/float-preview.lua | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index 9b7d50a..ee7ec39 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -328,10 +328,15 @@ function FloatPreview:attach(bufnr) self:preview_under_cursor() end - vim.api.nvim_create_user_command("ToggleFilePreview", toggle_preview, { buffer = bufnr }) - local au = {} - + table.insert( + au, + vim.api.nvim_create_autocmd("BufEnter", { + callback = function() + vim.api.nvim_create_user_command("TogglePreviewFile", toggle_preview, { buffer = bufnr }) + end, + }) + ) table.insert( au, vim.api.nvim_create_autocmd({ "CursorHold" }, { From a5d3600103685e139763e7c89be58bb126f2cb25 Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Tue, 25 Feb 2025 23:07:16 +0100 Subject: [PATCH 12/14] test: command --- lua/float-preview.lua | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index ee7ec39..4cdf707 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -327,16 +327,16 @@ function FloatPreview:attach(bufnr) self:preview_under_cursor() end + vim.api.nvim_create_user_command("TogglePreviewFile", toggle_preview, { buffer = bufnr }) local au = {} - table.insert( - au, - vim.api.nvim_create_autocmd("BufEnter", { - callback = function() - vim.api.nvim_create_user_command("TogglePreviewFile", toggle_preview, { buffer = bufnr }) - end, - }) - ) + -- table.insert( + -- au, + -- vim.api.nvim_create_autocmd("BufEnter", { + -- callback = function() + -- end, + -- }) + -- ) table.insert( au, vim.api.nvim_create_autocmd({ "CursorHold" }, { From d9044b9755548e2c64066863b926dad597914749 Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Tue, 25 Feb 2025 23:10:29 +0100 Subject: [PATCH 13/14] test: command --- lua/float-preview.lua | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index 4cdf707..8d0793c 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -327,16 +327,17 @@ function FloatPreview:attach(bufnr) self:preview_under_cursor() end - vim.api.nvim_create_user_command("TogglePreviewFile", toggle_preview, { buffer = bufnr }) + vim.api.nvim_create_user_command("TogglePreviewFile", toggle_preview, {}) local au = {} - -- table.insert( - -- au, - -- vim.api.nvim_create_autocmd("BufEnter", { - -- callback = function() - -- end, - -- }) - -- ) + table.insert( + au, + vim.api.nvim_create_autocmd("BufDelete", { + callback = function() + vim.api.nvim_del_user_command "TogglePreviewFile" + end, + }) + ) table.insert( au, vim.api.nvim_create_autocmd({ "CursorHold" }, { From 09d513e41952d1ad724adc2f1372a54e3e012000 Mon Sep 17 00:00:00 2001 From: jo-pouradier Date: Wed, 7 May 2025 22:44:48 +0200 Subject: [PATCH 14/14] fix: missing autocommand group for deletion --- lua/float-preview.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lua/float-preview.lua b/lua/float-preview.lua index 8d0793c..55df432 100644 --- a/lua/float-preview.lua +++ b/lua/float-preview.lua @@ -333,8 +333,11 @@ function FloatPreview:attach(bufnr) table.insert( au, vim.api.nvim_create_autocmd("BufDelete", { + group = preview_au, callback = function() - vim.api.nvim_del_user_command "TogglePreviewFile" + if vim.fn.exists ":TogglePreviewFile" > 0 then + vim.api.nvim_del_user_command "TogglePreviewFile" + end end, }) )