summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-02-25 21:04:04 +0100
committerwm4 <wm4@nowhere>2014-02-25 21:04:04 +0100
commit428ffb01cf4d8fdc3e2a61a9571388ae14e34f00 (patch)
treefcd730b7d0f8371bcdfc5ea1dafb0da2f3f8b8fa
parent2ea614ada6d31d2f9cebf7ea4eda05105b35e41d (diff)
downloadmpv-428ffb01cf4d8fdc3e2a61a9571388ae14e34f00.tar.bz2
mpv-428ffb01cf4d8fdc3e2a61a9571388ae14e34f00.tar.xz
config: add a --config-dir option to force config directory
Useful for slave-mode like uses, and not as radical as --no-config.
-rw-r--r--DOCS/man/en/options.rst11
-rw-r--r--options/options.c2
-rw-r--r--options/options.h1
-rw-r--r--options/path.c15
4 files changed, 29 insertions, 0 deletions
diff --git a/DOCS/man/en/options.rst b/DOCS/man/en/options.rst
index 5ddb681ed5..ca887eccfb 100644
--- a/DOCS/man/en/options.rst
+++ b/DOCS/man/en/options.rst
@@ -557,6 +557,15 @@ OPTIONS
It is advisable to use your graphics driver's color range option
instead, if available.
+``--config-dir=<path>``
+ Force a different configuration directory. If this is set, the given
+ directory is used to load configuration files, and all other configuration
+ directories are ignored. This means the global mpv configuration directory
+ as well as per-user directories are ignored, and overrides through
+ environment variables (``MPV_HOME``) are also ignored.
+
+ Note that the ``--no-config`` option takes precedence over this option.
+
``--consolecontrols``, ``--no-consolecontrols``
``--no-consolecontrols`` prevents the player from reading key events from
standard input. Useful when reading data from standard input. This is
@@ -1420,6 +1429,8 @@ OPTIONS
Files explicitly requested by command line options, like
``--include`` or ``--use-filedir-conf``, will still be loaded.
+ Also see ``--config-dir``.
+
``--no-idx``
Do not use index present in the file even if one is present.
diff --git a/options/options.c b/options/options.c
index 4bac77c7b7..08e22594d8 100644
--- a/options/options.c
+++ b/options/options.c
@@ -236,6 +236,8 @@ const m_option_t mp_opts[] = {
{"priority", &proc_priority, CONF_TYPE_STRING, 0, 0, 0, NULL},
#endif
OPT_FLAG("config", load_config, CONF_GLOBAL | CONF_NOCFG | CONF_PRE_PARSE),
+ OPT_STRING("config-dir", force_configdir,
+ CONF_GLOBAL | CONF_NOCFG | CONF_PRE_PARSE),
OPT_STRINGLIST("reset-on-next-file", reset_options, CONF_GLOBAL),
#if HAVE_LUA
diff --git a/options/options.h b/options/options.h
index 0b8ea0bded..daa6ab6fc5 100644
--- a/options/options.h
+++ b/options/options.h
@@ -106,6 +106,7 @@ typedef struct MPOpts {
int merge_files;
int quiet;
int load_config;
+ char *force_configdir;
int use_filedir_conf;
int stream_cache_size;
int stream_cache_def_size;
diff --git a/options/path.c b/options/path.c
index 5fb20010cf..d035d17c25 100644
--- a/options/path.c
+++ b/options/path.c
@@ -57,9 +57,14 @@ char *mp_find_config_file(void *talloc_ctx, struct mpv_global *global,
const char *filename)
{
struct MPOpts *opts = global->opts;
+
if (!opts->load_config)
return NULL;
+ // Always force the local config dir.
+ if (opts->force_configdir && opts->force_configdir[0])
+ return mp_find_user_config_file(talloc_ctx, global, filename);
+
for (int i = 0; config_lookup_functions[i] != NULL; i++) {
char *path = config_lookup_functions[i](talloc_ctx, global, filename);
if (!path) continue;
@@ -76,9 +81,15 @@ char *mp_find_user_config_file(void *talloc_ctx, struct mpv_global *global,
const char *filename)
{
struct MPOpts *opts = global->opts;
+
if (!opts->load_config)
return NULL;
+ if (opts->force_configdir && opts->force_configdir[0]) {
+ return mp_path_join(talloc_ctx, bstr0(opts->force_configdir),
+ bstr0(filename));
+ }
+
char *homedir = getenv("MPV_HOME");
char *configdir = NULL;
char *result = NULL;
@@ -105,6 +116,10 @@ char *mp_find_user_config_file(void *talloc_ctx, struct mpv_global *global,
char *mp_find_global_config_file(void *talloc_ctx, struct mpv_global *global,
const char *filename)
{
+ struct MPOpts *opts = global->opts;
+ if (!opts->load_config || (opts->force_configdir && opts->force_configdir[0]))
+ return NULL;
+
if (filename) {
return mp_path_join(talloc_ctx, bstr0(MPLAYER_CONFDIR), bstr0(filename));
} else {