diff --git a/docs/setup.md b/docs/setup.md index a559a67..03120d9 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -82,13 +82,13 @@ keybinds = { -- c -- keybinds = { ["pr"] = "CRun", - ["nh"] = "NewCHeaderFile", + ["pb"] = "NewCHeaderFile", } -- cpp -- keybinds = { ["pr"] = "CppRun", - ["nh"] = "NewCppHeaderFile", + ["pb"] = "NewCppHeaderFile", } ``` diff --git a/lua/Polydev/configs.lua b/lua/Polydev/configs.lua index 033f43e..c853573 100644 --- a/lua/Polydev/configs.lua +++ b/lua/Polydev/configs.lua @@ -19,7 +19,6 @@ M.defaults = { java = { project_root = "~/Projects/Java", keybinds = { - ["pb"] = "JavaBuild", ["pr"] = "JavaRun", }, }, @@ -39,18 +38,16 @@ M.defaults = { c = { project_root = "~/Projects/C", keybinds = { - ["pb"] = "CBuild", ["pr"] = "CRun", - ["nh"] = "NewCHeaderFile", + ["pb"] = "NewCHeaderFile", }, build_attributes = "", }, cpp = { project_root = "~/Projects/Cpp", keybinds = { - ["pb"] = "CppBuild", ["pr"] = "CppRun", - ["nh"] = "NewCppHeaderFile", + ["pb"] = "NewCppHeaderFile", }, build_attributes = "", }, diff --git a/lua/Polydev/init.lua b/lua/Polydev/init.lua index e1f2fd1..e651ce8 100644 --- a/lua/Polydev/init.lua +++ b/lua/Polydev/init.lua @@ -1,20 +1,9 @@ local M = {} -local loaded_languages = {} -local function load_language_module(lang, opts) - if loaded_languages[lang] then return true end - - local ok, mod = pcall(require, "Polydev.languages." .. lang) - if not ok or type(mod.setup) ~= "function" then return false end - - mod.setup(opts and opts[lang] or {}) - loaded_languages[lang] = mod - return true -end - function M.setup(opts) local opts = opts or {} local config = require("Polydev.configs") + local ui = require("Polydev.ui") config.setup(opts) require("Polydev.utils").setup(opts) for lang, user_opts in pairs(opts) do @@ -22,7 +11,7 @@ function M.setup(opts) config.user_config[lang] = vim.tbl_deep_extend("force", default, user_opts) end - vim.api.nvim_create_user_command("PolydevOpen", require("Polydev.ui").open_project_manager, {}) + vim.api.nvim_create_user_command("PolydevOpen", ui.open_project_manager, {}) local keys = vim.tbl_deep_extend("force", {}, config.get("globals").keybinds, opts or {}) for key, command in pairs(keys) do @@ -34,7 +23,7 @@ function M.setup(opts) pattern = "*", callback = function() local filetype = vim.bo.filetype - load_language_module(filetype, opts) + ui.load_language_module(filetype, opts) end, }) end diff --git a/lua/Polydev/ui.lua b/lua/Polydev/ui.lua index 371c709..14b9773 100644 --- a/lua/Polydev/ui.lua +++ b/lua/Polydev/ui.lua @@ -50,6 +50,18 @@ local function fuzzy_filter(list, query) return result end +local loaded_languages = {} +function M.load_language_module(lang, opts) + if loaded_languages[lang] then return true end + + local ok, mod = pcall(require, "Polydev.languages." .. lang) + if not ok or type(mod.setup) ~= "function" then return false end + + mod.setup(opts and opts[lang] or {}) + loaded_languages[lang] = mod + return true +end + function M.open_project_manager() local templates = require("Polydev.templates") local Popup = require("nui.popup") @@ -277,7 +289,7 @@ function M.open_project_manager() vim.ui.input({ prompt = "Enter language for new file: " }, function(lang) if not lang or lang == "" then return print("File creation canceled.") end - if load_language_module(lang) and templates.files[lang] and templates.files[lang].run then + if M.load_language_module(lang) and templates.files[lang] and templates.files[lang].run then vim.ui.input({ prompt = "Enter file name: " }, function(file_name) if not file_name or file_name == "" then return print("File creation canceled.") end popup:unmount() @@ -297,7 +309,7 @@ function M.open_project_manager() vim.ui.input({ prompt = "Enter language for project: " }, function(lang) if not lang or lang == "" then return print("Project creation canceled.") end opts = vim.tbl_deep_extend("force", {}, require("Polydev.configs").get(lang), opts or {}) - if load_language_module(lang) and templates.projects[lang] and templates.projects[lang].run then + if M.load_language_module(lang) and templates.projects[lang] and templates.projects[lang].run then popup:unmount() vim.schedule(function() templates.create_project(lang, opts.project_root) diff --git a/walkup.sh b/walkup.sh new file mode 100755 index 0000000..3b8d1a4 --- /dev/null +++ b/walkup.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +# Start from the current directory +DIR="$(pwd)" + +# Walk up until we find a marker or reach root +while [[ ! -f "$DIR/CMakeLists.txt" && \ + ! -f "$DIR/package.json" && \ + ! -d "$DIR/.git" && \ + "$DIR" != "/" ]]; do + DIR="$(dirname "$DIR")" +done + +# Check if root was reached without finding anything +if [[ "$DIR" == "/" ]]; then + echo "❌ Project root not found." + exit 1 +fi + +echo "✅ Project root found at: $DIR" +