import { nvim_open_win } from "https://deno.land/x/denops_std@v4.1.4/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 |hl-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
WinSeparator
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