From 00626817c8ac4e91f95141fdc7f8cf39c38f820d Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 20 Nov 2014 23:59:47 +0100 Subject: lua: add a way to add repeatable key bindings For these, autorepeat is enabled. --- DOCS/man/lua.rst | 6 +++++- player/lua/defaults.lua | 8 +++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/DOCS/man/lua.rst b/DOCS/man/lua.rst index fbba495a4f..e01754b3ef 100644 --- a/DOCS/man/lua.rst +++ b/DOCS/man/lua.rst @@ -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``. diff --git a/player/lua/defaults.lua b/player/lua/defaults.lua index 6708f06470..f995dd40d2 100644 --- a/player/lua/defaults.lua +++ b/player/lua/defaults.lua @@ -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 -- cgit v1.2.3