1
0
mirror of https://github.com/mpv-player/mpv synced 2025-04-07 10:02:50 +00:00

lua: add mp.get_env_list() function

Because Lua is too stupid to provide this directly, and I sort of need
it.
This commit is contained in:
wm4 2020-07-17 01:36:33 +02:00
parent 0279a44d93
commit 0e7f53a5bc
3 changed files with 20 additions and 0 deletions

View File

@ -539,6 +539,9 @@ Remember to quote string arguments in input.conf (see `Flat command syntax`_).
useless.) The format of the list is as in the ``execle()`` syscall. Each useless.) The format of the list is as in the ``execle()`` syscall. Each
string item defines an environment variable as in ``NANME=VALUE``. string item defines an environment variable as in ``NANME=VALUE``.
On Lua, you may use ``utils.get_env_list()`` to retrieve the current
environment if you e.g. simply want to add a new variable.
The command returns the following result (as ``MPV_FORMAT_NODE_MAP``): The command returns the following result (as ``MPV_FORMAT_NODE_MAP``):
``status`` (``MPV_FORMAT_INT64``) ``status`` (``MPV_FORMAT_INT64``)

View File

@ -826,6 +826,10 @@ strictly part of the guaranteed API.
Returns the process ID of the running mpv process. This can be used to identify Returns the process ID of the running mpv process. This can be used to identify
the calling mpv when launching (detached) subprocesses. the calling mpv when launching (detached) subprocesses.
``utils.get_env_list()``
Returns the C environment as a list of strings. (Do not confuse this with
the Lua "environment", which is an unrelated concept.)
``utils.parse_json(str [, trail])`` ``utils.parse_json(str [, trail])``
Parses the given string argument as JSON, and returns it as a Lua table. On Parses the given string argument as JSON, and returns it as a Lua table. On
error, returns ``nil, error``. (Currently, ``error`` is just a string error, returns ``nil, error``. (Currently, ``error`` is just a string

View File

@ -53,6 +53,8 @@
#include "client.h" #include "client.h"
#include "libmpv/client.h" #include "libmpv/client.h"
extern char **environ;
// List of builtin modules and their contents as strings. // List of builtin modules and their contents as strings.
// All these are generated from player/lua/*.lua // All these are generated from player/lua/*.lua
static const char * const builtin_lua_scripts[][2] = { static const char * const builtin_lua_scripts[][2] = {
@ -1185,6 +1187,16 @@ static int script_format_json(lua_State *L, void *tmp)
return 2; return 2;
} }
static int script_get_env_list(lua_State *L)
{
lua_newtable(L); // table
for (int n = 0; environ && environ[n]; n++) {
lua_pushstring(L, environ[n]); // table str
lua_rawseti(L, -2, n + 1); // table
}
return 1;
}
#define FN_ENTRY(name) {#name, script_ ## name, 0} #define FN_ENTRY(name) {#name, script_ ## name, 0}
#define AF_ENTRY(name) {#name, 0, script_ ## name} #define AF_ENTRY(name) {#name, 0, script_ ## name}
struct fn_entry { struct fn_entry {
@ -1226,6 +1238,7 @@ static const struct fn_entry main_fns[] = {
FN_ENTRY(get_wakeup_pipe), FN_ENTRY(get_wakeup_pipe),
FN_ENTRY(raw_hook_add), FN_ENTRY(raw_hook_add),
FN_ENTRY(raw_hook_continue), FN_ENTRY(raw_hook_continue),
FN_ENTRY(get_env_list),
{0} {0}
}; };