mirror of
https://github.com/mpv-player/mpv
synced 2025-02-07 15:41:55 +00:00
lua: add mpv/lua directories to the lua path
Signed-off-by: wm4 <wm4@nowhere>
This commit is contained in:
parent
34fc0720f7
commit
cbfb6de667
@ -2,9 +2,14 @@ LUA SCRIPTING
|
||||
=============
|
||||
|
||||
mpv can load Lua scripts. Scripts in ``~/.mpv/lua/`` will be loaded on program
|
||||
start, or if passed to ``--lua``. mpv provides the built-in module ``mp``, which
|
||||
provides functions to send commands to the mpv core and to retrieve information
|
||||
about playback state, user settings, file information, and so on.
|
||||
start, or if passed to ``--lua``. mpv appends ``~/.mpv/lua`` to the end of
|
||||
lua's path so you can import them too. Since it's added to the end, don't name
|
||||
scripts you want to import the same as lua libraries because they will be
|
||||
overshadowed by them.
|
||||
|
||||
mpv provides the built-in module ``mp``, which provides functions to send
|
||||
commands to the mpv core and to retrieve information about playback state, user
|
||||
settings, file information, and so on.
|
||||
|
||||
These scripts can be used to control mpv in a similar way to slave mode.
|
||||
Technically, the Lua code uses the client API internally.
|
||||
|
25
player/lua.c
25
player/lua.c
@ -215,6 +215,28 @@ static int load_scripts(lua_State *L)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void set_path(lua_State *L)
|
||||
{
|
||||
void *tmp = talloc_new(NULL);
|
||||
|
||||
lua_getglobal(L, "package"); // package
|
||||
lua_getfield(L, -1, "path"); // package path
|
||||
const char *path = lua_tostring(L, -1);
|
||||
|
||||
char *newpath = talloc_strdup(tmp, path ? path : "");
|
||||
char **luadir = mp_find_all_config_files(tmp, get_mpctx(L)->global, "lua");
|
||||
for (int i = 0; luadir && luadir[i]; i++) {
|
||||
newpath = talloc_asprintf_append(newpath, ";%s",
|
||||
mp_path_join(tmp, bstr0(luadir[i]), bstr0("?.lua")));
|
||||
}
|
||||
|
||||
lua_pushstring(L, newpath); // package path newpath
|
||||
lua_setfield(L, -3, "path"); // package path
|
||||
lua_pop(L, 2); // -
|
||||
|
||||
talloc_free(tmp);
|
||||
}
|
||||
|
||||
static int run_lua(lua_State *L)
|
||||
{
|
||||
struct script_ctx *ctx = lua_touserdata(L, -1);
|
||||
@ -268,6 +290,9 @@ static int run_lua(lua_State *L)
|
||||
|
||||
assert(lua_gettop(L) == 0);
|
||||
|
||||
set_path(L);
|
||||
assert(lua_gettop(L) == 0);
|
||||
|
||||
// run this under an error handler that can do backtraces
|
||||
lua_pushcfunction(L, error_handler); // errf
|
||||
lua_pushcfunction(L, load_scripts); // errf fn
|
||||
|
Loading…
Reference in New Issue
Block a user