mirror of https://github.com/mpv-player/mpv
input: introduce a pseudo key name that grabs all text input
The intended target for this is the mpv.repl script, which manually added every single ASCII key as a separate key binding. This provides a simpler mechanism, that will catch any kind of text input. Due to its special nature, explicitly do not give a guarantee for compatibility; thus the warning in input.rst.
This commit is contained in:
parent
a098e98198
commit
0a6c09b96f
|
@ -152,6 +152,11 @@ Comments on some symbolic names:
|
||||||
Pseudo-key that matches any unmapped key. (You should probably avoid this
|
Pseudo-key that matches any unmapped key. (You should probably avoid this
|
||||||
if possible, because it might change behavior or get removed in the future.)
|
if possible, because it might change behavior or get removed in the future.)
|
||||||
|
|
||||||
|
``ANY_UNICODE``
|
||||||
|
Pseudo-key that matches any key that produces text. (You should probably
|
||||||
|
avoid this if possible, because it might change behavior or get removed in
|
||||||
|
the future.)
|
||||||
|
|
||||||
Flat command syntax
|
Flat command syntax
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
|
|
@ -456,7 +456,12 @@ static mp_cmd_t *get_cmd_from_keys(struct input_ctx *ictx, char *force_section,
|
||||||
if (ictx->opts->test)
|
if (ictx->opts->test)
|
||||||
return handle_test(ictx, code);
|
return handle_test(ictx, code);
|
||||||
|
|
||||||
struct cmd_bind *cmd = find_any_bind_for_key(ictx, force_section, code);
|
struct cmd_bind *cmd = NULL;
|
||||||
|
|
||||||
|
if (MP_KEY_IS_UNICODE(code))
|
||||||
|
cmd = find_any_bind_for_key(ictx, force_section, MP_KEY_ANY_UNICODE);
|
||||||
|
if (!cmd)
|
||||||
|
cmd = find_any_bind_for_key(ictx, force_section, code);
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
cmd = find_any_bind_for_key(ictx, force_section, MP_KEY_UNMAPPED);
|
cmd = find_any_bind_for_key(ictx, force_section, MP_KEY_UNMAPPED);
|
||||||
if (!cmd) {
|
if (!cmd) {
|
||||||
|
|
|
@ -208,6 +208,7 @@ static const struct key_name key_names[] = {
|
||||||
{ MP_KEY_MOUSE_ENTER, "MOUSE_ENTER" },
|
{ MP_KEY_MOUSE_ENTER, "MOUSE_ENTER" },
|
||||||
|
|
||||||
{ MP_KEY_UNMAPPED, "UNMAPPED" },
|
{ MP_KEY_UNMAPPED, "UNMAPPED" },
|
||||||
|
{ MP_KEY_ANY_UNICODE, "ANY_UNICODE" },
|
||||||
|
|
||||||
{ 0, NULL }
|
{ 0, NULL }
|
||||||
};
|
};
|
||||||
|
@ -271,8 +272,7 @@ static void mp_input_append_key_name(bstr *buf, int key)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// printable, and valid unicode range
|
if (MP_KEY_IS_UNICODE(key)) {
|
||||||
if (key >= 32 && key <= 0x10FFFF) {
|
|
||||||
mp_append_utf8_bstr(NULL, buf, key);
|
mp_append_utf8_bstr(NULL, buf, key);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,10 @@
|
||||||
// Special keys come after this.
|
// Special keys come after this.
|
||||||
#define MP_KEY_BASE (1<<21)
|
#define MP_KEY_BASE (1<<21)
|
||||||
|
|
||||||
|
// printable, and valid unicode range (we don't care too much about whether
|
||||||
|
// certain sub-ranges are reserved and disallowed, like surrogate pairs)
|
||||||
|
#define MP_KEY_IS_UNICODE(key) ((key) >= 32 && (key) <= 0x10FFFF)
|
||||||
|
|
||||||
#define MP_KEY_ENTER 13
|
#define MP_KEY_ENTER 13
|
||||||
#define MP_KEY_TAB 9
|
#define MP_KEY_TAB 9
|
||||||
|
|
||||||
|
@ -211,6 +215,7 @@
|
||||||
|
|
||||||
// No input source should generate this.
|
// No input source should generate this.
|
||||||
#define MP_KEY_UNMAPPED (MP_KEY_INTERN+4)
|
#define MP_KEY_UNMAPPED (MP_KEY_INTERN+4)
|
||||||
|
#define MP_KEY_ANY_UNICODE (MP_KEY_INTERN+5)
|
||||||
|
|
||||||
// Emit a command even on key-up (normally key-up is ignored). This means by
|
// Emit a command even on key-up (normally key-up is ignored). This means by
|
||||||
// default they binding will be triggered on key-up instead of key-down.
|
// default they binding will be triggered on key-up instead of key-down.
|
||||||
|
|
Loading…
Reference in New Issue