LINUX.ORG.RU

LUA. Сочетания клавиш в кириллической раскладке

 


0

1

Имеется скрипт, который выводит простенькое меню, а перемещения по нему реализуются клавишами «j» и «k»:

...
local bookmarkerControls = {
j = function() jumpSlot(1) end,
k = function() jumpSlot(-1) end,
}
...

(клавиши эти менять на стрелки не хочу)
добавляю в этот блок кириллические символы:

о = function() jumpSlot(1) end,
л = function() jumpSlot(-1) end,

в результате скрипт работать перестаёт.
С другими скриптами такое срабатывало, но запись там была несколько по-другому организована.

Как добавить сочетания клавиш для русской раскладки?

Хз, как там в этом Луа всё устроено, но клавиши нужно по кейкодам отрабатывать, а не по значению. Т.к. имеет значение положение клавиши, а не что там на ней нарисованно и какая сейчас раскладка.

kostyarin_ ★★
()
Ответ на: комментарий от Dreamdrawer

Да я хз. Откуда вообще этот скрипт? Он встроен куда-то? Если встроен, то доки нужно к тому, куда он встроен смотреть.

kostyarin_ ★★
()
Ответ на: комментарий от kostyarin_

Это скрипт для плеера mpv. Реализует функционал закладок и навигации по ним.
GitHub - Bookmarker Menu
Как я упоминал выше, в других скриптах у меня получалось назначить кириллические символы в качестве горячих клавиш.
Например в этом скрипте: GitHub - Playlist Manager
Добавил «кириллические» биндинги:

function add_keybinds()
  mp.add_forced_key_binding('k', 'moveup', moveup, "repeatable")
  mp.add_forced_key_binding('j', 'movedown', movedown, "repeatable")
  mp.add_forced_key_binding('л', 'moveup', moveup, "repeatable")
  mp.add_forced_key_binding('о', 'movedown', movedown, "repeatable")
end

скрипт работает.
Делаю то же самое для скрипта Закладок

...
local bookmarkerControls = {
j = function() jumpSlot(1) end,
k = function() jumpSlot(-1) end,
о = function() jumpSlot(1) end,
л = function() jumpSlot(-1) end,
}
...

в этом случае скрипт работать отказывается. Визуально можно видеть некоторые отличия между способами указания горячих клавиш. Но я в Луа не шарю. Как правильно указать коды клавиш?

Dreamdrawer
() автор топика
Ответ на: комментарий от Dreamdrawer

Короче судя по всему нормального способа нет. Т.к. MPV в том числе читает и стандартный ввод, в зависимости, а у стандартного ввода нету никаких keycodes. И поэтому их они отказались реализовывать. А почему Ваш пример не работает, вероятно из-за разной кодировки в коде и на вводе. Но это предположение.

kostyarin_ ★★
()

Судя по [1] мп ожидает уникодные коды, а ты в исходнике пишешь в лучшем случае утф-8 строки. Попробуй вместо «о=func» писать «[1086]=func» и также для заглавной [2], если нужно. Как именно обертка конвертирует коды, и делает ли - мне уже лениво смотреть.

[1] https://github.com/mpv-player/mpv/blob/master/input/keycodes.h#L21
[2] https://www.unicode.org/charts/PDF/U0400.pdf

anonymous
()

Алсо, если луа ванильный, то он вроде бы не принимает не-аски идентификаторов, и надо [«фыва»]= вместо фыва=. Когда пишешь «не работает, перестает», в следующий раз не ленись сразу рассказать, как именно, тут телепатов нет.

anonymous
()
Ответ на: комментарий от Dreamdrawer

попробуй писать вместо л = ... в виде ["л"] = ... - первый способ подходит только для того, что является допустимым именем переменной, а в них lua кириллицу кажется не понимает

dumdum
()
Ответ на: комментарий от dumdum

Блин, пробовал ведь так, только с одинарными кавычками и не работало, а с двойными, оказывается, работает!
Спасибо большое!

  ["о"] = function() jumpSlot(1) end,
  ["л"] = function() jumpSlot(-1) end,

Проблема решена.

Dreamdrawer
() автор топика
Ответ на: комментарий от Dreamdrawer

Разницы в кавычках быть не может, и это легко проверить.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.