mirror of
https://github.com/kristoferssolo/runner.nvim.git
synced 2025-10-21 19:50:34 +00:00
Created commands (#18)
* Created `Runner` command * Remove unnesessary temp variable * Created `AutoRunner` command `AutoRunner` command executes the `Runner` command every time a file is saved. * Updated formatting * Fix descriptions * Created `AutoRunnerStop` command `AutoRunnerStop` - stops `AutoRunner` and closes its window * Automatic formatting * Added command description to readme * Update table Added lua command column to "Commands" table. * Update function description Specified that `autorun` can accept buffer number as an argument. * Fix `autorun` function When saving a file, now function now checks if `_terminal_windows` exists and call the last shell command, otherwise it calls the vim command. * Moved `user_commands` `user_commands` now are created when `setup()` is called. * Fix README Removed the line stating that the `setup()` function in optional.
This commit is contained in:
parent
6248f8b855
commit
237f7b72c1
47
README.md
47
README.md
@ -3,6 +3,7 @@
|
|||||||
A customizable Neovim plugin to run code inside the editor
|
A customizable Neovim plugin to run code inside the editor
|
||||||
|
|
||||||
## Demo
|
## Demo
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
@ -53,11 +54,24 @@ A customizable Neovim plugin to run code inside the editor
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
### Commands
|
||||||
|
|
||||||
|
| Command | lua | Description |
|
||||||
|
|-------------------|------------------------------------|------------------------------------------|
|
||||||
|
| `:Runner` | `require('runner').run()` | Runs code in buffer |
|
||||||
|
| `:AutoRunner` | `require('runner').autorun()` | Runs code in buffer on every file save |
|
||||||
|
| `:AutoRunnerStop` | `require('runner').autorun_stop()` | Stops `AutoRunner` and closes the window |
|
||||||
|
|
||||||
|
### Lua
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
require('runner').run()
|
require('runner').run()
|
||||||
|
require('runner').autorun()
|
||||||
|
require('runner').autorun_stop()
|
||||||
|
|
||||||
-- Can also be called with the buffer number where the code is:
|
-- Can also be called with the buffer number where the code is:
|
||||||
-- require('runner').run( <buffer_number> )
|
-- require('runner').run( <buffer_number> )
|
||||||
|
-- require('runner').autorun( <buffer_number> )
|
||||||
|
|
||||||
-- To set a mapping
|
-- To set a mapping
|
||||||
vim.keymap.set('n', '<leader><space>', require('runner').run)
|
vim.keymap.set('n', '<leader><space>', require('runner').run)
|
||||||
@ -65,9 +79,9 @@ A customizable Neovim plugin to run code inside the editor
|
|||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
#### `setup(options)`
|
#### `setup(options)`
|
||||||
|
|
||||||
Using this setup function is **optional**. Runner comes with the following defaults:
|
Runner comes with the following defaults:
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
require('runner').setup({
|
require('runner').setup({
|
||||||
@ -93,7 +107,7 @@ A customizable Neovim plugin to run code inside the editor
|
|||||||
|
|
||||||
For using multiple handlers on the same filetype, see the [choice helper](#choicehandlers).
|
For using multiple handlers on the same filetype, see the [choice helper](#choicehandlers).
|
||||||
|
|
||||||
#### `set_handler(filetype, handler)`
|
#### `set_handler(filetype, handler)`
|
||||||
|
|
||||||
This function **overwrites** the handler set for the specified filetype. Default handlers can be found [here](./lua/runner/handlers/init.lua).
|
This function **overwrites** the handler set for the specified filetype. Default handlers can be found [here](./lua/runner/handlers/init.lua).
|
||||||
|
|
||||||
@ -122,13 +136,13 @@ A customizable Neovim plugin to run code inside the editor
|
|||||||
|
|
||||||
Here is a description of each one:
|
Here is a description of each one:
|
||||||
|
|
||||||
- #### `shell_handler(command, editable)`
|
- #### `shell_handler(command, editable)`
|
||||||
|
|
||||||
Runs a command in a shell by opening it in a new split window, with a terminal buffer.
|
Runs a command in a shell by opening it in a new split window, with a terminal buffer.
|
||||||
|
|
||||||
The split window's position will be determined by the `position` value from the config. It will be overwritten when using the telescope mapping to open horizontally or vertically.
|
The split window's position will be determined by the `position` value from the config. It will be overwritten when using the telescope mapping to open horizontally or vertically.
|
||||||
- `select_horizontal` (defaults to `<C-X>`): Opens the window at the bottom of the screen.
|
- `select_horizontal` (defaults to `<C-X>`): Opens the window at the bottom of the screen.
|
||||||
- `select_vertical` (defaults to `<C-V>`): Opens the window at the right of the screen.
|
- `select_vertical` (defaults to `<C-V>`): Opens the window at the right of the screen.
|
||||||
<br/>
|
<br/>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
@ -144,7 +158,7 @@ A customizable Neovim plugin to run code inside the editor
|
|||||||
require('runner').set_handler('rust', shell_handler('cargo run', true))
|
require('runner').set_handler('rust', shell_handler('cargo run', true))
|
||||||
```
|
```
|
||||||
|
|
||||||
- #### `command_handler(command)`
|
- #### `command_handler(command)`
|
||||||
|
|
||||||
Runs a command in the Vim command mode.
|
Runs a command in the Vim command mode.
|
||||||
|
|
||||||
@ -159,7 +173,7 @@ A customizable Neovim plugin to run code inside the editor
|
|||||||
require('runner').set_handler('lua', command_handler('luafile %'))
|
require('runner').set_handler('lua', command_handler('luafile %'))
|
||||||
```
|
```
|
||||||
|
|
||||||
- #### `choice(handlers)`
|
- #### `choice(handlers)`
|
||||||
|
|
||||||
Opens a `Telescope` finder to allow the user to choose which handler to run.
|
Opens a `Telescope` finder to allow the user to choose which handler to run.
|
||||||
|
|
||||||
@ -177,6 +191,7 @@ A customizable Neovim plugin to run code inside the editor
|
|||||||
['Custom'] = helpers.shell_handler('cargo ', true),
|
['Custom'] = helpers.shell_handler('cargo ', true),
|
||||||
}))
|
}))
|
||||||
```
|
```
|
||||||
|
|
||||||
## Advanced handlers configurations
|
## Advanced handlers configurations
|
||||||
|
|
||||||
For creating dynamic handlers like one for each `npm` or `cargo` script, you can write your own handler function that generates the other handlers, gives them to the choice handler, and runs it itself.
|
For creating dynamic handlers like one for each `npm` or `cargo` script, you can write your own handler function that generates the other handlers, gives them to the choice handler, and runs it itself.
|
||||||
@ -187,22 +202,26 @@ A customizable Neovim plugin to run code inside the editor
|
|||||||
This project uses [StyLua](https://github.com/JohnnyMorganz/StyLua) for enforcing code style, and has a [pre-commit](https://pre-commit.com/) hook setup for running it automatically. `runner.nvim` also has a Github Action that runs the linter on every Pull request. If a check doesn't pass on a specific Pull request, please lint the code and commit it again.
|
This project uses [StyLua](https://github.com/JohnnyMorganz/StyLua) for enforcing code style, and has a [pre-commit](https://pre-commit.com/) hook setup for running it automatically. `runner.nvim` also has a Github Action that runs the linter on every Pull request. If a check doesn't pass on a specific Pull request, please lint the code and commit it again.
|
||||||
|
|
||||||
For running them locally, you have to have them installed on your system:
|
For running them locally, you have to have them installed on your system:
|
||||||
- [StyLua Installation](https://github.com/JohnnyMorganz/StyLua#installation)
|
|
||||||
- [pre-commit Installation](https://pre-commit.com/#install)
|
|
||||||
|
|
||||||
#### Some useful commands:
|
- [StyLua Installation](https://github.com/JohnnyMorganz/StyLua#installation)
|
||||||
|
- [pre-commit Installation](https://pre-commit.com/#install)
|
||||||
|
|
||||||
|
#### Some useful commands
|
||||||
|
|
||||||
|
- Install the pre-commit hook
|
||||||
|
|
||||||
- Install the pre-commit hook
|
|
||||||
```bash
|
```bash
|
||||||
pre-commit install
|
pre-commit install
|
||||||
```
|
```
|
||||||
|
|
||||||
- Check for StyLua errors
|
- Check for StyLua errors
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
stylua --check lua/
|
stylua --check lua/
|
||||||
```
|
```
|
||||||
|
|
||||||
- Fix StyLua errors
|
- Fix StyLua errors
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
stylua lua/
|
stylua lua/
|
||||||
```
|
```
|
||||||
|
|||||||
@ -5,6 +5,7 @@ local config = require('runner.config')
|
|||||||
M._terminal_buffer = nil
|
M._terminal_buffer = nil
|
||||||
M._terminal_window = nil
|
M._terminal_window = nil
|
||||||
M._last_command = nil
|
M._last_command = nil
|
||||||
|
M._last_handler = nil
|
||||||
|
|
||||||
M.create_buffer = function()
|
M.create_buffer = function()
|
||||||
if M._terminal_buffer then
|
if M._terminal_buffer then
|
||||||
|
|||||||
@ -9,6 +9,18 @@ M._handlers = handlers
|
|||||||
|
|
||||||
M.setup = function(options)
|
M.setup = function(options)
|
||||||
config.setup(options)
|
config.setup(options)
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command('Runner', function()
|
||||||
|
require('runner').run()
|
||||||
|
end, { desc = 'Run code inside the editor' })
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command('AutoRunner', function()
|
||||||
|
require('runner').autorun()
|
||||||
|
end, { desc = 'Execute `Runner` on a file save' })
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command('AutoRunnerStop', function()
|
||||||
|
require('runner').autorun_stop()
|
||||||
|
end, { desc = 'Stop `AutoRunner`' })
|
||||||
end
|
end
|
||||||
|
|
||||||
--- **Overrides** the handler for the specified filetype
|
--- **Overrides** the handler for the specified filetype
|
||||||
@ -28,29 +40,49 @@ M.set_handler = function(filetype, handler)
|
|||||||
M._handlers[filetype] = handler
|
M._handlers[filetype] = handler
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- @param bufnr integer?
|
||||||
M.run = function(bufnr)
|
M.run = function(bufnr)
|
||||||
local buffer
|
|
||||||
if bufnr == nil or bufnr == 0 then
|
if bufnr == nil or bufnr == 0 then
|
||||||
buffer = vim.api.nvim_get_current_buf()
|
bufnr = vim.api.nvim_get_current_buf()
|
||||||
else
|
|
||||||
buffer = bufnr
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if buffer == utils._terminal_buffer then
|
if bufnr == utils._terminal_buffer then
|
||||||
helpers.shell_handler(utils._last_command, false)()
|
helpers.shell_handler(utils._last_command, false)()
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local filetype = vim.filetype.match { buf = buffer }
|
local filetype = vim.filetype.match { buf = bufnr }
|
||||||
|
|
||||||
local handler = M._handlers[filetype]
|
local handler = M._handlers[filetype]
|
||||||
|
|
||||||
if not handler then
|
if not handler then
|
||||||
print(string.format("No handler defined for filetype '%s'", filetype))
|
print('No handler defined for filetype ' .. filetype)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
handler(buffer)
|
utils._last_handler = handler
|
||||||
|
handler(bufnr)
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param bufnr integer?
|
||||||
|
M.autorun = function(bufnr)
|
||||||
|
M.run(bufnr)
|
||||||
|
vim.api.nvim_create_autocmd('BufWritePost', {
|
||||||
|
group = vim.api.nvim_create_augroup('AutoRunner', { clear = true }),
|
||||||
|
pattern = '*',
|
||||||
|
callback = function()
|
||||||
|
if utils._terminal_window then
|
||||||
|
helpers.shell_handler(utils._last_command, false)()
|
||||||
|
else
|
||||||
|
utils._last_handler(bufnr)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
M.autorun_stop = function()
|
||||||
|
vim.api.nvim_del_augroup_by_name('AutoRunner')
|
||||||
|
vim.api.nvim_win_close(utils._terminal_window, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user