From 9256c1659dd787dd6ccdb144e951570711ddb610 Mon Sep 17 00:00:00 2001 From: MarcHamamji Date: Sat, 8 Apr 2023 13:33:16 +0300 Subject: [PATCH 1/3] Allow running the code in the terminal (#1) --- lua/runner/handlers/helpers.lua | 2 ++ lua/runner/handlers/utils.lua | 19 ++++++++++--------- lua/runner/init.lua | 8 ++++++++ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/lua/runner/handlers/helpers.lua b/lua/runner/handlers/helpers.lua index 7f3e91a..549750e 100644 --- a/lua/runner/handlers/helpers.lua +++ b/lua/runner/handlers/helpers.lua @@ -24,6 +24,8 @@ M.shell_handler = function(command, editable) local output_window = utils.create_window() vim.api.nvim_win_set_buf(output_window, output_buffer) + utils._last_command = command + vim.fn.termopen(command, { cwd = vim.fn.getcwd(), }) diff --git a/lua/runner/handlers/utils.lua b/lua/runner/handlers/utils.lua index a824288..1f2bc73 100644 --- a/lua/runner/handlers/utils.lua +++ b/lua/runner/handlers/utils.lua @@ -2,25 +2,26 @@ local M = {} local config = require('runner.config') -M._buffer = nil -M._window = nil +M._terminal_buffer = nil +M._terminal_window = nil +M._last_command = nil M.create_buffer = function() - if M._buffer then - vim.api.nvim_buf_delete(M._buffer, {}) + if M._terminal_buffer then + vim.api.nvim_buf_delete(M._terminal_buffer, {}) end local buffer = vim.api.nvim_create_buf(true, true) vim.api.nvim_buf_set_option(buffer, 'modifiable', false) - M._buffer = buffer + M._terminal_buffer = buffer return buffer end M.create_window = function() - if M._window and vim.api.nvim_win_is_valid(M._window) then - vim.api.nvim_set_current_win(M._window) - return M._window + if M._terminal_window and vim.api.nvim_win_is_valid(M._terminal_window) then + vim.api.nvim_set_current_win(M._terminal_window) + return M._terminal_window end if config.options.position == 'right' then @@ -50,7 +51,7 @@ M.create_window = function() vim.api.nvim_win_set_option(window, key, value) end - M._window = window + M._terminal_window = window return window end diff --git a/lua/runner/init.lua b/lua/runner/init.lua index b1634b6..f81d540 100644 --- a/lua/runner/init.lua +++ b/lua/runner/init.lua @@ -1,5 +1,7 @@ local handlers = require('runner.handlers') +local utils = require('runner.handlers.utils') local config = require('runner.config') +local helpers = require('runner.handlers.helpers') local M = {} @@ -20,6 +22,12 @@ M.run = function(bufnr) else buffer = bufnr end + + if buffer == utils._terminal_buffer then + helpers.shell_handler(utils._last_command, false)() + return + end + local filetype = vim.filetype.match { buf = buffer } local handler = M._handlers[filetype] From 2e4914053008c8bc567b28626add870ae64681d3 Mon Sep 17 00:00:00 2001 From: MarcHamamji Date: Sat, 8 Apr 2023 14:24:43 +0300 Subject: [PATCH 2/3] Fix vertical shell window position --- lua/runner/handlers/helpers.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/runner/handlers/helpers.lua b/lua/runner/handlers/helpers.lua index 549750e..d8e13eb 100644 --- a/lua/runner/handlers/helpers.lua +++ b/lua/runner/handlers/helpers.lua @@ -75,7 +75,7 @@ M.choice = function(handlers) end) actions.select_vertical:replace(function() local default_position = config.options.position - config.options.position = 'top' + config.options.position = 'right' actions.close(prompt_bufnr) local handler_name = action_state.get_selected_entry()[1] From 7bae8dd2f336c38a6c969c8420eed523f3fe32b3 Mon Sep 17 00:00:00 2001 From: MarcHamamji Date: Sat, 8 Apr 2023 16:15:34 +0300 Subject: [PATCH 3/3] Add a desperate comment :( --- lua/runner/handlers/utils.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/runner/handlers/utils.lua b/lua/runner/handlers/utils.lua index 1f2bc73..f436e31 100644 --- a/lua/runner/handlers/utils.lua +++ b/lua/runner/handlers/utils.lua @@ -19,6 +19,7 @@ M.create_buffer = function() end M.create_window = function() + -- Don't know why vim.api.nvim_win_is_valid(M._terminal_window) is always false... if M._terminal_window and vim.api.nvim_win_is_valid(M._terminal_window) then vim.api.nvim_set_current_win(M._terminal_window) return M._terminal_window