From 85a4b244d0c8fbf4fa660ef88725e0a0ce5f854e Mon Sep 17 00:00:00 2001 From: RhiobeT Date: Fri, 26 Aug 2022 17:46:55 +0200 Subject: [PATCH] [NeoVim] Display PNGs directly in floating windows --- .config/nvim/fnl/plugins.fnl | 6 +++-- .config/nvim/fnl/settings/neo-tree.fnl | 32 ++++++++++++++++++++++---- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/.config/nvim/fnl/plugins.fnl b/.config/nvim/fnl/plugins.fnl index cfac35e..50dd237 100644 --- a/.config/nvim/fnl/plugins.fnl +++ b/.config/nvim/fnl/plugins.fnl @@ -32,8 +32,10 @@ :nvim-telescope/telescope.nvim :kyazdani42/nvim-web-devicons :MunifTanjim/nui.nvim - :s1n7ax/nvim-window-picker] - :after [:nvim-window-picker] + :s1n7ax/nvim-window-picker + :edluffy/hologram.nvim] + :after [:nvim-window-picker + :hologram.nvim] :module :settings.neo-tree) (use! :mrjones2014/smart-splits.nvim diff --git a/.config/nvim/fnl/settings/neo-tree.fnl b/.config/nvim/fnl/settings/neo-tree.fnl index 127454b..0d1009c 100644 --- a/.config/nvim/fnl/settings/neo-tree.fnl +++ b/.config/nvim/fnl/settings/neo-tree.fnl @@ -21,10 +21,34 @@ : (fn [])}} :commands {:custom_open (fn [state] (let [node (state.tree:get_node) - quoted_path (.. "'" (.. (node:get_id) "'"))] - (exec [[:silent "!file -bL --mime" quoted_path "| grep -qv '^text\\|^inode' && xdg-open" quoted_path "&"]]) - (if (= vim.v.shell_error 1) - ((. (require :neo-tree.sources.filesystem.commands) :open) state))))}} + path (node:get_id) + quoted_path (.. "'" (.. path "'"))] + (match (path:match "^.+%.(.+)$") + "png" (let [bufnr (vim.api.nvim_create_buf false true) + image (: (require :hologram.image) :new path {}) + max_width (- vim.o.columns 4) + max_height (- vim.o.lines 2) + tmp_width (math.min image.cols max_width) + tmp_height (* image.rows (/ tmp_width image.cols)) + height (math.min tmp_height max_height) + width (* image.cols (/ height image.rows)) + winnr (vim.api.nvim_open_win bufnr true {:relative "editor" + :width (math.ceil width) + :height (+ (math.ceil height) 1) + :row 0 + :col 2})] + (exec [[:setlocal "nonumber"]]) + (vim.api.nvim_buf_attach bufnr false {:on_detach (fn [_ bufnr] + (image:delete bufnr {:free true}))}) + (image:display 1 0 bufnr {})) + _ (do + (exec [[:silent + "!file -bL --mime" quoted_path + "| grep -qv '^text\\|^inode' " + "&& xdg-open" quoted_path + "&"]]) + (if (= vim.v.shell_error 1) + ((. (require :neo-tree.sources.filesystem.commands) :open) state))))))}} :renderers {:directory [[:indent] [:icon] [:current_filter]