aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/api')
-rw-r--r--src/nvim/api/private/helpers.c7
-rw-r--r--src/nvim/api/vim.c22
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) \