shada: Save v:hlsearch value

This commit is contained in:
ZyX 2015-07-07 23:05:01 +03:00
parent 7abe20f3d3
commit f43a5e6926
2 changed files with 36 additions and 1 deletions

View File

@ -200,7 +200,7 @@ typedef struct {
int64_t offset; int64_t offset;
bool is_last_used; bool is_last_used;
bool is_substitute_pattern; bool is_substitute_pattern;
// TODO(ZyX-I): Also store v:hlsearch, see :h shada-h bool highlighted;
char *pat; char *pat;
Dictionary *additional_data; Dictionary *additional_data;
} search_pattern; } search_pattern;
@ -740,6 +740,9 @@ static void shada_read(ShaDaReadDef *const sd_reader, const int flags)
set_last_used_pattern( set_last_used_pattern(
cur_entry.data.search_pattern.is_substitute_pattern); cur_entry.data.search_pattern.is_substitute_pattern);
} }
if (!cur_entry.data.search_pattern.is_substitute_pattern) {
SET_NO_HLSEARCH(!cur_entry.data.search_pattern.highlighted);
}
// Do not free shada entry: its allocated memory was saved above. // Do not free shada entry: its allocated memory was saved above.
break; break;
} }
@ -1163,6 +1166,7 @@ static void shada_pack_entry(msgpack_packer *const packer,
+ (size_t) entry.data.search_pattern.has_line_offset + (size_t) entry.data.search_pattern.has_line_offset
+ (size_t) entry.data.search_pattern.place_cursor_at_end + (size_t) entry.data.search_pattern.place_cursor_at_end
+ (size_t) entry.data.search_pattern.is_substitute_pattern + (size_t) entry.data.search_pattern.is_substitute_pattern
+ (size_t) entry.data.search_pattern.highlighted
// offset defaults to zero: // offset defaults to zero:
+ (size_t) (entry.data.search_pattern.offset != 0) + (size_t) (entry.data.search_pattern.offset != 0)
// finally, additional data: // finally, additional data:
@ -1187,6 +1191,7 @@ static void shada_pack_entry(msgpack_packer *const packer,
PACK_BOOL("lineoff", has_line_offset, true); PACK_BOOL("lineoff", has_line_offset, true);
PACK_BOOL("curatend", place_cursor_at_end, true); PACK_BOOL("curatend", place_cursor_at_end, true);
PACK_BOOL("sub", is_substitute_pattern, true); PACK_BOOL("sub", is_substitute_pattern, true);
PACK_BOOL("hlsearch", highlighted, true);
if (entry.data.search_pattern.offset) { if (entry.data.search_pattern.offset) {
PACK_STATIC_STR("off"); PACK_STATIC_STR("off");
msgpack_pack_int64(spacker, entry.data.search_pattern.offset); msgpack_pack_int64(spacker, entry.data.search_pattern.offset);
@ -1548,6 +1553,7 @@ static void shada_write(ShaDaWriteDef *const sd_writer,
.offset = pat.off.off, .offset = pat.off.off,
.is_last_used = search_was_last_used(), .is_last_used = search_was_last_used(),
.is_substitute_pattern = false, .is_substitute_pattern = false,
.highlighted = (!no_hlsearch && find_shada_parameter('h') != NULL),
.pat = (char *) pat.pat, .pat = (char *) pat.pat,
.additional_data = pat.additional_data, .additional_data = pat.additional_data,
} }
@ -1572,6 +1578,7 @@ static void shada_write(ShaDaWriteDef *const sd_writer,
.offset = 0, .offset = 0,
.is_last_used = !search_was_last_used(), .is_last_used = !search_was_last_used(),
.is_substitute_pattern = true, .is_substitute_pattern = true,
.highlighted = false,
.pat = (char *) pat.pat, .pat = (char *) pat.pat,
.additional_data = pat.additional_data, .additional_data = pat.additional_data,
} }
@ -2338,6 +2345,7 @@ shada_read_next_item_start:
.offset = 0, .offset = 0,
.is_last_used = true, .is_last_used = true,
.is_substitute_pattern = false, .is_substitute_pattern = false,
.highlighted = false,
.pat = NULL, .pat = NULL,
.additional_data = NULL, .additional_data = NULL,
}; };
@ -2356,6 +2364,8 @@ shada_read_next_item_start:
entry->data.search_pattern.is_last_used) entry->data.search_pattern.is_last_used)
else BOOLEAN_KEY("search pattern", "sub", else BOOLEAN_KEY("search pattern", "sub",
entry->data.search_pattern.is_substitute_pattern) entry->data.search_pattern.is_substitute_pattern)
else BOOLEAN_KEY("search pattern", "hlsearch",
entry->data.search_pattern.highlighted)
else INTEGER_KEY("search pattern", "off", else INTEGER_KEY("search pattern", "off",
entry->data.search_pattern.offset) entry->data.search_pattern.offset)
else CONVERTED_STRING_KEY("search pattern", "pat", else CONVERTED_STRING_KEY("search pattern", "pat",

View File

@ -114,6 +114,31 @@ describe('ShaDa support code', function()
eq({0, 2, 3, 0}, nvim_eval('getpos(".")')) eq({0, 2, 3, 0}, nvim_eval('getpos(".")'))
end) end)
it('saves v:hlsearch=1', function()
nvim_command('set hlsearch')
nvim_feed('/test\n')
nvim_command('qall')
reset()
eq(1, nvim_eval('v:hlsearch'))
end)
it('saves v:hlsearch=0 with :nohl', function()
nvim_command('set hlsearch')
nvim_feed('/test\n')
nvim_command('nohlsearch')
nvim_command('qall')
reset()
eq(0, nvim_eval('v:hlsearch'))
end)
it('saves v:hlsearch=0 with :set viminfo-=h', function()
nvim_command('set hlsearch viminfo-=h')
nvim_feed('/test\n')
nvim_command('qall')
reset()
eq(0, nvim_eval('v:hlsearch'))
end)
it('dumps and loads last substitute pattern and replacement string', function() it('dumps and loads last substitute pattern and replacement string', function()
nvim_eval('setline(".", ["foo", "bar"])') nvim_eval('setline(".", ["foo", "bar"])')
nvim_command('%s/f/g/g') nvim_command('%s/f/g/g')