lua: report key name for "complex" key bindings

This might make certain use cases less of a mess.
This commit is contained in:
wm4 2019-11-19 23:10:41 +01:00
parent 13815bf251
commit b08c8f50b5
2 changed files with 9 additions and 7 deletions

View File

@ -253,9 +253,10 @@ The ``mp`` module is preloaded, although it can be loaded manually with
events (as well as key repeat, if enabled), with the first
argument being a table. This table has an ``event`` entry, which
is set to one of the strings ``down``, ``repeat``, ``up`` or
``press`` (the latter if key up/down can't be tracked). It further
has an ``is_mouse`` entry, which tells whether the event was caused
by a mouse button.
``press`` (the latter if key up/down can't be tracked). The
``is_mouse`` entry tells whether the event was caused by a mouse
button. The ``key_name`` entry contains the name of they key that
triggered this, or ``nil`` if unknown or invoked artificially.
Internally, key bindings are dispatched via the ``script-message-to`` or
``script-binding`` input commands and ``mp.register_script_message``.

View File

@ -54,10 +54,10 @@ local function reserve_binding()
return "__keybinding" .. tostring(message_id)
end
local function dispatch_key_binding(name, state)
local function dispatch_key_binding(name, state, key_name)
local fn = dispatch_key_bindings[name]
if fn then
fn(name, state)
fn(name, state, key_name)
end
end
@ -176,10 +176,11 @@ local function add_binding(attrs, key, name, fn, rp)
["r"] = "repeat",
["p"] = "press",
}
key_cb = function(name, state)
key_cb = function(name, state, key_name)
fn({
event = key_states[state:sub(1, 1)] or "unknown",
is_mouse = state:sub(2, 2) == "m"
is_mouse = state:sub(2, 2) == "m",
key = key_name,
})
end
msg_cb = function()