init: QQdock.nvim — persistent adaptive terminal dock
This commit is contained in:
commit
9e8f286a62
|
|
@ -0,0 +1,53 @@
|
|||
# QQdock.nvim
|
||||
|
||||
持久化自适应浮动终端管理器。
|
||||
|
||||
## 特性
|
||||
|
||||
- **持久化** — 同一个终端实例反复 show/hide,命令输出不丢
|
||||
- **自适应方向** — 横屏 → 右侧分屏(45%),竖屏 → 下方分屏(40%)
|
||||
- **轻量** — 依赖 toggleQQdock.nvim,API 简洁
|
||||
|
||||
## 安装
|
||||
|
||||
```lua
|
||||
{
|
||||
"newbie/QQdock.nvim",
|
||||
dependencies = { "akinsho/toggleQQdock.nvim" },
|
||||
config = function()
|
||||
require("QQdock").setup()
|
||||
end,
|
||||
}
|
||||
```
|
||||
|
||||
## 用法
|
||||
|
||||
```lua
|
||||
local T = require("QQdock")
|
||||
|
||||
T.shell() -- 普通 shell
|
||||
T.open("reasonix") -- Reasonix AI
|
||||
T.open("lazygit") -- lazygit
|
||||
```
|
||||
|
||||
## 推荐键位
|
||||
|
||||
```lua
|
||||
vim.keymap.set("n", "<c-t>", T.shell)
|
||||
vim.keymap.set("i", "<c-t>", T.shell)
|
||||
vim.keymap.set("n", "<C-i>", function() T.open("reasonix") end)
|
||||
vim.keymap.set("n", "<leader>gg", function() T.open("lazygit") end)
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
| 函数 | 参数 | 作用 |
|
||||
|------|------|------|
|
||||
| `T.shell()` | — | 打开/关闭持久 shell |
|
||||
| `T.open(cmd)` | cmd: string | 打开/关闭指定命令的持久终端 |
|
||||
|
||||
## TODO
|
||||
|
||||
- [ ] 翻译(trans)
|
||||
- [ ] 系统监控(btop)
|
||||
- [ ] 文件管理器(yazi)
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
-- addons/term.lua — 持久化自适应终端
|
||||
--
|
||||
-- 用法:
|
||||
-- local T = require('addons.term')
|
||||
-- T.shell() -- 打开/关闭普通终端(<c-t>)
|
||||
-- T.open('reasonix') -- 打开/关闭 Reasonix(<C-i>)
|
||||
--
|
||||
-- 特性:
|
||||
-- - 同一个终端实例持久化(关掉再开回来,对话不丢)
|
||||
-- - 窗口方向自适应:横屏→右侧(45%),竖屏→下方(40%)
|
||||
-- - 依赖 toggleterm.nvim
|
||||
|
||||
local M = {}
|
||||
|
||||
local terms = {} -- 缓存终端实例,key 是命令名(nil = 普通 shell)
|
||||
|
||||
function M.open(cmd)
|
||||
local ui = vim.api.nvim_list_uis()[1]
|
||||
local tall = ui.height > ui.width
|
||||
local name = cmd or '__shell__'
|
||||
|
||||
if not terms[name] or not terms[name]:is_open() then
|
||||
terms[name] = require('toggleterm.terminal').Terminal:new({
|
||||
direction = tall and 'horizontal' or 'vertical',
|
||||
cmd = cmd,
|
||||
size = tall and math.floor(ui.height * 0.4) or math.floor(ui.width * 0.45),
|
||||
})
|
||||
end
|
||||
|
||||
terms[name]:toggle()
|
||||
end
|
||||
|
||||
function M.shell()
|
||||
M.open(nil)
|
||||
end
|
||||
|
||||
return M
|
||||
Loading…
Reference in New Issue