mirror of
https://github.com/neovim/neovim.git
synced 2026-04-05 07:09:23 +00:00
Merge #7878 from justinmk/keymap-leak
This commit is contained in:
@@ -1775,6 +1775,7 @@ void free_buf_options(buf_T *buf, int free_p_ff)
|
||||
clear_string_option(&buf->b_p_flp);
|
||||
clear_string_option(&buf->b_p_isk);
|
||||
clear_string_option(&buf->b_p_keymap);
|
||||
keymap_ga_clear(&buf->b_kmap_ga);
|
||||
ga_clear(&buf->b_kmap_ga);
|
||||
clear_string_option(&buf->b_p_com);
|
||||
clear_string_option(&buf->b_p_cms);
|
||||
|
||||
@@ -1841,6 +1841,16 @@ void ex_loadkeymap(exarg_T *eap)
|
||||
status_redraw_curbuf();
|
||||
}
|
||||
|
||||
/// Frees the buf_T.b_kmap_ga field of a buffer.
|
||||
void keymap_ga_clear(garray_T *kmap_ga)
|
||||
{
|
||||
kmap_T *kp = (kmap_T *)kmap_ga->ga_data;
|
||||
for (int i = 0; i < kmap_ga->ga_len; i++) {
|
||||
xfree(kp[i].from);
|
||||
xfree(kp[i].to);
|
||||
}
|
||||
}
|
||||
|
||||
/// Stop using 'keymap'.
|
||||
static void keymap_unload(void)
|
||||
{
|
||||
@@ -1858,12 +1868,11 @@ static void keymap_unload(void)
|
||||
// clear the ":lmap"s
|
||||
kp = (kmap_T *)curbuf->b_kmap_ga.ga_data;
|
||||
|
||||
for (int i = 0; i < curbuf->b_kmap_ga.ga_len; ++i) {
|
||||
for (int i = 0; i < curbuf->b_kmap_ga.ga_len; i++) {
|
||||
vim_snprintf((char *)buf, sizeof(buf), "<buffer> %s", kp[i].from);
|
||||
(void)do_map(1, buf, LANGMAP, FALSE);
|
||||
xfree(kp[i].from);
|
||||
xfree(kp[i].to);
|
||||
(void)do_map(1, buf, LANGMAP, false);
|
||||
}
|
||||
keymap_ga_clear(&curbuf->b_kmap_ga);
|
||||
|
||||
p_cpo = save_cpo;
|
||||
|
||||
|
||||
@@ -1619,6 +1619,9 @@ void parse_cino(buf_T *buf)
|
||||
* while(). */
|
||||
buf->b_ind_if_for_while = 0;
|
||||
|
||||
// indentation for # comments
|
||||
buf->b_ind_hash_comment = 0;
|
||||
|
||||
for (p = buf->b_p_cino; *p; ) {
|
||||
l = p++;
|
||||
if (*p == '-')
|
||||
|
||||
@@ -40,11 +40,12 @@ SCRIPTS ?= $(SCRIPTS_DEFAULT)
|
||||
# Tests using runtest.vim.
|
||||
# Keep test_alot*.res as the last one, sort the others.
|
||||
NEW_TESTS ?= \
|
||||
test_arabic.vim \
|
||||
test_arabic.res \
|
||||
test_autocmd.res \
|
||||
test_bufwintabinfo.res \
|
||||
test_changedtick.res \
|
||||
test_charsearch.res \
|
||||
test_cindent.res \
|
||||
test_cmdline.res \
|
||||
test_command_count.res \
|
||||
test_cscope.res \
|
||||
|
||||
16
src/nvim/testdir/test_cindent.vim
Normal file
16
src/nvim/testdir/test_cindent.vim
Normal file
@@ -0,0 +1,16 @@
|
||||
" Test for cinoptions and cindent
|
||||
"
|
||||
" TODO: rewrite test3.in into this new style test
|
||||
|
||||
func Test_cino_hash()
|
||||
" Test that curbuf->b_ind_hash_comment is correctly reset
|
||||
new
|
||||
setlocal cindent cinoptions=#1
|
||||
setlocal cinoptions=
|
||||
call setline(1, ["#include <iostream>"])
|
||||
call cursor(1, 1)
|
||||
norm! o#include
|
||||
"call feedkeys("o#include\<esc>", 't')
|
||||
call assert_equal(["#include <iostream>", "#include"], getline(1,2))
|
||||
bwipe!
|
||||
endfunc
|
||||
@@ -1,4 +1,5 @@
|
||||
-- Test for 'cindent'.
|
||||
-- For new tests, consider putting them in test_cindent.vim.
|
||||
--
|
||||
-- There are 50+ test command blocks (the stuff between STARTTEST and ENDTEST)
|
||||
-- in the original test. These have been converted to "it" test cases here.
|
||||
|
||||
Reference in New Issue
Block a user