From d1d6db25c0e68338b79735016e6079335ffea12b Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 25 Jul 2013 23:36:01 +0200 Subject: command: add pseudo-property that allows you to read global options The "options" pseudo-property allows reading global like this: show_text ${options/name} Where "name" maps to the option "--name". This allows retrieving option values that are not properties. Write-access is not possible: this is reserved for normal properties. Note: it is possible that we'll change this again, and don't require the "options/" prefix to access options. --- core/command.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'core/command.c') diff --git a/core/command.c b/core/command.c index 8d574242a2..bb8f251038 100644 --- a/core/command.c +++ b/core/command.c @@ -1567,6 +1567,31 @@ static int mp_property_alias(m_option_t *prop, int action, void *arg, return r; } +static int mp_property_options(m_option_t *prop, int action, void *arg, + MPContext *mpctx) +{ + if (action != M_PROPERTY_KEY_ACTION) + return M_PROPERTY_NOT_IMPLEMENTED; + + struct m_property_action_arg *ka = arg; + + struct m_config_option *opt = m_config_get_co(mpctx->mconfig, + bstr0(ka->key)); + if (!opt) + return M_PROPERTY_UNKNOWN; + + switch (ka->action) { + case M_PROPERTY_GET: + m_option_copy(opt->opt, ka->arg, opt->data); + return M_PROPERTY_OK; + case M_PROPERTY_GET_TYPE: + *(struct m_option *)ka->arg = *opt->opt; + return M_PROPERTY_OK; + } + + return M_PROPERTY_NOT_IMPLEMENTED; +} + // Use option-to-property-bridge. (The property and option have the same names.) #define M_OPTION_PROPERTY(name) \ {(name), mp_property_generic_option, &m_option_type_dummy, 0, 0, 0, (name)} @@ -1737,6 +1762,8 @@ static const m_option_t mp_properties[] = { M_PROPERTY_ALIAS("audio", "aid"), M_PROPERTY_ALIAS("sub", "sid"), + { "options", mp_property_options, &m_option_type_dummy }, + {0}, }; -- cgit v1.2.3