diff options
Diffstat (limited to 'lua/cmake/telescope')
| -rw-r--r-- | lua/cmake/telescope/make_entry.lua | 57 | ||||
| -rw-r--r-- | lua/cmake/telescope/pickers.lua | 102 | ||||
| -rw-r--r-- | lua/cmake/telescope/previewers.lua | 40 | 
3 files changed, 199 insertions, 0 deletions
diff --git a/lua/cmake/telescope/make_entry.lua b/lua/cmake/telescope/make_entry.lua new file mode 100644 index 0000000..d0b04bf --- /dev/null +++ b/lua/cmake/telescope/make_entry.lua @@ -0,0 +1,57 @@ +local make_entry = require("telescope.make_entry") +local entry_display = require("telescope.pickers.entry_display") +local config = require("cmake.config") + +local M = {} + +M.gen_from_configure = function(opts) +  local project = require("cmake").project +  local displayer = entry_display.create({ +    separator = " ", +    items = { +      { width = project.display.short_len + 5 }, +      { remaining = true }, +    }, +  }) +  local make_display = function(entry) +    vim.print(entry) +    return displayer({ +      { entry.value.display.short, "TelescopeResultsIdentifier" }, +      { entry.value.display.long,  "TelescopeResultsComment" }, +    }) +  end +  return function(entry) +    return make_entry.set_default_entry_mt({ +      value = entry, +      ordinal = table.concat(entry.short, config.variants_display.short_sep), +      display = make_display, +    }, opts) +  end +end + +M.gen_from_build = function(opts) +  local project = require("cmake").project +  local displayer = entry_display.create({ +    separator = " ", +    items = { +      { width = project.display.short_len + 5 }, +      { remaining = true }, +    }, +  }) +  local make_display = function(entry) +    vim.print(entry) +    return displayer({ +      { entry.value.display.short, "TelescopeResultsIdentifier" }, +      { entry.value.display.long,  "TelescopeResultsComment" }, +    }) +  end +  return function(entry) +    return make_entry.set_default_entry_mt({ +      value = entry, +      ordinal = table.concat(entry.short, config.variants_display.short_sep), +      display = make_display, +    }, opts) +  end +end + +return M diff --git a/lua/cmake/telescope/pickers.lua b/lua/cmake/telescope/pickers.lua new file mode 100644 index 0000000..c543df8 --- /dev/null +++ b/lua/cmake/telescope/pickers.lua @@ -0,0 +1,102 @@ +local pickers = require("telescope.pickers") +local finders = require("telescope.finders") +local conf = require("telescope.config").values +local actions = require("telescope.actions") +local action_state = require("telescope.actions.state") +local cmake_make_entry = require("cmake.telescope.make_entry") +local previewers = require("cmake.telescope.previewers") + +local M = {} + +M.build_dirs = function(opts) +	local cmake = require("cmake") +	pickers +		.new(opts, { +			prompt_title = "CMake Builds", +			finder = finders.new_table({ +				results = cmake.project.fileapis, +				-- entry_maker = cmake_make_entry.gen_from_fileapi(opts), +				entry_maker = function(entry) +					return { +						value = entry, +						display = entry.path, +						ordinal = entry.path, +					} +				end, +				sorter = conf.generic_sorter(opts), +				-- attach_mappings = function(prompt_bufnr, map) +				-- 	actions.select_default:replace(function() end) +				-- 	return true +				-- end, +			}), +		}) +		:find() +end + +M.configure = function(opts) +	local cmake = require("cmake") +	local runner = require("cmake.runner") +	opts.layout_strategy = "vertical" +	opts.layout_config = { +		prompt_position = "top", +		preview_cutoff = 0, +		preview_height = 5, +		mirror = true, +	} +	pickers +		.new(opts, { +			default_selection_index = cmake.project:current_configure_index(), +			prompt_title = "CMake Configure Options", +			finder = finders.new_table({ +				results = cmake.project:list_configs(), +				entry_maker = cmake_make_entry.gen_from_configure(opts), +			}), +			sorter = conf.generic_sorter(opts), +			previewer = previewers.configure_previewer(), +			attach_mappings = function(prompt_bufnr, map) +				actions.select_default:replace(function() +					actions.close(prompt_bufnr) +					local selection = action_state.get_selected_entry() +					cmake.project.current_config = selection.value +					runner.start(selection.value.generate_command) +				end) +				return true +			end, +		}) +		:find() +end + +M.build = function(opts) +	local cmake = require("cmake") +	local runner = require("cmake.runner") +	opts.layout_strategy = "vertical" +	opts.layout_config = { +		prompt_position = "top", +		preview_cutoff = 0, +		preview_height = 5, +		mirror = true, +	} +	pickers +		.new(opts, { +			default_selection_index = cmake.project:current_build_index(), +			prompt_title = "CMake Build Options", +			finder = finders.new_table({ +				results = cmake.project:list_builds(), +				entry_maker = cmake_make_entry.gen_from_configure(opts), +			}), +			sorter = conf.generic_sorter(opts), +			previewer = previewers.build_previewer(), +			attach_mappings = function(prompt_bufnr, map) +				actions.select_default:replace(function() +					actions.close(prompt_bufnr) +					local selection = action_state.get_selected_entry() +					cmake.project.current_config = selection.value +					runner.start(selection.value.build_command) +				end) +				return true +			end, +		}) +		:find() +end + +return M diff --git a/lua/cmake/telescope/previewers.lua b/lua/cmake/telescope/previewers.lua new file mode 100644 index 0000000..fee3d96 --- /dev/null +++ b/lua/cmake/telescope/previewers.lua @@ -0,0 +1,40 @@ +local previewers = require("telescope.previewers") +local config = require("cmake.config") + +local M = {} + +M.configure_previewer = function(opts) +  return previewers.new_buffer_previewer({ +    title = "Configure Details", + +    define_preview = function(self, entry) +      if self.state.bufname then +        return +      end +      local entries = { +        "Command:", +        config.cmake_path .. " " .. table.concat(entry.value.configure_args, " "), +      } +      vim.api.nvim_buf_set_lines(self.state.bufnr, 0, -1, false, entries) +    end, +  }) +end + +M.build_previewer = function(opts) +  return previewers.new_buffer_previewer({ +    title = "Build Details", + +    define_preview = function(self, entry) +      if self.state.bufname then +        return +      end +      local entries = { +        "Command:", +        config.cmake_path .. " " .. table.concat(entry.value.build_args, " "), +      } +      vim.api.nvim_buf_set_lines(self.state.bufnr, 0, -1, false, entries) +    end, +  }) +end + +return M  | 
