(mpv chat) Add alpharow->chat option and use forced key bindings
This commit is contained in:
parent
335bf3893b
commit
327fe86ea8
@ -13,6 +13,7 @@ local CHAT_MODE_CHATROOM = "Chatroom"
|
|||||||
local CHAT_MODE_SUBTITLE = "Subtitle"
|
local CHAT_MODE_SUBTITLE = "Subtitle"
|
||||||
local CHAT_MODE_SCROLLING = "Scrolling"
|
local CHAT_MODE_SCROLLING = "Scrolling"
|
||||||
local last_chat_time = 0
|
local last_chat_time = 0
|
||||||
|
local USE_ALPHA_ROWS_FOR_CHAT = True
|
||||||
|
|
||||||
local chat_log = {}
|
local chat_log = {}
|
||||||
|
|
||||||
@ -330,6 +331,9 @@ function set_active(active)
|
|||||||
repl_active = false
|
repl_active = false
|
||||||
mp.disable_key_bindings('repl-input')
|
mp.disable_key_bindings('repl-input')
|
||||||
end
|
end
|
||||||
|
if USE_ALPHA_ROWS_FOR_CHAT == True then
|
||||||
|
mp.enable_key_bindings('repl-alpha-input', 'allow-hide-cursor+allow-vo-dragging')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Show the repl if hidden and replace its contents with 'text'
|
-- Show the repl if hidden and replace its contents with 'text'
|
||||||
@ -395,6 +399,7 @@ end
|
|||||||
|
|
||||||
-- Insert a character at the current cursor position (' '-'~', Shift+Enter)
|
-- Insert a character at the current cursor position (' '-'~', Shift+Enter)
|
||||||
function handle_char_input(c)
|
function handle_char_input(c)
|
||||||
|
set_active(true)
|
||||||
if insert_mode then
|
if insert_mode then
|
||||||
line = line:sub(1, cursor - 1) .. c .. line:sub(next_utf8(line, cursor))
|
line = line:sub(1, cursor - 1) .. c .. line:sub(next_utf8(line, cursor))
|
||||||
else
|
else
|
||||||
@ -560,13 +565,27 @@ function add_repl_bindings(bindings)
|
|||||||
local key = binding[1]
|
local key = binding[1]
|
||||||
local fn = binding[2]
|
local fn = binding[2]
|
||||||
local name = '__repl_binding_' .. i
|
local name = '__repl_binding_' .. i
|
||||||
mp.add_key_binding(nil, name, fn, 'repeatable')
|
mp.add_forced_key_binding(nil, name, fn, 'repeatable')
|
||||||
cfg = cfg .. key .. ' script-binding ' .. mp.script_name .. '/' ..
|
cfg = cfg .. key .. ' script-binding ' .. mp.script_name .. '/' ..
|
||||||
name .. '\n'
|
name .. '\n'
|
||||||
end
|
end
|
||||||
mp.commandv('define-section', 'repl-input', cfg, 'force')
|
mp.commandv('define-section', 'repl-input', cfg, 'force')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function add_repl_alpharow_bindings(bindings)
|
||||||
|
local cfg = ''
|
||||||
|
for i, binding in ipairs(bindings) do
|
||||||
|
local key = binding[1]
|
||||||
|
local fn = binding[2]
|
||||||
|
local name = '__repl_alpha_binding_' .. i
|
||||||
|
mp.add_forced_key_binding(nil, name, fn, 'repeatable')
|
||||||
|
cfg = cfg .. key .. ' script-binding ' .. mp.script_name .. '/' ..
|
||||||
|
name .. '\n'
|
||||||
|
end
|
||||||
|
mp.commandv('define-section', 'repl-alpha-input', cfg, 'force')
|
||||||
|
mp.enable_key_bindings('repl-input', 'allow-hide-cursor+allow-vo-dragging')
|
||||||
|
end
|
||||||
|
|
||||||
-- Mapping from characters to mpv key names
|
-- Mapping from characters to mpv key names
|
||||||
local binding_name_map = {
|
local binding_name_map = {
|
||||||
[' '] = 'SPACE',
|
[' '] = 'SPACE',
|
||||||
@ -595,6 +614,7 @@ local bindings = {
|
|||||||
{ 'ctrl+v', function() paste(true) end },
|
{ 'ctrl+v', function() paste(true) end },
|
||||||
{ 'meta+v', function() paste(true) end },
|
{ 'meta+v', function() paste(true) end },
|
||||||
}
|
}
|
||||||
|
local alpharowbindings = {}
|
||||||
-- Add bindings for all the printable US-ASCII characters from ' ' to '~'
|
-- Add bindings for all the printable US-ASCII characters from ' ' to '~'
|
||||||
-- inclusive. Note, this is a pretty hacky way to do text input. mpv's input
|
-- inclusive. Note, this is a pretty hacky way to do text input. mpv's input
|
||||||
-- system was designed for single-key key bindings rather than text input, so
|
-- system was designed for single-key key bindings rather than text input, so
|
||||||
@ -605,6 +625,35 @@ for b = (' '):byte(), ('~'):byte() do
|
|||||||
local binding = binding_name_map[c] or c
|
local binding = binding_name_map[c] or c
|
||||||
bindings[#bindings + 1] = {binding, function() handle_char_input(c) end}
|
bindings[#bindings + 1] = {binding, function() handle_char_input(c) end}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function add_alpharowbinding(firstchar,lastchar)
|
||||||
|
for b = (firstchar):byte(), (lastchar):byte() do
|
||||||
|
local c = string.char(b)
|
||||||
|
local alphabinding = binding_name_map[c] or c
|
||||||
|
alpharowbindings[#alpharowbindings + 1] = {alphabinding, function() handle_char_input(c) end}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if USE_ALPHA_ROWS_FOR_CHAT == True then
|
||||||
|
add_alpharowbinding('a','z')
|
||||||
|
add_alpharowbinding('A','Z')
|
||||||
|
add_alpharowbinding('/','/')
|
||||||
|
add_alpharowbinding(':',':')
|
||||||
|
add_alpharowbinding('(',')')
|
||||||
|
add_alpharowbinding('{','}')
|
||||||
|
add_alpharowbinding(':',';')
|
||||||
|
add_alpharowbinding('<','>')
|
||||||
|
add_alpharowbinding(',','.')
|
||||||
|
add_alpharowbinding('|','|')
|
||||||
|
add_alpharowbinding('\\','\\')
|
||||||
|
add_alpharowbinding('?','?')
|
||||||
|
add_alpharowbinding('[',']')
|
||||||
|
add_alpharowbinding('#','#')
|
||||||
|
add_alpharowbinding('~','~')
|
||||||
|
add_alpharowbinding('\'','\'')
|
||||||
|
add_alpharowbinding('@','@')
|
||||||
|
add_repl_alpharow_bindings(alpharowbindings)
|
||||||
|
end
|
||||||
add_repl_bindings(bindings)
|
add_repl_bindings(bindings)
|
||||||
|
|
||||||
-- Add a script-message to show the REPL and fill it with the provided text
|
-- Add a script-message to show the REPL and fill it with the provided text
|
||||||
@ -612,8 +661,8 @@ mp.register_script_message('type', function(text)
|
|||||||
show_and_type(text)
|
show_and_type(text)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
mp.add_key_binding('enter', handle_enter)
|
mp.add_forced_key_binding('enter', handle_enter)
|
||||||
mp.add_key_binding('kp_enter', handle_enter)
|
mp.add_forced_key_binding('kp_enter', handle_enter)
|
||||||
mp.command('print-text "<get_syncplayintf_options>"')
|
mp.command('print-text "<get_syncplayintf_options>"')
|
||||||
|
|
||||||
function set_syncplayintf_options(input)
|
function set_syncplayintf_options(input)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user