diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2014-06-24 13:47:36 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-06-24 13:47:36 -0300 |
commit | 9f1b9726fb28f78fba7c50efa5316c4bf2413cf8 (patch) | |
tree | 4fb8f7d5e1d7f4153b508e987f268c0222431152 /src/nvim/api | |
parent | e1264412f80ac8bab15e8e960b93a30ca9254418 (diff) | |
parent | 296da85198a7d5da36dbb2e6f213edb5da511635 (diff) | |
download | rneovim-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.h | 18 | ||||
-rw-r--r-- | src/nvim/api/private/helpers.c | 4 | ||||
-rw-r--r-- | src/nvim/api/private/helpers.h | 51 | ||||
-rw-r--r-- | src/nvim/api/vim.c | 10 |
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); |