import { nvim_open_win } from "https://deno.land/x/denops_std@v6.4.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 >lua 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) >lua 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. - "mouse" Mouse position- 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. 'statuscolumn' is changed to empty. 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"] ]. - title: Title (optional) in window border, String or list. List is [text, highlight] tuples. if is string the default highlight group is `FloatTitle`. - title_pos: Title position must set with title option. value can be of `left` `center` `right` default is left. - 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