diff options
author | glepnir <glephunter@gmail.com> | 2023-10-09 18:47:10 +0800 |
---|---|---|
committer | glepnir <glephunter@gmail.com> | 2023-10-10 21:17:08 +0800 |
commit | 372aa2eb3db375385cf19dc0a6571f790b858241 (patch) | |
tree | 6c90cc4a0c9aa152c46ebf7d7c2bc2c6bb7239e8 /src/nvim/window.c | |
parent | 9abced6ad95f6300ae80cd8b8aa124ebcf511b50 (diff) | |
download | rneovim-372aa2eb3db375385cf19dc0a6571f790b858241.tar.gz rneovim-372aa2eb3db375385cf19dc0a6571f790b858241.tar.bz2 rneovim-372aa2eb3db375385cf19dc0a6571f790b858241.zip |
feat(float): add fclose command
Diffstat (limited to 'src/nvim/window.c')
-rw-r--r-- | src/nvim/window.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c index 04b5afe624..d688c58ff5 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -7658,3 +7658,29 @@ win_T *lastwin_nofloating(void) } return res; } + +static int floating_zindex_compare(const void *a, const void *b) +{ + return (*(win_T **)b)->w_float_config.zindex - (*(win_T **)a)->w_float_config.zindex; +} + +void win_float_remove(bool bang, int count) +{ + kvec_t(win_T *) float_win_arr = KV_INITIAL_VALUE; + for (win_T *wp = lastwin; wp && wp->w_floating; wp = wp->w_prev) { + kv_push(float_win_arr, wp); + } + qsort(float_win_arr.items, float_win_arr.size, sizeof(win_T *), floating_zindex_compare); + for (size_t i = 0; i < float_win_arr.size; i++) { + if (win_close(float_win_arr.items[i], false, false) == FAIL) { + break; + } + if (!bang) { + count--; + if (count == 0) { + break; + } + } + } + kv_destroy(float_win_arr); +} |