feat(terminal): added Snacks.terminal.get(). Closes #122

This commit is contained in:
Folke Lemaitre 2024-11-20 20:58:00 +01:00
parent c770ebeaf7
commit 7f63d4fefb
No known key found for this signature in database
GPG key ID: 41F8B1FBACAE2040
4 changed files with 48 additions and 10 deletions

View file

@ -12,6 +12,7 @@ Table of Contents *snacks-terminal-table-of-contents*
5. Module |snacks-terminal-module| 5. Module |snacks-terminal-module|
- Snacks.terminal() |snacks-terminal-module-snacks.terminal()| - Snacks.terminal() |snacks-terminal-module-snacks.terminal()|
- Snacks.terminal.colorize()|snacks-terminal-module-snacks.terminal.colorize()| - Snacks.terminal.colorize()|snacks-terminal-module-snacks.terminal.colorize()|
- Snacks.terminal.get() |snacks-terminal-module-snacks.terminal.get()|
- Snacks.terminal.open() |snacks-terminal-module-snacks.terminal.open()| - Snacks.terminal.open() |snacks-terminal-module-snacks.terminal.open()|
- Snacks.terminal.toggle() |snacks-terminal-module-snacks.terminal.toggle()| - Snacks.terminal.toggle() |snacks-terminal-module-snacks.terminal.toggle()|
6. Links |snacks-terminal-links| 6. Links |snacks-terminal-links|
@ -158,6 +159,19 @@ Example:
< <
`Snacks.terminal.get()` *Snacks.terminal.get()*
Get or create a terminal window. The terminal id is based on the `cmd`, `cwd`,
`env` and `vim.v.count1` options. `opts.create` defaults to `true`.
>lua
---@param cmd? string | string[]
---@param opts? snacks.terminal.Opts| {create?: boolean}
---@return snacks.win? terminal, boolean? created
Snacks.terminal.get(cmd, opts)
<
`Snacks.terminal.open()` *Snacks.terminal.open()* `Snacks.terminal.open()` *Snacks.terminal.open()*
Open a new terminal window. Open a new terminal window.

View file

@ -133,6 +133,19 @@ ls -la --color=always | nvim - -c "lua Snacks.terminal.colorize()"
Snacks.terminal.colorize() Snacks.terminal.colorize()
``` ```
### `Snacks.terminal.get()`
Get or create a terminal window.
The terminal id is based on the `cmd`, `cwd`, `env` and `vim.v.count1` options.
`opts.create` defaults to `true`.
```lua
---@param cmd? string | string[]
---@param opts? snacks.terminal.Opts| {create?: boolean}
---@return snacks.win? terminal, boolean? created
Snacks.terminal.get(cmd, opts)
```
### `Snacks.terminal.open()` ### `Snacks.terminal.open()`
Open a new terminal window. Open a new terminal window.

View file

@ -120,21 +120,30 @@ function M.open(cmd, opts)
return terminal return terminal
end end
--- Get or create a terminal window.
--- The terminal id is based on the `cmd`, `cwd`, `env` and `vim.v.count1` options.
--- `opts.create` defaults to `true`.
---@param cmd? string | string[]
---@param opts? snacks.terminal.Opts| {create?: boolean}
---@return snacks.win? terminal, boolean? created
function M.get(cmd, opts)
opts = opts or {}
local id = vim.inspect({ cmd = cmd, cwd = opts.cwd, env = opts.env, count = vim.v.count1 })
local created = false
if not (terminals[id] and terminals[id]:buf_valid()) and (opts.create ~= false) then
terminals[id] = M.open(cmd, opts)
created = true
end
return terminals[id], created
end
--- Toggle a terminal window. --- Toggle a terminal window.
--- The terminal id is based on the `cmd`, `cwd`, `env` and `vim.v.count1` options. --- The terminal id is based on the `cmd`, `cwd`, `env` and `vim.v.count1` options.
---@param cmd? string | string[] ---@param cmd? string | string[]
---@param opts? snacks.terminal.Opts ---@param opts? snacks.terminal.Opts
function M.toggle(cmd, opts) function M.toggle(cmd, opts)
opts = opts or {} local terminal, created = M.get(cmd, opts)
return created and terminal or assert(terminal):toggle()
local id = vim.inspect({ cmd = cmd, cwd = opts.cwd, env = opts.env, count = vim.v.count1 })
if terminals[id] and terminals[id]:buf_valid() then
terminals[id]:toggle()
else
terminals[id] = M.open(cmd, opts)
end
return terminals[id]
end end
--- Parses a shell command into a table of arguments. --- Parses a shell command into a table of arguments.

View file

@ -225,6 +225,7 @@ end
function M:hide() function M:hide()
self:close({ buf = false }) self:close({ buf = false })
return self
end end
function M:toggle() function M:toggle()
@ -233,6 +234,7 @@ function M:toggle()
else else
self:show() self:show()
end end
return self
end end
---@private ---@private