diff options
author | wm4 <wm4@nowhere> | 2014-10-11 00:25:07 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-10-11 00:33:09 +0200 |
commit | c5c21abf78811d1458dc4ade95e5f04cb4b14733 (patch) | |
tree | e1ad8e18ee2cf41e23f1742cfd3aaed628e72ee0 /player | |
parent | 63e2b6c4aef2afd5879b3cfb2b172ee05f17f765 (diff) | |
download | mpv-c5c21abf78811d1458dc4ade95e5f04cb4b14733.tar.bz2 mpv-c5c21abf78811d1458dc4ade95e5f04cb4b14733.tar.xz |
lua: add command_native() function
This is the Lua equivalent of mpv_command_node().
Diffstat (limited to 'player')
-rw-r--r-- | player/lua.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/player/lua.c b/player/lua.c index 8aa6b594fb..ef8dc1ca7d 100644 --- a/player/lua.c +++ b/player/lua.c @@ -891,6 +891,28 @@ static int script_raw_unobserve_property(lua_State *L) return 1; } +static int script_command_native(lua_State *L) +{ + struct script_ctx *ctx = get_ctx(L); + struct mpv_node node; + struct mpv_node result; + void *tmp = talloc_new(NULL); + makenode(tmp, &node, L, 1); + int err = mpv_command_node(ctx->client, &node, &result); + talloc_free(tmp); + const char *errstr = mpv_error_string(err); + if (err >= 0) { + bool ok = pushnode(L, &result, 50); + mpv_free_node_contents(&result); + if (ok) + return 1; + errstr = "command result too large"; + } + lua_pushvalue(L, 2); + lua_pushstring(L, errstr); + return 2; +} + static int script_set_osd_ass(lua_State *L) { struct MPContext *mpctx = get_mpctx(L); @@ -1117,6 +1139,7 @@ static const struct fn_entry main_fns[] = { FN_ENTRY(find_config_file), FN_ENTRY(command), FN_ENTRY(commandv), + FN_ENTRY(command_native), FN_ENTRY(get_property_bool), FN_ENTRY(get_property_number), FN_ENTRY(get_property_native), |