mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-11 18:14:00 +08:00
241 lines
4.5 KiB
Markdown
241 lines
4.5 KiB
Markdown
|
# Layout
|
||
|
|
||
|
Layout is a helper component for creating complex layout by automatically
|
||
|
handling the calculation for position and size of other components.
|
||
|
|
||
|
**Example**
|
||
|
|
||
|
```lua
|
||
|
local Layout = require("nui.layout")
|
||
|
local Popup = require("nui.popup")
|
||
|
|
||
|
local top_popup = Popup({ border = "single" })
|
||
|
local bottom_popup = Popup({ border = "double" })
|
||
|
|
||
|
local layout = Layout(
|
||
|
{
|
||
|
position = "50%",
|
||
|
size = {
|
||
|
width = 80,
|
||
|
height = 40,
|
||
|
},
|
||
|
},
|
||
|
Layout.Box({
|
||
|
Layout.Box(top_popup, { size = "40%" }),
|
||
|
Layout.Box(bottom_popup, { size = "60%" }),
|
||
|
}, { dir = "col" })
|
||
|
)
|
||
|
|
||
|
layout:mount()
|
||
|
```
|
||
|
|
||
|
_Signature:_ `Layout(options, box)` or `Layout(component, box)`
|
||
|
|
||
|
`component` can be `Popup` or `Split`.
|
||
|
|
||
|
## Options
|
||
|
|
||
|
### `relative`
|
||
|
|
||
|
**Type:** `string` or `table`
|
||
|
|
||
|
This option affects how `position` and `size` are calculated.
|
||
|
|
||
|
**Examples**
|
||
|
|
||
|
Relative to cursor on current window:
|
||
|
|
||
|
```lua
|
||
|
relative = "cursor",
|
||
|
```
|
||
|
|
||
|
Relative to the current editor screen:
|
||
|
|
||
|
```lua
|
||
|
relative = "editor",
|
||
|
```
|
||
|
|
||
|
Relative to the current window (_default_):
|
||
|
|
||
|
```lua
|
||
|
relative = "win",
|
||
|
```
|
||
|
|
||
|
Relative to the window with specific id:
|
||
|
|
||
|
```lua
|
||
|
relative = {
|
||
|
type = "win",
|
||
|
winid = 5,
|
||
|
},
|
||
|
```
|
||
|
|
||
|
Relative to the buffer position:
|
||
|
|
||
|
```lua
|
||
|
relative = {
|
||
|
type = "buf",
|
||
|
-- zero-indexed
|
||
|
position = {
|
||
|
row = 5,
|
||
|
col = 5,
|
||
|
},
|
||
|
},
|
||
|
```
|
||
|
|
||
|
---
|
||
|
|
||
|
### `position`
|
||
|
|
||
|
**Type:** `number` or `percentage string` or `table`
|
||
|
|
||
|
Position is calculated from the top-left corner.
|
||
|
|
||
|
If `position` is `number` or `percentage string`, it applies to both `row` and `col`.
|
||
|
Or you can pass a table to set them separately.
|
||
|
|
||
|
For `percentage string`, position is calculated according to the option `relative`.
|
||
|
If `relative` is set to `"buf"` or `"cursor"`, `percentage string` is not allowed.
|
||
|
|
||
|
**Examples**
|
||
|
|
||
|
```lua
|
||
|
position = 50,
|
||
|
```
|
||
|
|
||
|
```lua
|
||
|
position = "50%",
|
||
|
```
|
||
|
|
||
|
```lua
|
||
|
position = {
|
||
|
row = 30,
|
||
|
col = 20,
|
||
|
},
|
||
|
```
|
||
|
|
||
|
```lua
|
||
|
position = {
|
||
|
row = "20%",
|
||
|
col = "50%",
|
||
|
},
|
||
|
```
|
||
|
|
||
|
---
|
||
|
|
||
|
### `size`
|
||
|
|
||
|
**Type:** `number` or `percentage string` or `table`
|
||
|
|
||
|
Determines the size of the layout.
|
||
|
|
||
|
If `size` is `number` or `percentage string`, it applies to both `width` and `height`.
|
||
|
You can also pass a table to set them separately.
|
||
|
|
||
|
For `percentage string`, `size` is calculated according to the option `relative`.
|
||
|
If `relative` is set to `"buf"` or `"cursor"`, window size is considered.
|
||
|
|
||
|
**Examples**
|
||
|
|
||
|
```lua
|
||
|
size = 50,
|
||
|
```
|
||
|
|
||
|
```lua
|
||
|
size = "50%",
|
||
|
```
|
||
|
|
||
|
```lua
|
||
|
size = {
|
||
|
width = 80,
|
||
|
height = 40,
|
||
|
},
|
||
|
```
|
||
|
|
||
|
```lua
|
||
|
size = {
|
||
|
width = "80%",
|
||
|
height = "60%",
|
||
|
},
|
||
|
```
|
||
|
|
||
|
## Layout.Box
|
||
|
|
||
|
_Signature:_ `Layout.Box(box, options)`
|
||
|
|
||
|
**Parameters**
|
||
|
|
||
|
| Name | Type | Description |
|
||
|
| --------- | ------------------------------ | ----------------------------------------- |
|
||
|
| `box` | `Layout.Box[]` / nui component | list of `Layout.Box` or any nui component |
|
||
|
| `options` | `table` | box options |
|
||
|
|
||
|
`options` is a `table` having the following keys:
|
||
|
|
||
|
| Key | Type | Description |
|
||
|
| ------ | ----------------------------- | ------------------------------------------------------ |
|
||
|
| `dir` | `"col"` / `"row"` (_default_) | arrangement direction, only if `box` is `Layout.Box[]` |
|
||
|
| `grow` | `number` | growth factor to fill up the box free space |
|
||
|
| `size` | `number` / `string` / `table` | optional if `grow` is present |
|
||
|
|
||
|
## Methods
|
||
|
|
||
|
### `layout:mount`
|
||
|
|
||
|
_Signature:_ `layout:mount()`
|
||
|
|
||
|
Mounts the layout with all the components.
|
||
|
|
||
|
**Examples**
|
||
|
|
||
|
```lua
|
||
|
layout:mount()
|
||
|
```
|
||
|
|
||
|
### `layout:unmount`
|
||
|
|
||
|
_Signature:_ `layout:unmount()`
|
||
|
|
||
|
Unmounts the layout with all the components.
|
||
|
|
||
|
**Examples**
|
||
|
|
||
|
```lua
|
||
|
layout:unmount()
|
||
|
```
|
||
|
|
||
|
### `layout:hide`
|
||
|
|
||
|
_Signature:_ `layout:hide()`
|
||
|
|
||
|
Hides the layout with all the components. Preserves the buffer (related content, autocmds and keymaps).
|
||
|
|
||
|
### `layout:show`
|
||
|
|
||
|
_Signature:_ `layout:show()`
|
||
|
|
||
|
Shows the hidden layout with all the components.
|
||
|
|
||
|
### `layout:update`
|
||
|
|
||
|
_Signature:_ `layout:update(config, box?)` or `layout:update(box?)`
|
||
|
|
||
|
**Parameters**
|
||
|
|
||
|
`config` is a `table` having the following keys:
|
||
|
|
||
|
| Key | Type |
|
||
|
| ---------- | ------------------ |
|
||
|
| `relative` | `string` / `table` |
|
||
|
| `position` | `string` / `table` |
|
||
|
| `size` | `string` / `table` |
|
||
|
|
||
|
`box` is a `table` returned by `Layout.Box`.
|
||
|
|
||
|
They are the same options used for layout initialization.
|
||
|
|
||
|
## Wiki Page
|
||
|
|
||
|
You can find additional documentation/examples/guides/tips-n-tricks in
|
||
|
[nui.layout wiki page](https://github.com/MunifTanjim/nui.nvim/wiki/nui.layout).
|