1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
-- ru-langmap: use QWERTY motions while Russian layout is active,
-- and stop Ctrl/Alt+arrows / Shift+Enter from leaking into the buffer.
-- No upstream plugin exists for this, so this is a local one.
local M = {}
local function modes(...)
return { ... }
end
-- terminal keys the editor has no bindings for
function M.stray_keys()
local nop = function() end
for _, mode in ipairs(modes(vis.modes.NORMAL, vis.modes.VISUAL, vis.modes.OPERATOR_PENDING)) do
vis:map(mode, "<C-Left>", "b")
vis:map(mode, "<C-Right>", "w")
vis:map(mode, "<M-Left>", "b")
vis:map(mode, "<M-Right>", "w")
vis:map(mode, "<M-Up>", "<vis-nop>")
vis:map(mode, "<M-Down>", "<vis-nop>")
vis:map(mode, "<S-Enter>", "<Enter>")
end
for _, mode in ipairs(modes(vis.modes.INSERT, vis.modes.REPLACE, vis.modes.PROMPT)) do
vis:map(mode, "<C-Left>", nop)
vis:map(mode, "<C-Right>", nop)
vis:map(mode, "<M-Left>", nop)
vis:map(mode, "<M-Right>", nop)
vis:map(mode, "<M-Up>", nop)
vis:map(mode, "<M-Down>", nop)
vis:map(mode, "<S-Enter>", "<Enter>")
end
end
-- ЙЦУКЕН -> QWERTY for modal editing (insert mode stays untouched)
function M.langmap()
local ru_en = {
q="й", w="ц", e="у", r="к", t="е", y="н", u="г", i="ш", o="щ", p="з",
["["]="х", ["]"]="ъ",
a="ф", s="ы", d="в", f="а", g="п", h="р", j="о", k="л", l="д",
[";"]="ж", ["'"]="э",
z="я", x="ч", c="с", v="м", b="и", n="т", m="ь",
[","]="б", ["."]="ю",
}
local upper_ru = {
Й="Q", Ц="W", У="E", К="R", Е="T", Н="Y", Г="U", Ш="I", Щ="O", З="P",
Х="[", Ъ="]",
Ф="A", Ы="S", В="D", А="F", П="G", Р="H", О="J", Л="K", Д="L",
Ж=";", Э="'",
Я="Z", Ч="X", С="C", М="V", И="B", Т="N", Ь="M",
Б=",", Ю=".",
}
for _, mode in ipairs(modes(vis.modes.NORMAL, vis.modes.VISUAL, vis.modes.OPERATOR_PENDING)) do
for en, ru in pairs(ru_en) do
vis:map(mode, ru, en)
end
for ru, en in pairs(upper_ru) do
vis:map(mode, ru, en)
end
end
end
vis.events.subscribe(vis.events.INIT, function()
M.stray_keys()
M.langmap()
end)
return M
|