summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-07-25 23:36:01 +0200
committerwm4 <wm4@nowhere>2013-07-26 00:19:15 +0200
commitd1d6db25c0e68338b79735016e6079335ffea12b (patch)
treee079dda71df21e5237c71e9d58d5413a5f959585
parentad1641c0dab6cdd7bac52d261bcc03d81d14cc21 (diff)
downloadmpv-d1d6db25c0e68338b79735016e6079335ffea12b.tar.bz2
mpv-d1d6db25c0e68338b79735016e6079335ffea12b.tar.xz
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.
-rw-r--r--DOCS/man/en/input.rst1
-rw-r--r--core/command.c27
2 files changed, 28 insertions, 0 deletions
diff --git a/DOCS/man/en/input.rst b/DOCS/man/en/input.rst
index 804d37d976..9a7c9fc4a1 100644
--- a/DOCS/man/en/input.rst
+++ b/DOCS/man/en/input.rst
@@ -469,6 +469,7 @@ Name W Comment
``track-list`` list of audio/video/sub tracks, cur. entr. marked
``chapter-list`` list of chapters, current entry marked
``quvi-format`` x see ``--quvi-format``
+``options/name`` read-only access to value of option ``--name``
=============================== = ==================================================
Property Expansion
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},
};