mirror of https://github.com/mpv-player/mpv
options: provide a way for --vf to print custom help
Useful in rather special situations. See following commits.
This commit is contained in:
parent
acfeb869a3
commit
8260590346
|
@ -2068,9 +2068,10 @@ static int get_obj_param(bstr opt_name, bstr obj_name, struct m_config *config,
|
||||||
// If config is NULL, all parameters are accepted without checking.
|
// If config is NULL, all parameters are accepted without checking.
|
||||||
// _ret set to NULL can be used for checking-only.
|
// _ret set to NULL can be used for checking-only.
|
||||||
// flags can contain any M_SETOPT_* flag.
|
// flags can contain any M_SETOPT_* flag.
|
||||||
int m_obj_parse_sub_config(struct bstr opt_name, struct bstr name,
|
static int m_obj_parse_sub_config(struct bstr opt_name, struct bstr name,
|
||||||
struct bstr *pstr, struct m_config *config,
|
struct bstr *pstr, struct m_config *config,
|
||||||
int flags, char ***ret)
|
int flags, void (*print_help_fn)(void),
|
||||||
|
char ***ret)
|
||||||
{
|
{
|
||||||
int nold = 0;
|
int nold = 0;
|
||||||
char **args = NULL;
|
char **args = NULL;
|
||||||
|
@ -2120,6 +2121,8 @@ int m_obj_parse_sub_config(struct bstr opt_name, struct bstr name,
|
||||||
|
|
||||||
print_help: ;
|
print_help: ;
|
||||||
if (config) {
|
if (config) {
|
||||||
|
if (print_help_fn)
|
||||||
|
print_help_fn();
|
||||||
m_config_print_option_list(config);
|
m_config_print_option_list(config);
|
||||||
} else {
|
} else {
|
||||||
mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %.*s doesn't exist.\n",
|
mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %.*s doesn't exist.\n",
|
||||||
|
@ -2179,7 +2182,7 @@ static int parse_obj_settings(struct bstr opt, struct bstr *pstr,
|
||||||
struct m_config *config = m_config_from_obj_desc_noalloc(NULL, &desc);
|
struct m_config *config = m_config_from_obj_desc_noalloc(NULL, &desc);
|
||||||
bstr s = bstr0(desc.init_options);
|
bstr s = bstr0(desc.init_options);
|
||||||
m_obj_parse_sub_config(opt, str, &s, config,
|
m_obj_parse_sub_config(opt, str, &s, config,
|
||||||
M_SETOPT_CHECK_ONLY, &plist);
|
M_SETOPT_CHECK_ONLY, NULL, &plist);
|
||||||
assert(s.len == 0);
|
assert(s.len == 0);
|
||||||
talloc_free(config);
|
talloc_free(config);
|
||||||
}
|
}
|
||||||
|
@ -2192,9 +2195,13 @@ static int parse_obj_settings(struct bstr opt, struct bstr *pstr,
|
||||||
bstr param = bstr_splice(*pstr, 0, next);
|
bstr param = bstr_splice(*pstr, 0, next);
|
||||||
*pstr = bstr_cut(*pstr, next);
|
*pstr = bstr_cut(*pstr, next);
|
||||||
if (!bstrcmp0(param, "help")) {
|
if (!bstrcmp0(param, "help")) {
|
||||||
|
if (desc.print_help) {
|
||||||
|
desc.print_help();
|
||||||
|
} else {
|
||||||
mp_msg(MSGT_CFGPARSER, MSGL_WARN,
|
mp_msg(MSGT_CFGPARSER, MSGL_WARN,
|
||||||
"Option %.*s: %.*s has no option description.\n",
|
"Option %.*s: %.*s has no option description.\n",
|
||||||
BSTR_P(opt), BSTR_P(str));
|
BSTR_P(opt), BSTR_P(str));
|
||||||
|
}
|
||||||
return M_OPT_EXIT - 1;
|
return M_OPT_EXIT - 1;
|
||||||
}
|
}
|
||||||
if (_ret) {
|
if (_ret) {
|
||||||
|
@ -2207,7 +2214,7 @@ static int parse_obj_settings(struct bstr opt, struct bstr *pstr,
|
||||||
if (!skip)
|
if (!skip)
|
||||||
config = m_config_from_obj_desc_noalloc(NULL, &desc);
|
config = m_config_from_obj_desc_noalloc(NULL, &desc);
|
||||||
r = m_obj_parse_sub_config(opt, str, pstr, config,
|
r = m_obj_parse_sub_config(opt, str, pstr, config,
|
||||||
M_SETOPT_CHECK_ONLY,
|
M_SETOPT_CHECK_ONLY, desc.print_help,
|
||||||
_ret ? &plist : NULL);
|
_ret ? &plist : NULL);
|
||||||
talloc_free(config);
|
talloc_free(config);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
|
|
@ -110,8 +110,10 @@ struct m_obj_desc {
|
||||||
// This member is usually set by m_obj_list_find() only, and read by the
|
// This member is usually set by m_obj_list_find() only, and read by the
|
||||||
// option parser. It's not used anywhere else.
|
// option parser. It's not used anywhere else.
|
||||||
const char *init_options;
|
const char *init_options;
|
||||||
// Don't list entries with "help"
|
// Don't list entry with "help"
|
||||||
bool hidden;
|
bool hidden;
|
||||||
|
// Callback to print custom help if "help" is passed
|
||||||
|
void (*print_help)(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Extra definition needed for \ref m_option_type_obj_settings_list options.
|
// Extra definition needed for \ref m_option_type_obj_settings_list options.
|
||||||
|
@ -150,10 +152,6 @@ typedef struct m_obj_settings {
|
||||||
*/
|
*/
|
||||||
extern const m_option_type_t m_option_type_obj_settings_list;
|
extern const m_option_type_t m_option_type_obj_settings_list;
|
||||||
|
|
||||||
int m_obj_parse_sub_config(struct bstr opt_name, struct bstr name,
|
|
||||||
struct bstr *pstr, struct m_config *config,
|
|
||||||
int flags, char ***ret);
|
|
||||||
|
|
||||||
struct m_opt_choice_alternatives {
|
struct m_opt_choice_alternatives {
|
||||||
char *name;
|
char *name;
|
||||||
int value;
|
int value;
|
||||||
|
|
Loading…
Reference in New Issue