diff --git a/lua/custom/utils.lua b/lua/custom/utils.lua index 751b9ce8..e8af9741 100644 --- a/lua/custom/utils.lua +++ b/lua/custom/utils.lua @@ -4,25 +4,38 @@ local finders = require 'telescope.finders' local sorters = require('telescope.config').values local actions = require 'telescope.actions' local action_state = require 'telescope.actions.state' -local Path = require 'plenary.path' local function collect_executables(start_dir) local results = {} - local fd = vim.fn.systemlist { 'fd', '--type', 'x', '--exec', 'file', '{}', start_dir } - for _, line in ipairs(fd) do + local fd_result = vim + .system({ + 'fd', + '--type', + 'x', + '--exec', + 'file', + '{}', + start_dir, + }, { text = true }) + :wait() + + local lines = vim.split(fd_result.stdout, '\n', { trimempty = true }) + + for _, line in ipairs(lines) do local path, typeinfo = line:match '^(.-):%s*(.+)$' - if path and not path:match 'CMakeFiles' and typeinfo and typeinfo:match 'Mach%-O' or typeinfo:match 'ELF' then + if path and not path:match 'CMakeFiles' and typeinfo and (typeinfo:match 'Mach%-O' or typeinfo:match 'ELF') then table.insert(results, path) end end + return results end local function pick_executable(start_dir) - return async.wrap(function(start_dir, on_choice) - local executables = collect_executables(start_dir) + return async.wrap(function(_start_dir, on_choice) + local executables = collect_executables(_start_dir) if #executables == 0 then - vim.notify('No executables found in ' .. start_dir, vim.log.levels.WARN) + vim.notify('No executables found in ' .. _start_dir, vim.log.levels.WARN) on_choice(nil) return end @@ -33,17 +46,17 @@ local function pick_executable(start_dir) finder = finders.new_table { results = executables }, sorter = sorters.generic_sorter {}, attach_mappings = function(_, map) - actions.select_default:replace(function(prompt_bufnr) + actions.select_default:replace(function(bufnr) local entry = action_state.get_selected_entry() - actions.close(prompt_bufnr) + actions.close(bufnr) on_choice(entry.value) end) - map('i', '', function(buf) - actions.close(buf) + map('i', '', function(bufnr) + actions.close(bufnr) on_choice(nil) end) - map('n', 'q', function(buf) - actions.close(buf) + map('n', 'q', function(bufnr) + actions.close(bufnr) on_choice(nil) end) return true