Skip to content

Commit 0e07d6d

Browse files
committed
add telescope media
1 parent c8e6bca commit 0e07d6d

2 files changed

Lines changed: 78 additions & 2 deletions

File tree

fnl/mods/tools/telescope.fnl

Lines changed: 77 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
;;
1515
;;(log.trace "Loading telescope")
1616

17+
(local media-filetypes ["png" "webp" "jpg" "jpeg" "gif" "mp4" "webm" "pdf" "epub"])
18+
(local media-find-cmd :rg)
19+
1720
(telescope.setup {:defaults {:vimgrep_arguments [:rg
1821
:--color=never
1922
:--no-heading
@@ -68,10 +71,13 @@
6871
:extensions {:fzf {:fuzzy true
6972
:override_generic_sorter true
7073
:override_file_sorter true
71-
:case_mode :smart_case}}})
74+
:case_mode :smart_case}
75+
:media_files {:filetypes media-filetypes
76+
:find_cmd media-find-cmd}}})
7277

7378
(telescope.load_extension :fzf)
7479
(telescope.load_extension :make)
80+
(telescope.load_extension :media_files)
7581

7682
(local fuzzy_search_opts {:shorten_path true
7783
:only_sort_text true
@@ -133,12 +139,17 @@
133139
(local themed_bufnr_lsp_defs
134140
(with-bufnr builtin.lsp_definitions lsp_opts_theme))
135141

142+
(fn media-files []
143+
(let [media-ext (. (. telescope :extensions) :media_files)]
144+
((. media-ext :media_files) ivy_config)))
145+
136146
(map [:n] :fr (bindf builtin.resume {:initial_mode :normal})
137147
{:desc "Resume last search"})
138148
(map [:n] :ff themed_count_find_files {:desc "Find files"})
139149
(map [:n] :fa (bindf themed_count_find_files {:hidden true})
140150
{:desc "Find all files [hidden]"})
141151
(map [:n] :fg themed_count_live_grep {:desc "Grep string"})
152+
(map [:n] :fm media-files {:desc "Find media files"})
142153

143154
(map [:n] :<C-h> (bindf themed_count_find_files {:hidden true})
144155
{:desc "Find all files [hidden]"})
@@ -175,8 +186,11 @@
175186
(var pickers (require :telescope.pickers))
176187
(var finders (require :telescope.finders))
177188
(var make_entry (require :telescope.make_entry))
189+
(var previewers (require :telescope.previewers))
178190
(var conf (. (require :telescope.config) :values))
179191
(var state (require :telescope.actions.state))
192+
(local media-preview-script
193+
(.. (vim.fn.stdpath :data) "/lazy/telescope-media-files.nvim/scripts/vimg"))
180194

181195
(fn should_cd [old new]
182196
"Check if we should change directory"
@@ -208,6 +222,67 @@
208222
(fn all_dirs_from_entry [curr_dir]
209223
(dirs_from_entry curr_dir extract_dirs))
210224

225+
(fn media-file? [entry]
226+
(let [path (or (. entry :path) (. entry :filename) (. entry :value) "")
227+
ext (string.lower (vim.fn.fnamemodify path ":e"))]
228+
(vim.tbl_contains media-filetypes ext)))
229+
230+
(fn media-previewer-command [cwd entry status]
231+
(let [path (or (. entry :path) (. entry :filename) (. entry :value))]
232+
(when path
233+
(let [preview-winid (. (. status.layout :preview) :winid)
234+
(row col) (unpack (vim.api.nvim_win_get_position preview-winid))
235+
width (vim.api.nvim_win_get_width preview-winid)
236+
height (vim.api.nvim_win_get_height preview-winid)
237+
full-path (if (= "/" (string.sub path 1 1))
238+
path
239+
(.. cwd "/" path))]
240+
[media-preview-script
241+
full-path
242+
col
243+
(+ row 1)
244+
width
245+
height
246+
250]))))
247+
248+
(fn magic-previewer [opts]
249+
(let [file-previewer (conf.file_previewer opts)
250+
media-previewer (previewers.new_termopen_previewer
251+
{:get_command (fn [entry status]
252+
(media-previewer-command (. opts :cwd)
253+
entry
254+
status))})]
255+
(previewers.new
256+
{:setup (fn []
257+
{:active :file})
258+
:teardown (fn [self]
259+
((. file-previewer :teardown) file-previewer)
260+
((. media-previewer :teardown) media-previewer))
261+
:send_input (fn [self input]
262+
(if (= :media (. self.state :active))
263+
((. media-previewer :send_input) media-previewer input)
264+
((. file-previewer :send_input) file-previewer input)))
265+
:scroll_fn (fn [self direction]
266+
(if (= :media (. self.state :active))
267+
((. media-previewer :scroll_fn) media-previewer direction)
268+
((. file-previewer :scroll_fn) file-previewer direction)))
269+
:scroll_horizontal_fn (fn [self direction]
270+
(if (= :media (. self.state :active))
271+
((. media-previewer :scroll_horizontal_fn)
272+
media-previewer
273+
direction)
274+
((. file-previewer :scroll_horizontal_fn)
275+
file-previewer
276+
direction)))
277+
:preview_fn (fn [self entry status]
278+
(if (media-file? entry)
279+
(do
280+
(tset self.state :active :media)
281+
((. media-previewer :preview) media-previewer entry status))
282+
(do
283+
(tset self.state :active :file)
284+
((. file-previewer :preview) file-previewer entry status))))})))
285+
211286
(fn new_magic_finder_job [opts]
212287
"Create a new finder job for the magic picker"
213288
(var fcmd [:fd :--type :f :--color :never :--follow :--max-results :5000])
@@ -234,7 +309,7 @@
234309
(var p
235310
(pickers.new opts
236311
{:finder (new_magic_finder_job opts)
237-
:previewer (conf.grep_previewer opts)
312+
:previewer (magic-previewer opts)
238313
:sorter (conf.file_sorter opts)
239314
:cache_picker false
240315
:attach_mappings (fn [_ map]

fnl/plugins.fnl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
:folke/todo-comments.nvim {:requires [[:nvim-lua/plenary.nvim]]
9292
:mod :tools.todo-comments}
9393
:nvim-telescope/telescope-fzf-native.nvim {:run :make}
94+
:nvim-telescope/telescope-media-files.nvim {}
9495
:nvim-telescope/telescope.nvim
9596
{:requires [[:nvim-lua/popup.nvim] [:nvim-lua/plenary.nvim]]
9697
:mod :tools.telescope} :kevinhwang91/nvim-hlslens {:mod :ui.hlslens}

0 commit comments

Comments
 (0)