import { nvim_open_win } from "https://deno.land/x/denops_std@v3.9.0/function/nvim/mod.ts";
Open a new window.
Currently this is used to open floating and external windows.
Floats are windows that are drawn above the split layout, at
some anchor position in some other window. Floats can be drawn
internally or by external GUI with the |ui-multigrid|
extension. External windows are only supported with multigrid
GUIs, and are displayed as separate top-level windows.
For a general overview of floats, see |api-floatwin|.
Exactly one of external
and relative
must be specified.
The width
and height
of the new window must be specified.
With relative=editor (row=0,col=0) refers to the top-left
corner of the screen-grid and (row=Lines-1,col=Columns-1)
refers to the bottom-right corner. Fractional values are
allowed, but the builtin implementation (used by non-multigrid
UIs) will always round down to nearest integer.
Out-of-bounds values, and configurations that make the float
not fit inside the main editor, are allowed. The builtin
implementation truncates values so floats are fully within the
main screen grid. External GUIs could let floats hover outside
of the main window like a tooltip, but this should not be used
to specify arbitrary WM screen positions.
Example (Lua): window-relative float
vim.api.nvim_open_win(0, false,
{relative='win', row=3, col=3, width=12, height=3})
Example (Lua): buffer-relative float (travels as buffer is
scrolled)
vim.api.nvim_open_win(0, false,
{relative='win', width=12, height=3, bufpos={100,10}})
Attributes: ~
not allowed when |textlock| is active
Parameters: ~
{buffer} Buffer to display, or 0 for current buffer
{enter} Enter the window (make it the current window)
{config} Map defining the window configuration. Keys:
β’ relative: Sets the window layout to
"floating", placed at (row,col) coordinates
relative to:
β’ "editor" The global editor grid
β’ "win" Window given by the win
field, or
current window.
β’ "cursor" Cursor position in current window.
β’ win: |window-ID| for relative="win".
β’ anchor: Decides which corner of the float to
place at (row,col):
β’ "NW" northwest (default)
β’ "NE" northeast
β’ "SW" southwest
β’ "SE" southeast
β’ width: Window width (in character cells).
Minimum of 1.
β’ height: Window height (in character cells).
Minimum of 1.
β’ bufpos: Places float relative to buffer text
(only when relative="win"). Takes a tuple of
zero-indexed [line, column]. row
and col
if given are applied relative to this
position, else they default to:
β’ row=1
and col=0
if anchor
is "NW" or
"NE"
β’ row=0
and col=0
if anchor
is "SW" or
"SE" (thus like a tooltip near the buffer
text).
β’ row: Row position in units of "screen cell
height", may be fractional.
β’ col: Column position in units of "screen cell
width", may be fractional.
β’ focusable: Enable focus by user actions
(wincmds, mouse events). Defaults to true.
Non-focusable windows can be entered by
|nvim_set_current_win()|.
β’ external: GUI should display the window as an
external top-level window. Currently accepts
no other positioning configuration together
with this.
β’ zindex: Stacking order. floats with higher zindex
go on top on floats with lower indices. Must
be larger than zero. The following screen
elements have hard-coded z-indices:
β’ 100: insert completion popupmenu
β’ 200: message scrollback
β’ 250: cmdline completion popupmenu (when
wildoptions+=pum) The default value for
floats are 50. In general, values below 100
are recommended, unless there is a good
reason to overshadow builtin elements.
β’ style: Configure the appearance of the window.
Currently only takes one non-empty value:
β’ "minimal" Nvim will display the window with
many UI options disabled. This is useful
when displaying a temporary float where the
text should not be edited. Disables
'number', 'relativenumber', 'cursorline',
'cursorcolumn', 'foldcolumn', 'spell' and
'list' options. 'signcolumn' is changed to
auto
and 'colorcolumn' is cleared. The
end-of-buffer region is hidden by setting
eob
flag of 'fillchars' to a space char,
and clearing the |EndOfBuffer| region in
'winhighlight'.
β’ border: Style of (optional) window border.
This can either be a string or an array. The
string values are
β’ "none": No border (default).
β’ "single": A single line box.
β’ "double": A double line box.
β’ "rounded": Like "single", but with rounded
corners ("β" etc.).
β’ "solid": Adds padding by a single whitespace
cell.
β’ "shadow": A drop shadow effect by blending
with the background.
β’ If it is an array, it should have a length
of eight or any divisor of eight. The array
will specifify the eight chars building up
the border in a clockwise fashion starting
with the top-left corner. As an example, the
double box style could be specified as [
"β", "β" ,"β", "β", "β", "β", "β", "β" ]. If
the number of chars are less than eight,
they will be repeated. Thus an ASCII border
could be specified as [ "/", "-", "\", "|"
], or all chars the same as [ "x" ]. An
empty string can be used to turn off a
specific border, for instance, [ "", "", "",
">", "", "", "", "<" ] will only make
vertical borders but not horizontal ones. By
default, FloatBorder
highlight is used,
which links to VertSplit
when not defined.
It could also be specified by character: [
{"+", "MyCorner"}, {"x", "MyBorder"} ].
β’ noautocmd: If true then no buffer-related
autocommand events such as |BufEnter|,
|BufLeave| or |BufWinEnter| may fire from
calling this function.
Return: ~
Window handle, or 0 on error