aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/sign.c7
-rw-r--r--test/functional/ui/sign_spec.lua12
2 files changed, 17 insertions, 2 deletions
diff --git a/src/nvim/sign.c b/src/nvim/sign.c
index b1a2d1ad08..dc09bcc5a0 100644
--- a/src/nvim/sign.c
+++ b/src/nvim/sign.c
@@ -1021,9 +1021,14 @@ static void sign_get_placed(buf_T *buf, linenr_T lnum, int id, const char *group
void free_signs(void)
{
cstr_t name;
+ kvec_t(cstr_t) names = KV_INITIAL_VALUE;
map_foreach_key(&sign_map, name, {
- sign_undefine_by_name(name);
+ kv_push(names, name);
});
+ for (size_t i = 0; i < kv_size(names); i++) {
+ sign_undefine_by_name(kv_A(names, i));
+ }
+ kv_destroy(names);
}
static enum {
diff --git a/test/functional/ui/sign_spec.lua b/test/functional/ui/sign_spec.lua
index af03bce4a0..847a918dc9 100644
--- a/test/functional/ui/sign_spec.lua
+++ b/test/functional/ui/sign_spec.lua
@@ -1,6 +1,7 @@
local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
-local clear, feed, exec, api = helpers.clear, helpers.feed, helpers.exec, helpers.api
+local api, clear, eq = helpers.api, helpers.clear, helpers.eq
+local eval, exec, feed = helpers.eval, helpers.exec, helpers.feed
describe('Signs', function()
local screen
@@ -565,4 +566,13 @@ describe('Signs', function()
|
]])
end)
+
+ it('sign_undefine() frees all signs', function()
+ exec([[
+ sign define 1 text=1
+ sign define 2 text=2
+ call sign_undefine()
+ ]])
+ eq({}, eval('sign_getdefined()'))
+ end)
end)