Added Presets for terminal placements
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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{})
|
||||
+27
-4
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user