*QQdock.nvim.txt* Persistent Adaptive Terminal Dock Author: newbie License: MIT ============================================================================== CONTENTS *QQdock-contents* 1. Introduction .............................. |QQdock-intro| 2. Installation .............................. |QQdock-install| 3. Configuration ............................. |QQdock-config| 4. Usage ..................................... |QQdock-usage| 5. API ....................................... |QQdock-api| 6. Layout Logic .............................. |QQdock-layout| 7. Keymaps ................................... |QQdock-keymaps| ============================================================================== INTRODUCTION *QQdock-intro* QQdock.nvim is a zero-dependency, persistent terminal dock for Neovim. It uses Neovim's native `vim.fn.termopen()` — no external plugins required. Key features: - **Persistent** — toggle hide/show, terminal process keeps running. - **Adaptive split** — vertical vsplit on wide screens, horizontal split on tall screens; based on the current window, not the tabpage. - **Main window mode** — when no file is open, the terminal occupies the current window directly instead of creating a split. - **Dynamic commands** — add new tools with two lines of config; keymaps are auto-registered from `commands` and `keymaps` tables. - **Single file** — ~220 lines of Lua. ============================================================================== INSTALLATION *QQdock-install* Using lazy.nvim >~ { 'newbie/QQdock.nvim', url = 'https://github.com/newbie/QQdock.nvim', config = function() require('QQdock').setup({}) end, } No dependencies required. ============================================================================== CONFIGURATION *QQdock-config* QQdock.setup({opts}) accepts the following options: require('QQdock').setup({ size = { horizontal = nil, -- terminal height in rows (nil = auto) vertical = nil, -- terminal width in columns (nil = auto) }, commands = { reasonix = 'reasonix', lazygit = 'lazygit', -- key = command name, value = shell command or function }, keymaps = { shell = { 'n', '' }, shell_i = { 'i', '' }, reasonix = { 'n', '' }, lazygit = { 'n', 'gg' }, -- key = must match a key in `commands`, value = {mode, lhs} }, debug = false, -- log layout decisions to :messages }) `commands` values can be strings or functions (lazy evaluation). If `keymaps` is empty or omitted, no keymaps are registered. You can bind everything manually via the API. ============================================================================== USAGE *QQdock-usage* *QQdock.shell* QQdock.shell()~ Open/close a persistent plain shell. Equivalent to `QQdock.open(nil)`. *QQdock.open* QQdock.open({cmd})~ Open/close a persistent terminal running the given command. Each unique {cmd} gets its own cached terminal instance. Examples: > local Q = require('QQdock') Q.shell() Q.open('reasonix') Q.open('lazygit') Q.open('btop') Q.open('yazi') Inside any terminal, press (Ctrl+\\ twice) to hide it. The process keeps running in the background. ============================================================================== API *QQdock-api* QQdock.setup({opts}) *QQdock.setup* Configure and register keymaps. Call once, typically in your plugin manager's `config` function. Parameters: ~ {opts} (table) Configuration table, see |QQdock-config|. QQdock.shell() *QQdock.shell* Toggle a plain shell terminal. Shortcut for `QQdock.open(nil)`. QQdock.open({cmd}) *QQdock.open* Toggle a persistent terminal for the given command. Parameters: ~ {cmd} (string|nil) Shell command to run, or nil for default shell. ============================================================================== LAYOUT LOGIC *QQdock-layout* The layout is determined automatically based on the current window dimensions: Condition Result ----------------------------------- ------------------------------- Empty unnamed buffer, not modified Main window (no split) width ≥ 110 and width > height × 2 Right vsplit, 40% width Otherwise Bottom split, 35% height (min 10) Splits use `rightbelow`, meaning they open relative to the current window without disrupting the rest of the tabpage layout. Set `debug = true` to see layout decisions in `:messages`. ============================================================================== KEYMAPS *QQdock-keymaps* *QQdock-ctrl-backslash* (terminal mode)~ Hide the current terminal. Bound automatically in every QQdock terminal buffer. Does not affect TUI programs that use Ctrl+\ for other purposes. Custom keymaps are defined in the `keymaps` table passed to |QQdock.setup|. Each entry is {mode, lhs}. Key names must match entries in `commands`. The `shell` and `shell_i` keys are special and are not driven by `commands`. ============================================================================== vim:tw=78:ts=8:ft=help:norl: