3.1. Раскладка для древнеанглийского
Удобным инструментом для этого является автозамена.
Предположим, мы хотим сделать «раскладку» для древнеанглийского языка. Нам нужно уметь вводить следующие буквы:
Āā Ēē Īī Ōō Ūū Ȳȳ Ææ Ǣǣ Þþ Ðð Ȝȝ Ǫǫ
Нужно придумать дизайн для нашей раскладки. Зададимся следующими целями:
- по возможности не трогать основные значения клавиш;
- делать удобно для слепого набора (то есть минимизировать число дополнительных нажатий и не использовать альты).
Мы будем реализовывать «постмодификацию»: например, нажатие некоторой клавиши после «a» должно давать «ā». Взглянув на клавиатуру, мы выбираем в качестве такого модификатора «/»: нажимать его легко, а в тексте используется редко. Получается такая схема:
a/ → ā
e/ → ē
i/ → ī
o/ → ō
u/ → ū
y/ → ȳ
t/ → þ
d/ → ð
g/ → ȝ
и аналогично для заглавных. Буквы æ, ǣ и ǫ оставим на потом.
Реализуем эти автозамены в скрипте. В SciTE создадим файл englisc.ahk и напишем следующую строку:
Эта строка задаёт опции для последующих автозамен. Дело в том, что по смыслу наши автозамены должны срабатывать и в середине слова, не требовали завершающего символа (пробела и т. п.), а также пусть они будут чувствительны к регистру. По умолчанию эти опции отключены (что разумно, но только не для раскладок), и мы их включаем соответственно символами *, ? и C после директивы #Hotstring.
Общий синтаксис автозамен таков:
::<что заменить>::<на что заменить>
Таким образом, мы добавляем в скрипт строки
Код:
::a/::ā
::e/::ē
::i/::ī
::o/::ō
::u/::ū
::y/::ȳ
::t/::þ
::d/::ð
::g/::ȝ
::A/::Ā
::E/::Ē
::I/::Ī
::O/::Ō
::U/::Ū
::Y/::Ȳ
::T/::Þ
::D/::Ð
::G/::Ȝ
Теперь скрипт можно запустить и проверить, что нажатие слэша после гласной или буквы t, d, g соответствующим образом модифицирует её.
Отметим, что строку #Hotstring blah-blah можно было бы и не писать, а указывать опции для каждой конкретной автозамены между первой парой двоеточий по следующему примеру:
Это обошлось вы в несколько лишних нажатий клавиш, но не лишено смысла, так как код получается не зависящий от строчки где-то наверху и, в частности, копипастабельный.
Рассмотрим теперь буквы Ææ. Мы не можем для них использовать автозамены Ae/, AE/, потому что они конфликтовали бы с имеющимися заменами e/, E/. Решим эту проблему самым простым образом: используем новый модификатор и создадим замены
Код:
::a[::æ
::A[::Æ
::a{::ǣ
::A{::Ǣ
Раз уж мы ввели новый модификатор, используем его и для ǫ:
В действительности модификатор [ может оказаться неудачным для написания
сообщений на форумах, поскольку ubb-тэги заключаются в квадратные скобки, и
автозамена может сработать в неподходящий момент. Чтобы автозамена не
сработала, достаточно нажать на клавишу со стрелкой. Если же мы решим, что всё
равно неудобно, никто не мешает заменить скобку на другой удобный символ.
(Даже на символ табуляции, который в AHK записывается как «`t». Этот символ
производится клавишей Tab.)
Раскладка уже готова к использованию, но мы добавим ещё один штрих. Включать-выключать её можно с помощью контекстного меню, а можно и сделать горячую клавишу. Например, понравилась нам клавиша F11. Напишем следущее:
Код:
F11::Suspend
+F11::ExitApp
Это значит, что по нажатию F11 автозамены и горячие клавиши будут блокироваться, а по нажатию Shift + F11 скрипт будет завершать работу. Плюс перед F11 символизирует, что клавиша нажимается с шифтом*.
Нюанс состоит в том, что клавиша F11 не блокирует саму себя. Благодаря этой хитрости создателей AHK мы можем снова включить заблокированный скрипт, нажав F11.
Таким образом, наш скрипт имеет вид
Код:
F11::Suspend
+F11::ExitApp
#Hotstring *?C
::a/::ā
::e/::ē
::i/::ī
::o/::ō
::u/::ū
::y/::ȳ
::t/::þ
::d/::ð
::g/::ȝ
::A/::Ā
::E/::Ē
::I/::Ī
::O/::Ō
::U/::Ū
::Y/::Ȳ
::T/::Þ
::D/::Ð
::G/::Ȝ
::a[::æ
::A[::Æ
::a{::ǣ
::A{::Ǣ
::o[::ǫ
::O[::Ǫ
Как видите, его создание занимает от силы минут пять—десять, и при этом имеем стопроцентную настраиваимость.
* Аналогично, для нажатого Ctrl используется ^, для Alt — !, для Alt+Shift — !+ и т. д.