aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/api')
-rw-r--r--src/nvim/api/private/defs.h3
-rw-r--r--src/nvim/api/private/helpers.c5
-rw-r--r--src/nvim/api/private/helpers.h6
-rw-r--r--src/nvim/api/ui.c2
-rw-r--r--src/nvim/api/vim.c8
-rw-r--r--src/nvim/api/window.c4
6 files changed, 18 insertions, 10 deletions
diff --git a/src/nvim/api/private/defs.h b/src/nvim/api/private/defs.h
index 1d5ecd3071..223aab09dc 100644
--- a/src/nvim/api/private/defs.h
+++ b/src/nvim/api/private/defs.h
@@ -91,9 +91,6 @@ typedef enum {
struct object {
ObjectType type;
union {
- Buffer buffer;
- Window window;
- Tabpage tabpage;
Boolean boolean;
Integer integer;
Float floating;
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c
index 87a52a5dd0..72db7c0782 100644
--- a/src/nvim/api/private/helpers.c
+++ b/src/nvim/api/private/helpers.c
@@ -618,13 +618,14 @@ bool object_to_vim(Object obj, typval_T *tv, Error *err)
case kObjectTypeWindow:
case kObjectTypeTabpage:
case kObjectTypeInteger:
- if (obj.data.integer > INT_MAX || obj.data.integer < INT_MIN) {
+ if (obj.data.integer > VARNUMBER_MAX
+ || obj.data.integer < VARNUMBER_MIN) {
api_set_error(err, Validation, _("Integer value outside range"));
return false;
}
tv->v_type = VAR_NUMBER;
- tv->vval.v_number = (int)obj.data.integer;
+ tv->vval.v_number = (varnumber_T)obj.data.integer;
break;
case kObjectTypeFloat:
diff --git a/src/nvim/api/private/helpers.h b/src/nvim/api/private/helpers.h
index a946e35149..9fe8c351cf 100644
--- a/src/nvim/api/private/helpers.h
+++ b/src/nvim/api/private/helpers.h
@@ -37,15 +37,15 @@
#define BUFFER_OBJ(s) ((Object) { \
.type = kObjectTypeBuffer, \
- .data.buffer = s })
+ .data.integer = s })
#define WINDOW_OBJ(s) ((Object) { \
.type = kObjectTypeWindow, \
- .data.window = s })
+ .data.integer = s })
#define TABPAGE_OBJ(s) ((Object) { \
.type = kObjectTypeTabpage, \
- .data.tabpage = s })
+ .data.integer = s })
#define ARRAY_OBJ(a) ((Object) { \
.type = kObjectTypeArray, \
diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c
index 56b41f1eea..9178538110 100644
--- a/src/nvim/api/ui.c
+++ b/src/nvim/api/ui.c
@@ -271,6 +271,8 @@ static void remote_ui_mode_change(UI *ui, int mode)
ADD(args, STRING_OBJ(cstr_to_string("insert")));
} else if (mode == REPLACE) {
ADD(args, STRING_OBJ(cstr_to_string("replace")));
+ } else if (mode == CMDLINE) {
+ ADD(args, STRING_OBJ(cstr_to_string("cmdline")));
} else {
assert(mode == NORMAL);
ADD(args, STRING_OBJ(cstr_to_string("normal")));
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index 491375bd73..e59e955aed 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -61,6 +61,7 @@ void nvim_feedkeys(String keys, String mode, Boolean escape_csi)
bool insert = false;
bool typed = false;
bool execute = false;
+ bool dangerous = false;
for (size_t i = 0; i < mode.size; ++i) {
switch (mode.data[i]) {
@@ -69,6 +70,7 @@ void nvim_feedkeys(String keys, String mode, Boolean escape_csi)
case 't': typed = true; break;
case 'i': insert = true; break;
case 'x': execute = true; break;
+ case '!': dangerous = true; break;
}
}
@@ -99,7 +101,13 @@ void nvim_feedkeys(String keys, String mode, Boolean escape_csi)
/* Avoid a 1 second delay when the keys start Insert mode. */
msg_scroll = false;
+ if (!dangerous) {
+ ex_normal_busy++;
+ }
exec_normal(true);
+ if (!dangerous) {
+ ex_normal_busy--;
+ }
msg_scroll |= save_msg_scroll;
}
}
diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c
index ef881fa0eb..1f555a6a05 100644
--- a/src/nvim/api/window.c
+++ b/src/nvim/api/window.c
@@ -348,7 +348,7 @@ Tabpage nvim_win_get_tabpage(Window window, Error *err)
/// @return Window number
Integer nvim_win_get_number(Window window, Error *err)
{
- Integer rv = 0;
+ int rv = 0;
win_T *win = find_window_by_handle(window, err);
if (!win) {
@@ -356,7 +356,7 @@ Integer nvim_win_get_number(Window window, Error *err)
}
int tabnr;
- win_get_tabwin(window, &tabnr, (int *)&rv);
+ win_get_tabwin(window, &tabnr, &rv);
return rv;
}