lua: add a way to add repeatable key bindings

For these, autorepeat is enabled.
This commit is contained in:
wm4 2014-11-20 23:59:47 +01:00
parent 0a78a61d89
commit 00626817c8
2 changed files with 10 additions and 4 deletions

View File

@ -181,7 +181,7 @@ The ``mp`` module is preloaded, although it can be loaded manually with
Return the current mpv internal time in seconds as a number. This is
basically the system time, with an arbitrary offset.
``mp.add_key_binding(key, name|fn [,fn])``
``mp.add_key_binding(key, name|fn [,fn [,flags]])``
Register callback to be run on a key binding. The binding will be mapped to
the given ``key``, which is a string describing the physical key. This uses
the same key names as in input.conf, and also allows combinations
@ -198,6 +198,10 @@ The ``mp`` module is preloaded, although it can be loaded manually with
overwritten. You can omit the name, in which case a random name is generated
internally.
The last argument is used for additional flags. Currently, this includes
the string ``repeatable``, which enables key repeat for this specific
binding.
Internally, key bindings are dispatched via the ``script_message_to`` input
command and ``mp.register_script_message``.

View File

@ -105,8 +105,9 @@ local function update_key_bindings()
local cfg = ""
for k, v in pairs(key_bindings) do
if v.forced ~= def then
cfg = cfg .. v.key .. " script_message_to " .. mp.script_name
.. " " .. v.name .. "\n"
local flags = (v.repeatable and " repeatable") or ""
cfg = cfg .. v.key .. " " .. flags .. " script_message_to "
.. mp.script_name .. " " .. v.name .. "\n"
end
end
mp.input_define_section(section, cfg, flags)
@ -115,12 +116,13 @@ local function update_key_bindings()
end
end
local function add_binding(attrs, key, name, fn)
local function add_binding(attrs, key, name, fn, rp)
if (type(name) ~= "string") and (not fn) then
fn = name
name = "message" .. tostring(message_id)
message_id = message_id + 1
end
attrs.repeatable = rp == "repeatable"
attrs.key = key
attrs.name = name
key_bindings[name] = attrs