diff options
-rw-r--r-- | src/nvim/shada.c | 113 |
1 files changed, 67 insertions, 46 deletions
diff --git a/src/nvim/shada.c b/src/nvim/shada.c index b4002a3b77..92a1a11d27 100644 --- a/src/nvim/shada.c +++ b/src/nvim/shada.c @@ -124,6 +124,25 @@ KHASH_SET_INIT_STR(strset) // Define nothing #endif +#define SEARCH_KEY_MAGIC "sm" +#define SEARCH_KEY_SMARTCASE "sc" +#define SEARCH_KEY_HAS_LINE_OFFSET "sl" +#define SEARCH_KEY_PLACE_CURSOR_AT_END "se" +#define SEARCH_KEY_IS_LAST_USED "su" +#define SEARCH_KEY_IS_SUBSTITUTE_PATTERN "ss" +#define SEARCH_KEY_HIGHLIGHTED "sh" +#define SEARCH_KEY_OFFSET "so" +#define SEARCH_KEY_PAT "sp" + +#define REG_KEY_TYPE "rt" +#define REG_KEY_WIDTH "rw" +#define REG_KEY_CONTENTS "rc" + +#define KEY_LNUM "l" +#define KEY_COL "c" +#define KEY_FILE "f" +#define KEY_NAME_CHAR "n" + // Error messages formerly used by viminfo code: // E136: viminfo: Too many errors, skipping rest of file // E137: Viminfo file is not writable: %s @@ -1587,7 +1606,7 @@ static void shada_pack_entry(msgpack_packer *const packer, : 0) ); msgpack_pack_map(spacker, map_size); - PACK_STATIC_STR("pat"); + PACK_STATIC_STR(SEARCH_KEY_PAT); msgpack_rpc_from_string(cstr_as_string(entry.data.search_pattern.pat), spacker); #define PACK_BOOL(name, attr, nondef_value) \ @@ -1597,15 +1616,15 @@ static void shada_pack_entry(msgpack_packer *const packer, msgpack_pack_##nondef_value(spacker); \ } \ } while (0) - PACK_BOOL("magic", magic, false); - PACK_BOOL("islast", is_last_used, false); - PACK_BOOL("smartcase", smartcase, true); - PACK_BOOL("lineoff", has_line_offset, true); - PACK_BOOL("curatend", place_cursor_at_end, true); - PACK_BOOL("sub", is_substitute_pattern, true); - PACK_BOOL("hlsearch", highlighted, true); + PACK_BOOL(SEARCH_KEY_MAGIC, magic, false); + PACK_BOOL(SEARCH_KEY_IS_LAST_USED, is_last_used, false); + PACK_BOOL(SEARCH_KEY_SMARTCASE, smartcase, true); + PACK_BOOL(SEARCH_KEY_HAS_LINE_OFFSET, has_line_offset, true); + PACK_BOOL(SEARCH_KEY_PLACE_CURSOR_AT_END, place_cursor_at_end, true); + PACK_BOOL(SEARCH_KEY_IS_SUBSTITUTE_PATTERN, is_substitute_pattern, true); + PACK_BOOL(SEARCH_KEY_HIGHLIGHTED, highlighted, true); if (entry.data.search_pattern.offset) { - PACK_STATIC_STR("off"); + PACK_STATIC_STR(SEARCH_KEY_OFFSET); msgpack_pack_int64(spacker, entry.data.search_pattern.offset); } #undef PACK_BOOL @@ -1641,20 +1660,20 @@ static void shada_pack_entry(msgpack_packer *const packer, : entry.data.filemark.additional_data->size) ); msgpack_pack_map(spacker, map_size); - PACK_STATIC_STR("file"); + PACK_STATIC_STR(KEY_FILE); msgpack_rpc_from_string(cstr_as_string(entry.data.filemark.fname), spacker); if (entry.data.filemark.mark.lnum != 1) { - PACK_STATIC_STR("line"); + PACK_STATIC_STR(KEY_LNUM); msgpack_pack_long(spacker, entry.data.filemark.mark.lnum); } if (entry.data.filemark.mark.col != 0) { - PACK_STATIC_STR("col"); + PACK_STATIC_STR(KEY_COL); msgpack_pack_long(spacker, entry.data.filemark.mark.col); } if (entry.data.filemark.name != '"' && entry.type != kSDItemJump && entry.type != kSDItemChange) { - PACK_STATIC_STR("name"); + PACK_STATIC_STR(KEY_NAME_CHAR); msgpack_pack_uint8(spacker, (uint8_t) entry.data.filemark.name); } if (entry.data.filemark.additional_data != NULL) { @@ -1681,20 +1700,20 @@ static void shada_pack_entry(msgpack_packer *const packer, : entry.data.reg.additional_data->size) ); msgpack_pack_map(spacker, map_size); - PACK_STATIC_STR("contents"); + PACK_STATIC_STR(REG_KEY_CONTENTS); msgpack_pack_array(spacker, entry.data.reg.contents_size); for (size_t i = 0; i < entry.data.reg.contents_size; i++) { msgpack_rpc_from_string(cstr_as_string(entry.data.reg.contents[i]), spacker); } - PACK_STATIC_STR("name"); + PACK_STATIC_STR(KEY_NAME_CHAR); msgpack_pack_char(spacker, entry.data.reg.name); if (entry.data.reg.type != MCHAR) { - PACK_STATIC_STR("type"); + PACK_STATIC_STR(REG_KEY_TYPE); msgpack_pack_uint8(spacker, entry.data.reg.type); } if (entry.data.reg.width != 0) { - PACK_STATIC_STR("width"); + PACK_STATIC_STR(REG_KEY_WIDTH); msgpack_pack_uint64(spacker, (uint64_t) entry.data.reg.width); } if (entry.data.reg.additional_data != NULL) { @@ -1724,16 +1743,16 @@ static void shada_pack_entry(msgpack_packer *const packer, : entry.data.buffer_list.buffers[i].additional_data->size) ); msgpack_pack_map(spacker, map_size); - PACK_STATIC_STR("file"); + PACK_STATIC_STR(KEY_FILE); msgpack_rpc_from_string( cstr_as_string(entry.data.buffer_list.buffers[i].fname), spacker); if (entry.data.buffer_list.buffers[i].pos.lnum != 1) { - PACK_STATIC_STR("line"); + PACK_STATIC_STR(KEY_LNUM); msgpack_pack_uint64( spacker, (uint64_t) entry.data.buffer_list.buffers[i].pos.lnum); } if (entry.data.buffer_list.buffers[i].pos.col != 0) { - PACK_STATIC_STR("col"); + PACK_STATIC_STR(KEY_COL); msgpack_pack_uint64( spacker, (uint64_t) entry.data.buffer_list.buffers[i].pos.col); } @@ -3256,7 +3275,7 @@ shada_read_next_item_read_next: {} } #define TYPED_KEY(entry_name, name, type_name, tgt, objtype, attr, proc) \ CHECKED_KEY( \ - entry_name, name, " which is not " type_name, tgt, \ + entry_name, name, "which is not " type_name, tgt, \ unpacked.data.via.map.ptr[i].val.type == MSGPACK_OBJECT_##objtype, \ attr, proc) #define BOOLEAN_KEY(entry_name, name, tgt) \ @@ -3267,7 +3286,7 @@ shada_read_next_item_read_next: {} TYPED_KEY(entry_name, name, "a binary", tgt, BIN, bin, BIN_CONVERTED) #define INT_KEY(entry_name, name, tgt, proc) \ CHECKED_KEY( \ - entry_name, name, " which is not an integer", tgt, \ + entry_name, name, "which is not an integer", tgt, \ (unpacked.data.via.map.ptr[i].val.type \ == MSGPACK_OBJECT_POSITIVE_INTEGER \ || unpacked.data.via.map.ptr[i].val.type \ @@ -3325,22 +3344,23 @@ shada_read_next_item_read_next: {} ga_init(&ad_ga, sizeof(*(unpacked.data.via.map.ptr)), 1); for (size_t i = 0; i < unpacked.data.via.map.size; i++) { CHECK_KEY_IS_STR("search pattern"); - BOOLEAN_KEY("search pattern", "magic", entry->data.search_pattern.magic) - else BOOLEAN_KEY("search pattern", "smartcase", + BOOLEAN_KEY("search pattern", SEARCH_KEY_MAGIC, + entry->data.search_pattern.magic) + else BOOLEAN_KEY("search pattern", SEARCH_KEY_SMARTCASE, entry->data.search_pattern.smartcase) - else BOOLEAN_KEY("search pattern", "lineoff", + else BOOLEAN_KEY("search pattern", SEARCH_KEY_HAS_LINE_OFFSET, entry->data.search_pattern.has_line_offset) - else BOOLEAN_KEY("search pattern", "curatend", + else BOOLEAN_KEY("search pattern", SEARCH_KEY_PLACE_CURSOR_AT_END, entry->data.search_pattern.place_cursor_at_end) - else BOOLEAN_KEY("search pattern", "islast", + else BOOLEAN_KEY("search pattern", SEARCH_KEY_IS_LAST_USED, entry->data.search_pattern.is_last_used) - else BOOLEAN_KEY("search pattern", "sub", + else BOOLEAN_KEY("search pattern", SEARCH_KEY_IS_SUBSTITUTE_PATTERN, entry->data.search_pattern.is_substitute_pattern) - else BOOLEAN_KEY("search pattern", "hlsearch", + else BOOLEAN_KEY("search pattern", SEARCH_KEY_HIGHLIGHTED, entry->data.search_pattern.highlighted) - else INTEGER_KEY("search pattern", "off", + else INTEGER_KEY("search pattern", SEARCH_KEY_OFFSET, entry->data.search_pattern.offset) - else CONVERTED_STRING_KEY("search pattern", "pat", + else CONVERTED_STRING_KEY("search pattern", SEARCH_KEY_PAT, entry->data.search_pattern.pat) else ADDITIONAL_KEY } @@ -3399,16 +3419,16 @@ shada_read_next_item_read_next: {} for (size_t i = 0; i < unpacked.data.via.map.size; i++) { CHECK_KEY_IS_STR("mark"); CHECKED_KEY( - "mark", "name", " which is not an unsigned integer", + "mark", KEY_NAME_CHAR, " which is not an unsigned integer", entry->data.filemark.name, (type_u64 != kSDItemJump && type_u64 != kSDItemChange && unpacked.data.via.map.ptr[i].val.type == MSGPACK_OBJECT_POSITIVE_INTEGER), u64, TOCHAR) - else LONG_KEY("mark", "line", entry->data.filemark.mark.lnum) - else INTEGER_KEY("mark", "col", entry->data.filemark.mark.col) - else STRING_KEY("mark", "file", entry->data.filemark.fname) + else LONG_KEY("mark", KEY_LNUM, entry->data.filemark.mark.lnum) + else INTEGER_KEY("mark", KEY_COL, entry->data.filemark.mark.col) + else STRING_KEY("mark", KEY_FILE, entry->data.filemark.fname) else ADDITIONAL_KEY } if (entry->data.filemark.mark.lnum == 0) { @@ -3463,17 +3483,18 @@ shada_read_next_item_read_next: {} ga_init(&ad_ga, sizeof(*(unpacked.data.via.map.ptr)), 1); for (size_t i = 0; i < unpacked.data.via.map.size; i++) { CHECK_KEY_IS_STR("register"); - TYPED_KEY("register", "type", "an unsigned integer", + TYPED_KEY("register", REG_KEY_TYPE, "an unsigned integer", entry->data.reg.type, POSITIVE_INTEGER, u64, TOU8) - else TYPED_KEY("register", "name", "an unsigned integer", + else TYPED_KEY("register", KEY_NAME_CHAR, "an unsigned integer", entry->data.reg.name, POSITIVE_INTEGER, u64, TOCHAR) - else TYPED_KEY("register", "width", "an unsigned integer", + else TYPED_KEY("register", REG_KEY_WIDTH, "an unsigned integer", entry->data.reg.width, POSITIVE_INTEGER, u64, TOSIZE) - else if (CHECK_KEY(unpacked.data.via.map.ptr[i].key, "contents")) { + else if (CHECK_KEY(unpacked.data.via.map.ptr[i].key, + REG_KEY_CONTENTS)) { if (unpacked.data.via.map.ptr[i].val.type != MSGPACK_OBJECT_ARRAY) { emsgu(_(RERR "Error while reading ShaDa file: " "register entry at position %" PRIu64 " " - "has contents key with non-array value"), + "has " REG_KEY_CONTENTS " key with non-array value"), (uint64_t) initial_fpos); ga_clear(&ad_ga); goto shada_read_next_item_error; @@ -3481,7 +3502,7 @@ shada_read_next_item_read_next: {} if (unpacked.data.via.map.ptr[i].val.via.array.size == 0) { emsgu(_(RERR "Error while reading ShaDa file: " "register entry at position %" PRIu64 " " - "has contents key with empty array"), + "has " REG_KEY_CONTENTS " key with empty array"), (uint64_t) initial_fpos); ga_clear(&ad_ga); goto shada_read_next_item_error; @@ -3492,7 +3513,7 @@ shada_read_next_item_read_next: {} if (arr.ptr[i].type != MSGPACK_OBJECT_BIN) { emsgu(_(RERR "Error while reading ShaDa file: " "register entry at position %" PRIu64 " " - "has contents array with non-string value"), + "has " REG_KEY_CONTENTS " array with non-string value"), (uint64_t) initial_fpos); ga_clear(&ad_ga); goto shada_read_next_item_error; @@ -3508,7 +3529,7 @@ shada_read_next_item_read_next: {} if (entry->data.reg.contents == NULL) { emsgu(_(RERR "Error while reading ShaDa file: " "register entry at position %" PRIu64 " " - "has missing contents array"), + "has missing " REG_KEY_CONTENTS " array"), (uint64_t) initial_fpos); ga_clear(&ad_ga); goto shada_read_next_item_error; @@ -3820,11 +3841,11 @@ shada_read_next_item_hist_no_conv: { for (size_t i = 0; i < unpacked.data.via.map.size; i++) { CHECK_KEY_IS_STR("buffer list entry"); - LONG_KEY("buffer list entry", "line", + LONG_KEY("buffer list entry", KEY_LNUM, entry->data.buffer_list.buffers[j].pos.lnum) - else INTEGER_KEY("buffer list entry", "col", + else INTEGER_KEY("buffer list entry", KEY_COL, entry->data.buffer_list.buffers[j].pos.col) - else STRING_KEY("buffer list entry", "file", + else STRING_KEY("buffer list entry", KEY_FILE, entry->data.buffer_list.buffers[j].fname) else ADDITIONAL_KEY } |