aboutsummaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/plugins/telescope.lua97
1 files changed, 61 insertions, 36 deletions
diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua
index fb1b3ee..481cb7d 100644
--- a/lua/plugins/telescope.lua
+++ b/lua/plugins/telescope.lua
@@ -421,52 +421,77 @@ function M.find_books()
local search_results = vim.fn.systemlist(search_cmd)
local results = {}
- local recent_books_section = {} -- To store recent books separately
- for _, recent_book in ipairs(recent_books) do
- table.insert(recent_books_section, 'Recent Books: ' .. recent_book)
+ -- Section for Recent Books
+ table.insert(results, ' Recent Books')
+ for _, recent_book_path in ipairs(recent_books) do
+ local formatted_path = vim.fn.fnameescape(recent_book_path)
+ table.insert(results, formatted_path)
end
+ -- Section for All Books
+ table.insert(results, ' All Books')
+ local directories = {}
+ local files = {}
+
for _, search_result in ipairs(search_results) do
- table.insert(results, search_result)
+ if vim.fn.isdirectory(search_result) == 1 then
+ table.insert(directories, search_result)
+ else
+ table.insert(files, search_result)
+ end
end
- -- Add the recent books section to the results
- for _, recent_entry in ipairs(recent_books_section) do
- table.insert(results, recent_entry)
- end
+ table.sort(directories)
+ table.sort(files)
- pickers
- .new({}, {
- prompt_title = 'Find Books',
- finder = finders.new_table({
- results = results,
- }),
- previewer = require('telescope.previewers').vim_buffer_cat.new({}),
- sorter = config.generic_sorter({}),
- attach_mappings = function(prompt_bufnr, map)
- actions_set.select:replace(function()
- local entry = actions_state.get_selected_entry()
- if entry ~= nil then
- local path = entry.value
+ for _, dir in ipairs(directories) do
+ table.insert(results, dir)
+ end
- actions.close(prompt_bufnr, false)
- -- Determine whether it's a directory or a file
- local is_directory = vim.fn.isdirectory(path)
+ for _, file in ipairs(files) do
+ table.insert(results, file)
+ end
- if is_directory then
- -- It's a directory, navigate to it in the current buffer
- vim.cmd('e ' .. path)
- else
- -- It's a file, open it
- vim.cmd('edit ' .. path)
- end
+ local picker = pickers.new({}, {
+ prompt_title = 'Find Books',
+ finder = finders.new_table({
+ results = results,
+ }),
+ file_ignore_patterns = {
+ '%.git',
+ },
+ previewer = require('telescope.previewers').vim_buffer_cat.new({}),
+ sorter = config.generic_sorter({}),
+ attach_mappings = function(prompt_bufnr, map)
+ actions_set.select:replace(function()
+ local entry = actions_state.get_selected_entry()
+ if entry ~= nil then
+ local path = entry.value
+
+ actions.close(prompt_bufnr, false)
+
+ -- Check if it's under "Recent Books"
+ if path == ' Recent Books' or path == ' All Books' then
+ vim.notify("Cannot select 'All Books'/'Recent Books', please select a book or directory.", vim.log.levels.WARN, { title = 'Find Books' })
+ else
+ -- Determine whether it's a directory or a file
+ local is_directory = vim.fn.isdirectory(path)
+ if is_directory then
+ -- It's a directory, navigate to it in the current buffer
+ vim.cmd('e ' .. path)
+ else
+ -- It's a file, open it
+ vim.cmd('e ' .. path)
end
- end)
- return true
- end,
- })
- :find()
+ end
+ end
+ end)
+ return true
+ end,
+ })
+
+ picker:find()
end
function M.grep_current_dir()