aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/window.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2023-10-10 16:36:55 +0200
committerGitHub <noreply@github.com>2023-10-10 16:36:55 +0200
commitfd39f5ce8c9bbda1b77ff6c03553148fadac5d57 (patch)
treec0c05713b01fa9d99ccbafbe87149366e1db69ce /src/nvim/window.c
parent468a3a14072a638865681dad88d3c3b31cf11e23 (diff)
parent372aa2eb3db375385cf19dc0a6571f790b858241 (diff)
downloadrneovim-fd39f5ce8c9bbda1b77ff6c03553148fadac5d57.tar.gz
rneovim-fd39f5ce8c9bbda1b77ff6c03553148fadac5d57.tar.bz2
rneovim-fd39f5ce8c9bbda1b77ff6c03553148fadac5d57.zip
Merge pull request #25561 from glepnir/9663
feat(float): add fclose command
Diffstat (limited to 'src/nvim/window.c')
-rw-r--r--src/nvim/window.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c
index db5e7e1fb0..bb2e08158f 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -7656,3 +7656,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);
+}