mirror of
https://github.com/neovim/neovim.git
synced 2025-09-17 16:58:17 +00:00
refactor(api): move window config related functions to own file
This commit is contained in:
@@ -373,117 +373,6 @@ Boolean nvim_win_is_valid(Window window)
|
||||
}
|
||||
|
||||
|
||||
/// Configures window layout. Currently only for floating and external windows
|
||||
/// (including changing a split window to those layouts).
|
||||
///
|
||||
/// When reconfiguring a floating window, absent option keys will not be
|
||||
/// changed. `row`/`col` and `relative` must be reconfigured together.
|
||||
///
|
||||
/// @see |nvim_open_win()|
|
||||
///
|
||||
/// @param window Window handle, or 0 for current window
|
||||
/// @param config Map defining the window configuration,
|
||||
/// see |nvim_open_win()|
|
||||
/// @param[out] err Error details, if any
|
||||
void nvim_win_set_config(Window window, Dict(float_config) *config, Error *err)
|
||||
FUNC_API_SINCE(6)
|
||||
{
|
||||
win_T *win = find_window_by_handle(window, err);
|
||||
if (!win) {
|
||||
return;
|
||||
}
|
||||
bool new_float = !win->w_floating;
|
||||
// reuse old values, if not overridden
|
||||
FloatConfig fconfig = new_float ? FLOAT_CONFIG_INIT : win->w_float_config;
|
||||
|
||||
if (!parse_float_config(config, &fconfig, !new_float, false, err)) {
|
||||
return;
|
||||
}
|
||||
if (new_float) {
|
||||
if (!win_new_float(win, fconfig, err)) {
|
||||
return;
|
||||
}
|
||||
redraw_later(win, NOT_VALID);
|
||||
} else {
|
||||
win_config_float(win, fconfig);
|
||||
win->w_pos_changed = true;
|
||||
}
|
||||
if (fconfig.style == kWinStyleMinimal) {
|
||||
win_set_minimal_style(win);
|
||||
didset_window_options(win);
|
||||
}
|
||||
}
|
||||
|
||||
/// Gets window configuration.
|
||||
///
|
||||
/// The returned value may be given to |nvim_open_win()|.
|
||||
///
|
||||
/// `relative` is empty for normal windows.
|
||||
///
|
||||
/// @param window Window handle, or 0 for current window
|
||||
/// @param[out] err Error details, if any
|
||||
/// @return Map defining the window configuration, see |nvim_open_win()|
|
||||
Dictionary nvim_win_get_config(Window window, Error *err)
|
||||
FUNC_API_SINCE(6)
|
||||
{
|
||||
Dictionary rv = ARRAY_DICT_INIT;
|
||||
|
||||
win_T *wp = find_window_by_handle(window, err);
|
||||
if (!wp) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
FloatConfig *config = &wp->w_float_config;
|
||||
|
||||
PUT(rv, "focusable", BOOLEAN_OBJ(config->focusable));
|
||||
PUT(rv, "external", BOOLEAN_OBJ(config->external));
|
||||
|
||||
if (wp->w_floating) {
|
||||
PUT(rv, "width", INTEGER_OBJ(config->width));
|
||||
PUT(rv, "height", INTEGER_OBJ(config->height));
|
||||
if (!config->external) {
|
||||
if (config->relative == kFloatRelativeWindow) {
|
||||
PUT(rv, "win", INTEGER_OBJ(config->window));
|
||||
if (config->bufpos.lnum >= 0) {
|
||||
Array pos = ARRAY_DICT_INIT;
|
||||
ADD(pos, INTEGER_OBJ(config->bufpos.lnum));
|
||||
ADD(pos, INTEGER_OBJ(config->bufpos.col));
|
||||
PUT(rv, "bufpos", ARRAY_OBJ(pos));
|
||||
}
|
||||
}
|
||||
PUT(rv, "anchor", STRING_OBJ(cstr_to_string(float_anchor_str[config->anchor])));
|
||||
PUT(rv, "row", FLOAT_OBJ(config->row));
|
||||
PUT(rv, "col", FLOAT_OBJ(config->col));
|
||||
PUT(rv, "zindex", INTEGER_OBJ(config->zindex));
|
||||
}
|
||||
if (config->border) {
|
||||
Array border = ARRAY_DICT_INIT;
|
||||
for (size_t i = 0; i < 8; i++) {
|
||||
Array tuple = ARRAY_DICT_INIT;
|
||||
|
||||
String s = cstrn_to_string((const char *)config->border_chars[i], sizeof(schar_T));
|
||||
|
||||
int hi_id = config->border_hl_ids[i];
|
||||
char_u *hi_name = syn_id2name(hi_id);
|
||||
if (hi_name[0]) {
|
||||
ADD(tuple, STRING_OBJ(s));
|
||||
ADD(tuple, STRING_OBJ(cstr_to_string((const char *)hi_name)));
|
||||
ADD(border, ARRAY_OBJ(tuple));
|
||||
} else {
|
||||
ADD(border, STRING_OBJ(s));
|
||||
}
|
||||
}
|
||||
PUT(rv, "border", ARRAY_OBJ(border));
|
||||
}
|
||||
}
|
||||
|
||||
const char *rel = (wp->w_floating && !config->external
|
||||
? float_relative_str[config->relative] : "");
|
||||
PUT(rv, "relative", STRING_OBJ(cstr_to_string(rel)));
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/// Closes the window and hide the buffer it contains (like |:hide| with a
|
||||
/// |window-ID|).
|
||||
///
|
||||
|
Reference in New Issue
Block a user