From 428ffb01cf4d8fdc3e2a61a9571388ae14e34f00 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 25 Feb 2014 21:04:04 +0100 Subject: config: add a --config-dir option to force config directory Useful for slave-mode like uses, and not as radical as --no-config. --- DOCS/man/en/options.rst | 11 +++++++++++ options/options.c | 2 ++ options/options.h | 1 + options/path.c | 15 +++++++++++++++ 4 files changed, 29 insertions(+) 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=`` + 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 { -- cgit v1.2.3