summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2020-07-17 01:36:33 +0200
committerwm4 <wm4@nowhere>2020-07-20 21:02:17 +0200
commit0e7f53a5bc76cc3f042791b5f8923563842224a3 (patch)
tree45f9991c00a80151ea881b01434e04f21d4ae0c1
parent0279a44d93a378fbdff393d6568a691817f83518 (diff)
downloadmpv-0e7f53a5bc76cc3f042791b5f8923563842224a3.tar.bz2
mpv-0e7f53a5bc76cc3f042791b5f8923563842224a3.tar.xz
lua: add mp.get_env_list() function
Because Lua is too stupid to provide this directly, and I sort of need it.
-rw-r--r--DOCS/man/input.rst3
-rw-r--r--DOCS/man/lua.rst4
-rw-r--r--player/lua.c13
3 files changed, 20 insertions, 0 deletions
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst
index cf1bb5b4e9..eee5ba8614 100644
--- a/DOCS/man/input.rst
+++ b/DOCS/man/input.rst
@@ -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
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``):
``status`` (``MPV_FORMAT_INT64``)
diff --git a/DOCS/man/lua.rst b/DOCS/man/lua.rst
index 9499847b58..88fb4cb7ce 100644
--- a/DOCS/man/lua.rst
+++ b/DOCS/man/lua.rst
@@ -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
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])``
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
diff --git a/player/lua.c b/player/lua.c
index b37a6cd84f..668552741c 100644
--- a/player/lua.c
+++ b/player/lua.c
@@ -53,6 +53,8 @@
#include "client.h"
#include "libmpv/client.h"
+extern char **environ;
+
// List of builtin modules and their contents as strings.
// All these are generated from player/lua/*.lua
static const char * const builtin_lua_scripts[][2] = {
@@ -1185,6 +1187,16 @@ static int script_format_json(lua_State *L, void *tmp)
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 AF_ENTRY(name) {#name, 0, script_ ## name}
struct fn_entry {
@@ -1226,6 +1238,7 @@ static const struct fn_entry main_fns[] = {
FN_ENTRY(get_wakeup_pipe),
FN_ENTRY(raw_hook_add),
FN_ENTRY(raw_hook_continue),
+ FN_ENTRY(get_env_list),
{0}
};