mirror of https://github.com/mpv-player/mpv
js: require: directory-scripts: first look at <dir>/modules/
Also, add the function mp.get_script_directory() to let scripts know if they're loaded as a directory and where.
This commit is contained in:
parent
68a1b47d4d
commit
756960bf3c
|
@ -28,6 +28,8 @@ Interface changes
|
|||
- directories in ~/.mpv/scripts/ (or equivalent) now have special semantics
|
||||
(see mpv Lua scripting docs)
|
||||
- names starting with "." in ~/.mpv/scripts/ (or equivalent) are now ignored
|
||||
- js modules: ~~/scripts/modules.js/ is no longer used, global paths can be
|
||||
set with custom init (see docs), dir-scripts first look at <dir>/modules/
|
||||
--- mpv 0.32.0 ---
|
||||
- change behavior when using legacy option syntax with options that start
|
||||
with two dashes (``--`` instead of a ``-``). Now, using the recommended
|
||||
|
|
|
@ -139,6 +139,8 @@ success, ``fn`` is called always a-sync, ``error`` is empty string on success.
|
|||
|
||||
``mp.get_script_name()``
|
||||
|
||||
``mp.get_script_directory()``
|
||||
|
||||
``mp.osd_message(text [,duration])``
|
||||
|
||||
``mp.get_wakeup_pipe()``
|
||||
|
@ -309,7 +311,8 @@ or ``~/x``. Otherwise it's considered a global module id and searched according
|
|||
load ``x.js`` at one of the array paths, and id ``foo/x`` tries to load ``x.js``
|
||||
inside dir ``foo`` at one of the paths.
|
||||
|
||||
The ``mp.module_paths`` array is empty by default.
|
||||
The ``mp.module_paths`` array is empty by default except for scripts which are
|
||||
loaded as a directory where it contains one item - ``<directory>/modules/``.
|
||||
``mp.module_paths`` may be updated from a script (preferably via custom init -
|
||||
see below) which will affect future calls to ``require`` for global module id's
|
||||
which are not already loaded/cached.
|
||||
|
|
|
@ -59,6 +59,7 @@ static const char *const builtin_files[][3] = {
|
|||
// Represents a loaded script. Each has its own js state.
|
||||
struct script_ctx {
|
||||
const char *filename;
|
||||
const char *path; // NULL if single file
|
||||
struct mpv_handle *client;
|
||||
struct MPContext *mpctx;
|
||||
struct mp_log *log;
|
||||
|
@ -477,6 +478,7 @@ static int s_load_javascript(struct mp_script_args *args)
|
|||
.log = args->log,
|
||||
.last_error_str = talloc_strdup(ctx, "Cannot initialize JavaScript"),
|
||||
.filename = args->filename,
|
||||
.path = args->path,
|
||||
};
|
||||
|
||||
int r = -1;
|
||||
|
@ -1281,6 +1283,11 @@ static void add_functions(js_State *J, struct script_ctx *ctx)
|
|||
js_pushstring(J, ctx->filename);
|
||||
js_setproperty(J, -2, "script_file");
|
||||
|
||||
if (ctx->path) {
|
||||
js_pushstring(J, ctx->path);
|
||||
js_setproperty(J, -2, "script_path");
|
||||
}
|
||||
|
||||
js_pop(J, 2); // leave the stack as we got it
|
||||
}
|
||||
|
||||
|
|
|
@ -463,6 +463,8 @@ function process_timers() {
|
|||
*********************************************************************/
|
||||
|
||||
mp.module_paths = []; // global modules search paths
|
||||
if (mp.script_path !== undefined) // loaded as a directory
|
||||
mp.module_paths.push(mp.utils.join_path(mp.script_path, "modules"));
|
||||
|
||||
// Internal meta top-dirs. Users should not rely on these names.
|
||||
var MODULES_META = "~~modules",
|
||||
|
@ -645,6 +647,7 @@ mp.options = { read_options: read_options };
|
|||
g.print = mp.msg.info; // convenient alias
|
||||
mp.get_script_name = function() { return mp.script_name };
|
||||
mp.get_script_file = function() { return mp.script_file };
|
||||
mp.get_script_directory = function() { return mp.script_path };
|
||||
mp.get_time = function() { return mp.get_time_ms() / 1000 };
|
||||
mp.utils.getcwd = function() { return mp.get_property("working-directory") };
|
||||
mp.dispatch_event = dispatch_event;
|
||||
|
|
Loading…
Reference in New Issue