aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/api
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-06-24 13:47:36 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-06-24 13:47:36 -0300
commit9f1b9726fb28f78fba7c50efa5316c4bf2413cf8 (patch)
tree4fb8f7d5e1d7f4153b508e987f268c0222431152 /src/nvim/api
parente1264412f80ac8bab15e8e960b93a30ca9254418 (diff)
parent296da85198a7d5da36dbb2e6f213edb5da511635 (diff)
downloadrneovim-9f1b9726fb28f78fba7c50efa5316c4bf2413cf8.tar.gz
rneovim-9f1b9726fb28f78fba7c50efa5316c4bf2413cf8.tar.bz2
rneovim-9f1b9726fb28f78fba7c50efa5316c4bf2413cf8.zip
Merge pull request #872 'Add support for client-side RPC'
Diffstat (limited to 'src/nvim/api')
-rw-r--r--src/nvim/api/private/defs.h18
-rw-r--r--src/nvim/api/private/helpers.c4
-rw-r--r--src/nvim/api/private/helpers.h51
-rw-r--r--src/nvim/api/vim.c10
4 files changed, 69 insertions, 14 deletions
diff --git a/src/nvim/api/private/defs.h b/src/nvim/api/private/defs.h
index ee0fc02c4d..b049412014 100644
--- a/src/nvim/api/private/defs.h
+++ b/src/nvim/api/private/defs.h
@@ -65,8 +65,16 @@ typedef enum {
kObjectTypeInteger,
kObjectTypeFloat,
kObjectTypeString,
+ kObjectTypeBuffer,
+ kObjectTypeWindow,
+ kObjectTypeTabpage,
kObjectTypeArray,
- kObjectTypeDictionary
+ kObjectTypeDictionary,
+ kObjectTypePosition,
+ kObjectTypeStringArray,
+ kObjectTypeBufferArray,
+ kObjectTypeWindowArray,
+ kObjectTypeTabpageArray,
} ObjectType;
struct object {
@@ -76,8 +84,16 @@ struct object {
Integer integer;
Float floating;
String string;
+ Buffer buffer;
+ Window window;
+ Tabpage tabpage;
Array array;
Dictionary dictionary;
+ Position position;
+ StringArray stringarray;
+ BufferArray bufferarray;
+ WindowArray windowarray;
+ TabpageArray tabpagearray;
} data;
};
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c
index 30301e9368..024f0c2405 100644
--- a/src/nvim/api/private/helpers.c
+++ b/src/nvim/api/private/helpers.c
@@ -341,7 +341,7 @@ String cstr_to_string(const char *str)
};
}
-static bool object_to_vim(Object obj, typval_T *tv, Error *err)
+bool object_to_vim(Object obj, typval_T *tv, Error *err)
{
tv->v_type = VAR_UNKNOWN;
tv->v_lock = 0;
@@ -426,6 +426,8 @@ static bool object_to_vim(Object obj, typval_T *tv, Error *err)
}
tv->vval.v_dict->dv_refcount++;
break;
+ default:
+ abort();
}
return true;
diff --git a/src/nvim/api/private/helpers.h b/src/nvim/api/private/helpers.h
index e1e1a35490..f1b9dc3bc8 100644
--- a/src/nvim/api/private/helpers.h
+++ b/src/nvim/api/private/helpers.h
@@ -14,7 +14,9 @@
err->set = true; \
} while (0)
-#define BOOL_OBJ(b) ((Object) { \
+#define OBJECT_OBJ(o) o
+
+#define BOOLEAN_OBJ(b) ((Object) { \
.type = kObjectTypeBoolean, \
.data.boolean = b \
})
@@ -26,26 +28,59 @@
#define STRING_OBJ(s) ((Object) { \
.type = kObjectTypeString, \
- .data.string = cstr_to_string(s) \
+ .data.string = s \
})
-#define STRINGL_OBJ(d, s) ((Object) { \
- .type = kObjectTypeString, \
- .data.string = (String) { \
- .size = s, \
- .data = xmemdup(d, s) \
- }})
+#define BUFFER_OBJ(s) ((Object) { \
+ .type = kObjectTypeBuffer, \
+ .data.buffer = s \
+ })
+
+#define WINDOW_OBJ(s) ((Object) { \
+ .type = kObjectTypeWindow, \
+ .data.window = s \
+ })
+
+#define TABPAGE_OBJ(s) ((Object) { \
+ .type = kObjectTypeTabpage, \
+ .data.tabpage = s \
+ })
#define ARRAY_OBJ(a) ((Object) { \
.type = kObjectTypeArray, \
.data.array = a \
})
+#define STRINGARRAY_OBJ(a) ((Object) { \
+ .type = kObjectTypeStringArray, \
+ .data.stringarray = a \
+ })
+
+#define BUFFERARRAY_OBJ(a) ((Object) { \
+ .type = kObjectTypeBufferArray, \
+ .data.bufferarray = a \
+ })
+
+#define WINDOWARRAY_OBJ(a) ((Object) { \
+ .type = kObjectTypeWindowArray, \
+ .data.windowarray = a \
+ })
+
+#define TABPAGEARRAY_OBJ(a) ((Object) { \
+ .type = kObjectTypeTabpageArray, \
+ .data.tabpagearray = a \
+ })
+
#define DICTIONARY_OBJ(d) ((Object) { \
.type = kObjectTypeDictionary, \
.data.dictionary = d \
})
+#define POSITION_OBJ(p) ((Object) { \
+ .type = kObjectTypePosition, \
+ .data.position = p \
+ })
+
#define NIL ((Object) {.type = kObjectTypeNil})
#define PUT(dict, k, v) \
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index e7261e1096..fbeb42cf4b 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -424,8 +424,8 @@ void vim_set_current_tabpage(Tabpage tabpage, Error *err)
/// @param event The event type string
void vim_subscribe(uint64_t channel_id, String event)
{
- size_t length = (event.size < EVENT_MAXLEN ? event.size : EVENT_MAXLEN);
- char e[EVENT_MAXLEN + 1];
+ size_t length = (event.size < METHOD_MAXLEN ? event.size : METHOD_MAXLEN);
+ char e[METHOD_MAXLEN + 1];
memcpy(e, event.data, length);
e[length] = NUL;
channel_subscribe(channel_id, e);
@@ -437,8 +437,10 @@ void vim_subscribe(uint64_t channel_id, String event)
/// @param event The event type string
void vim_unsubscribe(uint64_t channel_id, String event)
{
- size_t length = (event.size < EVENT_MAXLEN ? event.size : EVENT_MAXLEN);
- char e[EVENT_MAXLEN + 1];
+ size_t length = (event.size < METHOD_MAXLEN ?
+ event.size :
+ METHOD_MAXLEN);
+ char e[METHOD_MAXLEN + 1];
memcpy(e, event.data, length);
e[length] = NUL;
channel_unsubscribe(channel_id, e);