[NeoVim] Display PNGs directly in floating windows

This commit is contained in:
2022-08-26 17:46:55 +02:00
parent 27a642d04e
commit 85a4b244d0
2 changed files with 32 additions and 6 deletions

View File

@@ -21,10 +21,34 @@
:<S-Left> (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]