Позволяет быстро менять раскладку клавиатуры и исправлять текст, уже набранный не в той раскладке. Полезен при наборе текстов c латиницей и кириллицей вперемешку (например, TEX-овских).
(В отличие от плагина, поменял местами действия Alt+Left и Alt-Right, а также добавил "перевод" RU->EN для некоторых символов)
Если набирать текст, удерживая клавишу Alt, то текст будет появляться в раскладке, противоположной к текущей.
Alt+Right - заменяет латиницу на кириллицу (например, применение Alt+Right к слову "ghbdtn" заменит его на "привет")
Alt+Left - заменяет кириллицу на латиницу
Alt+Up - заменяет нижний регистр на верхний
Alt+Down - заменяет верхний регистр на нижний
Alt+Home, Alt+End - пометка текста не производится
Для возможности ввода Alt+пробел нужен скрипт XKeys
- --- Скрипт-замена плагина AltKyrLat ---
- --- v.15 ---
- --- (с) LAT ;) ---
- local langu = { en = 67699721 } -- коды раскладок
- --
- -- ПРЕОБРАЗОВАНИЕ СИМВОЛА
- -- key - символ под курсором
- -- func - функция замены
- local function convert1(key, func)
- Editor.Undo(0)
- editor.DeleteChar(nil)
- print(func(key))
- Editor.Undo(1)
- end
- --
- -- СТАНДАРТНОЕ ПРЕОБРАЗОВАНИЕ СИМВОЛОВ
- -- key - символ под курсором
- -- symbols - паттерн, для которого следует осуществлять замену символа
- -- func - функция замены
- --
- local function convert(key, symbols, func)
- if regex.match(key, symbols) then -- заменяем
- convert1(key,func)
- else -- просто передвигаем курсор
- Editor.Pos(1,2,Editor.CurPos+1)
- end
- end
- --
- -- ПРЕОБРАЗОВАНИЕ СПЕЦ-СИМВОЛОВ RU->EN
- -- (для этих символов xlat не отрабатывает, как хочется)
- -- key - символ под курсором
- --
- local function replace2en(key)
- if key=='ю' then return '.'
- elseif key=='б' then return ','
- elseif key==',' then return '?'
- elseif key=='.' then return '/'
- elseif key=='?' then return '&'
- elseif key==';' then return '$'
- elseif key==':' then return '^'
- elseif key=='"' then return '@'
- elseif key=='ж' then return ';'
- elseif key=='Ж' then return ':'
- elseif key=='Э' then return '"'
- end
- end
- --
- -- ОБРАБОТКА СПЕЦ-КЛАВИШ
- -- key_pressed - нажатая клавиша
- --
- local function special(key_pressed)
- if key_pressed == "Home" or key_pressed == "End" then -- убираем пометку
- return
- end
- local key = mf.substr(Editor.Value, Editor.CurPos-1, 1) -- символ под курсором
- if key == "" then -- конец строки или файла - go home
- return
- end
- if key == " " then -- пробел - сдвигаемся
- Editor.Pos(1,2,Editor.CurPos+1)
- return
- end
- if key_pressed == "Left" then -- транслитерация на буржуйский
- if regex.match(key, '[юбж,.?;:"ЖЭ]') then
- convert1(key, replace2en)
- else
- convert(key, '[А-я№ёЁ]', mf.xlat)
- end
- elseif key_pressed == "Right" then -- транслитерация на Великий_И_Могучий
- convert(key, '[A-z@#$^&`[\\];\',.~{}:"<>?\\/]', mf.xlat)
- elseif key_pressed == "Up" then -- к верхнему регистру
- convert(key, '[a-zа-яё]', mf.ucase)
- elseif key_pressed == "Down" then -- к нижнему
- convert(key, '[A-ZА-ЯЁ]', mf.lcase)
- end
- end
- --
- -- ОБРАБОТКА ЕДИНИЧНЫХ СИМВОЛОВ
- -- key - нажатая клавиша (символ)
- -- shift - флаг нажатия шифта (1 - нажат, 0 - нет)
- --
- local alt1 = function (key, shift)
- local symbols = { ")", "!", "@", "#", "$", "%", "^", "&", "*", "(" }
- if ( key >= "A" and key <= "Z" ) then -- буква
- local CapsLock = mf.flock(1, -1 )
- if ( shift == 0 and CapsLock == 0 ) or ( shift == 1 and CapsLock == 1 ) then
- key = mf.lcase(key)
- end
- elseif ( key >= "0" and key <= "9" ) then -- цифра
- if shift ~= 0 then -- для нажатого шифта ставим символ
- key = symbols[key+1]
- end
- else -- символ
- if shift ~= 0 then -- для нажатого шифта заменяем
- if key == "," then key = "<"
- elseif key == "." then key = ">"
- elseif key == ";" then key = ":"
- elseif key == "[" then key = "{"
- elseif key == "]" then key = "}"
- elseif key == "'" then key = '"'
- elseif key == "`" then key = "~"
- elseif key == "/" then key = "?"
- elseif key == "=" then key = "+"
- end
- end
- end
- if Far.KbdLayout(0) == langu.en then -- для буржуйской раскладки - транслитерируем
- key = mf.xlat(key)
- end
- return key
- end
- --
- -- РАЗДЕЛЕНИЕ НАЗВАНИЯ НАЖАТОЙ КОМБИНАЦИИ КЛАВИШ НА СОСТАВЛЯЮЩИЕ И ОБРАБОТКА
- --
- local function split()
- local shift = 0 -- флаг шифта
- local key = mf.akey(1, 0) -- клавиша
- -- mf.msgbox('"'..key..'"')
- -- mf.msbox(mf.substr(key,0,1))
- if mf.substr(key,0,1) == "R" then -- правый alt
- key = mf.substr(key,4)
- else -- левый
- key = mf.substr(key,3)
- end
- if mf.substr(key,0,5) == "Shift" then -- нажат shift
- shift = 1
- key = mf.substr(key,5)
- end
- if mf.len(key) == 1 then -- символ
- key = alt1(key, shift)
- else
- if key == "BackSlash" then -- обратный слеш
- if shift ~= 0 then
- key = mf.iif(Far.KbdLayout(0) == langu.en, "/", "|")
- end
- elseif key == "Space" then -- пробел - так и оставим
- elseif shift == 0 and ( key == "Home" or key == "End" or -- какая-то операция над текущим символом
- key == "Right" or key == "Left" or key == "Up" or key == "Down" ) then
- special(key)
- return
- else -- хз что
- key = "AKey"
- end
- end
- return Keys(key)
- end
- --
- -- МАКРОС
- --
- Macro
- {
- area = "Editor",
- key="/[LR]Alt(Shift){,1}(.|(Space)|(Left)|(Right)|(Up)|(Down)|(Home)|(End)|(BackSlash))/",
- flags = "",
- description = "AltKyrLat",
- condition = "",
- action = split,
- }
GeSHi © Codebox Plus Extension
- AltKyrLat15.7z
- архивом
- (2.03 KiB) Downloaded 146 times