diff --git a/functions.sh b/functions.sh new file mode 100644 index 0000000..26455bf --- /dev/null +++ b/functions.sh @@ -0,0 +1,3 @@ +get_ip() { + ip a | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d/ -f1 | head -n 1 +} diff --git a/lua/pika/core/keymaps.lua b/lua/pika/core/keymaps.lua index 69fc905..f753647 100644 --- a/lua/pika/core/keymaps.lua +++ b/lua/pika/core/keymaps.lua @@ -58,32 +58,55 @@ map("n", "R", [[:%s/\<\>//gI]]) map("n", "sv", "v", { desc = "Split window vertically" }) -- split window vertically map("n", "sh", "s", { desc = "Split window horizontally" }) -- split window horizontally -vim.keymap.set({ "n", "i" }, "tt", function() - -- Frage den Shell-Command ab - vim.ui.input({ prompt = "Shell Command: " }, function(cmd) - if cmd == nil or cmd == "" then - return - end +-- ─< Set path to your shell functions file (update this to your actual path) >───────── +local shell_script_path = vim.fs.joinpath(vim.fn.stdpath("config") .. "/functions.sh") - local result = vim.fn.system(cmd) - local exit_code = vim.v.shell_error +-- ─< Add this before the keymap definition to check for file existence >─────────────── +if vim.uv.fs_stat(shell_script_path) then -- Check if file exists + -- inserts shell commands (sources ~/.config/nvim/functions.sh to source predefined functions) + vim.keymap.set({ "n", "i" }, "tt", function() + vim.ui.input({ prompt = "Shell Command: " }, function(input_cmd) + if not input_cmd or input_cmd == "" then + return + end - if exit_code ~= 0 then - vim.notify("Shell Error:\n" .. result, vim.log.levels.ERROR, { title = "Shell Command Failed" }) - return - end + -- Construct the command to source your functions and execute + local full_cmd = string.format( + "source %s && %s", -- Uses POSIX-compliant '&&' to fail if source fails + vim.fn.shellescape(shell_script_path), + input_cmd + ) - local lines = vim.split(result, "\n", { trimempty = true }) + -- Execute in bash to ensure function availability + local result = vim.fn.system({ "bash", "--norc", "--noprofile", "-c", full_cmd }) + local exit_code = vim.v.shell_error - -- Insert at cursor position - local row, col = unpack(vim.api.nvim_win_get_cursor(0)) - if #lines == 1 then - -- Insert inline if the result is a single line - local current_line = vim.api.nvim_get_current_line() - local new_line = current_line:sub(1, col) .. lines[1] .. current_line:sub(col + 1) - vim.api.nvim_set_current_line(new_line) - else - vim.api.nvim_buf_set_lines(0, row, row, false, lines) - end - end) -end, { desc = "Insert Shell Output at Cursor" }) + -- Handle errors + if exit_code ~= 0 then + vim.notify( + "Error (" .. exit_code .. "):\n" .. result, + vim.log.levels.ERROR, + { title = "Command Failed" } + ) + return + end + + -- Process output + local lines = vim.split(result:gsub("\n$", ""), "\n") + + -- Insert at cursor position + local row, col = unpack(vim.api.nvim_win_get_cursor(0)) + if #lines == 1 then + vim.api.nvim_set_current_line( + vim.api.nvim_get_current_line():sub(1, col) + .. lines[1] + .. vim.api.nvim_get_current_line():sub(col + 1) + ) + else + vim.api.nvim_buf_set_lines(0, row, row, false, lines) + end + end) + end, { desc = "Insert Shell Output (with functions)" }) +else + vim.notify("Shell functions file not found: " .. shell_script_path, vim.log.levels.WARN) +end