local BUILD_COMMAND = "" ---@return nil function createFloatingWindow() local max_height = vim.api.nvim_win_get_height(0) local max_width = vim.api.nvim_win_get_width(0) local window_height = math.floor(max_height / 2) local window_width = math.floor(max_width / 2) local window_buffer = vim.api.nvim_create_buf(false, true) vim.api.nvim_open_win(window_buffer, true, { border = "rounded", style = "minimal", relative = "editor", noautocmd = true, height = window_height, width = window_width, col = math.floor((max_width - window_width) / 2), row = math.floor((max_height - window_height) / 2) }) return window_buffer end ---@return nil function createFloatingTerminal() createFloatingWindow() vim.cmd.term() vim.cmd.startinsert() end ---@param command string ---@return nil function executeCommandInTerminal(command) local channel = vim.bo.channel -- 'clear' is used to hide the command local exit_message = "\nPress enter to exit..." vim.api.nvim_chan_send(channel, "clear && " .. command .. "; echo '" .. exit_message .. "' && read -s && exit" .. "\n") end function setBuildCommand() BUILD_COMMAND = vim.fn.input("Enter compile command: ", BUILD_COMMAND) end function build() if string.len(BUILD_COMMAND) == 0 then setBuildCommand() end if string.len(BUILD_COMMAND) > 0 then createFloatingTerminal() executeCommandInTerminal(BUILD_COMMAND) end end vim.keymap.set("n", "mc", setBuildCommand) vim.keymap.set("n", "mt", build)