mirror of
https://github.com/folke/snacks.nvim
synced 2025-08-05 03:08:13 +00:00
feat(terminal): added Snacks.terminal.get(). Closes #122
This commit is contained in:
parent
c770ebeaf7
commit
7f63d4fefb
4 changed files with 48 additions and 10 deletions
|
@ -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.
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue