diff options
Diffstat (limited to 'src/nvim/api')
-rw-r--r-- | src/nvim/api/private/helpers.c | 7 | ||||
-rw-r--r-- | src/nvim/api/vim.c | 22 |
2 files changed, 11 insertions, 18 deletions
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c index 750b151d10..39ca0756f3 100644 --- a/src/nvim/api/private/helpers.c +++ b/src/nvim/api/private/helpers.c @@ -65,6 +65,7 @@ bool try_end(Error *err) } } else if (did_throw) { api_set_error(err, Exception, "%s", current_exception->value); + discard_current_exception(); } return err->set; @@ -643,10 +644,8 @@ static Object vim_to_object_rec(typval_T *obj, PMap(ptr_t) *lookup) switch (obj->v_type) { case VAR_STRING: - if (obj->vval.v_string != NULL) { - rv.type = kObjectTypeString; - rv.data.string = cstr_to_string((char *) obj->vval.v_string); - } + rv.type = kObjectTypeString; + rv.data.string = cstr_to_string((char *) obj->vval.v_string); break; case VAR_NUMBER: diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index b7b2f7630c..33020c5b8c 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -57,6 +57,7 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi) FUNC_ATTR_DEFERRED { bool remap = true; + bool insert = false; bool typed = false; if (keys.size == 0) { @@ -68,6 +69,7 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi) case 'n': remap = false; break; case 'm': remap = true; break; case 't': typed = true; break; + case 'i': insert = true; break; } } @@ -80,7 +82,7 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi) keys_esc = keys.data; } ins_typebuf((char_u *)keys_esc, (remap ? REMAP_YES : REMAP_NONE), - typebuf.tb_len, !typed, false); + insert ? 0 : typebuf.tb_len, !typed, false); if (escape_csi) { free(keys_esc); @@ -362,20 +364,16 @@ void vim_report_error(String str) ArrayOf(Buffer) vim_get_buffers(void) { Array rv = ARRAY_DICT_INIT; - buf_T *b = firstbuf; - while (b) { + FOR_ALL_BUFFERS(b) { rv.size++; - b = b->b_next; } rv.items = xmalloc(sizeof(Object) * rv.size); size_t i = 0; - b = firstbuf; - while (b) { + FOR_ALL_BUFFERS(b) { rv.items[i++] = BUFFER_OBJ(b->handle); - b = b->b_next; } return rv; @@ -469,20 +467,16 @@ void vim_set_current_window(Window window, Error *err) ArrayOf(Tabpage) vim_get_tabpages(void) { Array rv = ARRAY_DICT_INIT; - tabpage_T *tp = first_tabpage; - while (tp) { + FOR_ALL_TABS(tp) { rv.size++; - tp = tp->tp_next; } rv.items = xmalloc(sizeof(Object) * rv.size); size_t i = 0; - tp = first_tabpage; - while (tp) { + FOR_ALL_TABS(tp) { rv.items[i++] = TABPAGE_OBJ(tp->handle); - tp = tp->tp_next; } return rv; @@ -584,7 +578,7 @@ Array vim_get_api_info(uint64_t channel_id) /// `emsg` instead of `msg` to print each line) static void write_msg(String message, bool to_err) { - static int out_pos = 0, err_pos = 0; + static size_t out_pos = 0, err_pos = 0; static char out_line_buf[LINE_BUFFER_SIZE], err_line_buf[LINE_BUFFER_SIZE]; #define PUSH_CHAR(i, pos, line_buf, msg) \ |