js: custom-init: use ~~/init.js instead of ~~/.init.js (dot)

mpv doesn't have other dot files in its config dir, and it also
shouldn't be "invisible".

The new name ~~/init.js now replaces ~~/.init.js

While mpv usually deprecates things before outright removing them,
in this case the old (dot) name is replaced without deprecation:
- It's a bad idea to execute hidden scripts, even if at a config dir,
  and we don't want to do that for the next release cycle too.
- We warn if the old (dot) name exists and the new name doesn't,
  which should be reasonably visible for affected users.
- It's likely niche enough to not cause too much pain.

If for some reason both names are needed, e.g. when using also an old
mpv versions, then the old name could be symlinked to the new one, or
simply have one line: `require("~~/init")` to load the new name, while
a new mpv version will load (only) the new name without warning.
This commit is contained in:
Avi Halachmi (:avih) 2021-10-12 16:35:18 +03:00 committed by avih
parent e13fe1299d
commit 4703b74e6c
3 changed files with 15 additions and 7 deletions

View File

@ -47,6 +47,8 @@ Interface changes
bindings during start-up (default: yes).
- add ``track-list/N/image`` sub-property
- remove `--opengl-restrict` option
- js custom-init: use filename ~~/init.js instead of ~~/.init.js (dot)
--- mpv 0.33.0 ---
- add `--d3d11-exclusive-fs` flag to enable D3D11 exclusive fullscreen mode
when the player enters fullscreen.

View File

@ -336,7 +336,7 @@ Custom initialization
---------------------
After mpv initializes the JavaScript environment for a script but before it
loads the script - it tries to run the file ``.init.js`` at the root of the mpv
loads the script - it tries to run the file ``init.js`` at the root of the mpv
configuration directory. Code at this file can update the environment further
for all scripts. E.g. if it contains ``mp.module_paths.push("/foo")`` then
``require`` at all scripts will search global module id's also at ``/foo``
@ -345,6 +345,8 @@ paths - like ``<script-dir>/modules`` for scripts which load from a directory).
The custom-init file is ignored if mpv is invoked with ``--no-config``.
Before mpv 0.34, the file name was ``.init.js`` (with dot) at the same dir.
The event loop
--------------

View File

@ -769,12 +769,16 @@ g.mp_event_loop = function mp_event_loop() {
} while (mp.keep_running);
};
})(this)
// let the user extend us, e.g. by adding items to mp.module_paths
// (unlike e.g. read_file, file_info doesn't expand meta-paths)
if (mp.get_property_bool("config") && // --no-config disables custom init
mp.utils.file_info(mp.utils.get_user_path("~~/.init.js")))
{
require("~~/.init");
if (mp.get_property_bool("config")) { // --no-config disables custom init
// file_info doesn't expand meta-paths (other file functions do)
var file_info = mp.utils.file_info, user_path = mp.utils.get_user_path;
if (file_info(user_path("~~/init.js")))
require("~~/init");
else if (file_info(user_path("~~/.init.js")))
mp.msg.warn("Config file ~~/.init.js is ignored. Use ~~/init.js");
}
})(this)