local pickers = require('telescope.pickers') local finders = require('telescope.finders') local actions = require('telescope.actions') local action_state = require('telescope.actions.state') local sorters = require('telescope.sorters') local themes = require('telescope.themes') local utils = require('runner.handlers.utils') local M = {} M.shell_handler = function(command, editable) if editable == nil then editable = false end return function(_) if editable then command = vim.fn.input('Command: ', command) end local output_buffer = utils.create_buffer() local output_window = utils.create_window() vim.api.nvim_win_set_buf(output_window, output_buffer) vim.fn.termopen(command, { cwd = vim.fn.getcwd(), }) end end M.command_handler = function(command) return function() vim.cmd(command) end end -- handlers = { 'Run Tests' = test_handler, 'Run Code' = code_handler } M.choice = function(handlers) local handlers_count = vim.tbl_count(handlers) if handlers_count == 0 then print('No handler available right now') return function() end elseif handlers_count == 1 then return vim.tbl_values(handlers)[1] end return function(buffer) local picker = pickers.new( {}, themes.get_dropdown { prompt_title = 'Runner', finder = finders.new_table { results = vim.tbl_keys(handlers), }, sorter = sorters.get_generic_fuzzy_sorter(), attach_mappings = function(prompt_bufnr) actions.select_default:replace(function() actions.close(prompt_bufnr) local handler_name = action_state.get_selected_entry()[1] handlers[handler_name](buffer) end) return true end, } ) picker:find() end end return M