From 71bc3951250a53706ced77f2b33428a48f79573f Mon Sep 17 00:00:00 2001 From: DarthMooMancer <107283522+DarthMooMancer@users.noreply.github.com> Date: Fri, 18 Apr 2025 23:54:43 -0400 Subject: [PATCH] Added Presets for terminal placements --- lua/Polydev/configs.lua | 2 + lua/Polydev/languages/lua.lua | 2 + lua/Polydev/languages/python.lua | 14 +++++++ lua/Polydev/presets.lua | 66 ++++++++++++++++++++++++++++++++ lua/Polydev/templates.lua | 10 +++-- lua/Polydev/test.lua | 29 ++++++++++++++ lua/Polydev/utils.lua | 31 +++++++++++++-- 7 files changed, 147 insertions(+), 7 deletions(-) create mode 100644 lua/Polydev/presets.lua create mode 100644 lua/Polydev/test.lua diff --git a/lua/Polydev/configs.lua b/lua/Polydev/configs.lua index 342e873..0bc4549 100644 --- a/lua/Polydev/configs.lua +++ b/lua/Polydev/configs.lua @@ -10,6 +10,7 @@ local M = {} ---@field build_attributes? string --- ---@class TerminalConfigs +---@field presets string ---@field right_padding integer ---@field left_padding integer ---@field bottom_padding integer @@ -79,6 +80,7 @@ M.defaults = { build_attributes = "", }, terminal = { + presets = "center", right_padding = 0, bottom_padding = 0, left_padding = 0, diff --git a/lua/Polydev/languages/lua.lua b/lua/Polydev/languages/lua.lua index 3e3db89..971beeb 100644 --- a/lua/Polydev/languages/lua.lua +++ b/lua/Polydev/languages/lua.lua @@ -40,6 +40,8 @@ function M.run() local function get_project_name() return vim.fn.glob((M.get_project_root() or "") .. "/*.polydev"):match("([^/]+)%.polydev$") end + + ---@return string if not get_project_root() or not get_project_name() then return print("Error: Project root not found.") end local init_lua_path = get_project_root() .. "/lua/" .. get_project_name() .. "/init.lua" if vim.fn.filereadable(init_lua_path) == 1 then diff --git a/lua/Polydev/languages/python.lua b/lua/Polydev/languages/python.lua index c1b796d..87c28ff 100644 --- a/lua/Polydev/languages/python.lua +++ b/lua/Polydev/languages/python.lua @@ -1,10 +1,19 @@ +---@module "Polydev.utils" local utils = require("Polydev.utils") + +---@module "Polydev.configs" local config = require("Polydev.configs") + +---@tyep table local M = {} +---@tyep table M.keybinds = {} + +---@type nil|table M.opts = nil +---@param opts table function M.setup(opts) M.opts = vim.tbl_deep_extend("force", {}, config.get("python"), opts or {}) for key, command in pairs(M.opts.keybinds) do @@ -31,6 +40,7 @@ function M.setup(opts) end end +---@return string|nil function M.get_project_root() local dir = vim.fn.expand("%:p:h") while dir ~= "/" do @@ -42,6 +52,7 @@ function M.get_project_root() return nil end +---@return string|nil function M.install_dependency() vim.ui.input({ prompt = "Enter pip module: " }, function(pip_module) if not pip_module or pip_module == "" then @@ -55,11 +66,13 @@ end function M.run() local root = M.get_project_root() if not root then + ---@return nil return print("Error: Project root not found.") end local main_file = root .. "/main.py" if vim.fn.filereadable(main_file) == 0 then + ---@return nil return print("Error: main.py not found in project root.") end @@ -78,4 +91,5 @@ function M.run() utils.open_float_terminal(venv_cmd .. "python3 " .. main_file) end +---@return table return M diff --git a/lua/Polydev/presets.lua b/lua/Polydev/presets.lua new file mode 100644 index 0000000..c9064bb --- /dev/null +++ b/lua/Polydev/presets.lua @@ -0,0 +1,66 @@ +---@type table +local M = {} + +---@type table|nil +local opts = {} + +---@class Preset +---@field left_padding integer +---@field right_padding integer +---@field top_padding integer +---@field bottom_padding integer + +---@type Preset +local centered = { + left_padding = 0, + right_padding = 0, + top_padding = 0, + bottom_padding = 0 +} + +---@type Preset +local center_paneled = { + left_padding = 0, + right_padding = 100, + top_padding = 0, + bottom_padding = 0, +} + +---@type Preset +local right_panel = { + left_padding = 100, + right_padding = 0, + top_padding = 0, + bottom_padding = 0, +} + +---@type Preset +local cornered = { + left_padding = 100, + right_padding = 0, + top_padding = 25, + bottom_padding = 0, + +} + +---@param preset string +---@return table|nil +function M.getPresets(preset) + if preset == "custom" then + opts = nil + elseif preset == "centered" then + opts = centered + elseif preset == "center_panel" then + opts = center_paneled + elseif preset == "right_panel" then + opts = right_panel + elseif preset == "cornered" then + opts = cornered + else + print("Preset option: " .. preset .. " does not exist") + end + + return opts +end + +return M diff --git a/lua/Polydev/templates.lua b/lua/Polydev/templates.lua index 68ed1f9..eed4976 100644 --- a/lua/Polydev/templates.lua +++ b/lua/Polydev/templates.lua @@ -1,6 +1,10 @@ +-- +--The main source of the plugin in which runs the creation of projects and files for languages +-- + ---@module 'Polydev.utils' local utils = require("Polydev.utils") ---- + ---@type table local M = {} @@ -84,7 +88,7 @@ return M }, c = { run = function(project_name, project_root) - local full_project_root = vim.fn.expand(M.opts.project_root) .. "/" .. project_name + local full_project_root = vim.fn.expand(project_root) .. "/" .. project_name for _, path in ipairs({ "/src", "/build", "/include" }) do vim.fn.mkdir(full_project_root .. path, "p") end utils.write_file(full_project_root .. "/build/" .. project_name .. ".polydev", project_name) utils.write_file(full_project_root .. "/src/main.c", [[ @@ -269,7 +273,7 @@ M.files = { public class %s { // New File } -]], class_name) +]], file_name) utils.write_file(root_dir .. "/src/" .. file_name .. ".java", java_content) end diff --git a/lua/Polydev/test.lua b/lua/Polydev/test.lua new file mode 100644 index 0000000..ea2cf43 --- /dev/null +++ b/lua/Polydev/test.lua @@ -0,0 +1,29 @@ +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" + +-- our picker function: colors +local colors = function(opts) + opts = opts or {} + pickers.new(opts, { + prompt_title = "colors", + finder = finders.new_table { + results = { "red", "green", "blue" } + }, + sorter = conf.generic_sorter(opts), + attach_mappings = function(prompt_bufnr, map) + actions.select_default:replace(function() + actions.close(prompt_bufnr) + local selection = action_state.get_selected_entry() + -- print(vim.inspect(selection)) + vim.api.nvim_put({ selection[1] }, "", false, true) + end) + return true + end, + }):find() +end + +-- to execute the function +colors(require("telescope.themes").get_dropdown{}) diff --git a/lua/Polydev/utils.lua b/lua/Polydev/utils.lua index 7206a48..e57a3b6 100644 --- a/lua/Polydev/utils.lua +++ b/lua/Polydev/utils.lua @@ -1,11 +1,22 @@ +---@module "Polydev.presets" +local presets = require("Polydev.presets") + +---@type table local M = {} +---@type table M.opts = {} +---@type table|nil +local presets_opts = {} + +---@param opts table function M.setup(opts) M.opts = vim.tbl_deep_extend("force", {}, require("Polydev.configs").get("terminal"), opts or {}) end +---@param path string +---@param content string function M.write_file(path, content) local file = assert(io.open(path, "w"), "Error creating file: " .. path) file:write(content) @@ -14,13 +25,24 @@ function M.write_file(path, content) print(path .. " created successfully!") end +local function set_presets_opts() + if presets.getPresets(M.opts.presets) ~= nil then + presets_opts = presets.getPresets(M.opts.presets) + else + presets_opts = M.opts + end +end + +---@param cmd string +---@return boolean, table function M.open_float_terminal(cmd) + set_presets_opts() local ui = vim.api.nvim_list_uis()[1] - local width = math.max(1, math.floor(ui.width * 0.9) - M.opts.left_padding or 0 - M.opts.right_padding or 0) - local height = math.max(1, math.floor(ui.height * 0.9) - M.opts.top_padding or 0 - M.opts.bottom_padding or 0) - local row = math.max(1, math.floor((ui.height - height) / 2) + (M.opts.top_padding or 0)) - local col = math.max(1, math.floor((ui.width - width) / 2) + (M.opts.left_padding or 0)) + local width = math.max(1, math.floor(ui.width * 0.9) - presets_opts.left_padding - presets_opts.right_padding) + local height = math.max(1, math.floor(ui.height * 0.9) - presets_opts.top_padding - presets_opts.bottom_padding) + local row = math.max(1, math.floor((ui.height - height) / 2) + (presets_opts.top_padding)) + local col = math.max(1, math.floor((ui.width - width) / 2) + (presets_opts.left_padding)) local buf = vim.api.nvim_create_buf(false, true) local win = vim.api.nvim_open_win(buf, true, { @@ -49,4 +71,5 @@ function M.open_float_terminal(cmd) return buf, win end +---@return table return M