Эмулятор терминала.
2. Настройки клавиатуры.
------------------------------
Базовые параметры объектов типа Terminal находятся в ini-файле класса - Terminal.ini.
Любой из этих параметров может быть переопределён для конкретного экземпляра объекта типа Terminal в ini-секции такого объекта в файле конфигурации.
Например.
В файле Terminal.ini из комплекта поставки эмулятора для клавиши <F12> задана такая подставляемая строка:
Код:
ANSI_STR_FOR_KEY[F12] = "F12 "
А в секции [VT52.ini] файла default.cfg такая:
Код:
ANSI_STR_FOR_KEY[F12] = "f12 "
Запустив эмулятор в конфигурации по-умолчанию и нажав клавишу <F12> можно проверить, какая из подстановок будет выполнена.
Всего можно определить в файле Terminal.ini и переопределить в ini-секциях объектов типа Terminal в файлах конфигурации подставляемые строки для следующих клавиш:
Код:
ANSI_STR_FOR_KEY[F1] = "Help me !!! "
ANSI_STR_FOR_KEY[F2] = "Dir\015"
ANSI_STR_FOR_KEY[F3] = "F3 "
ANSI_STR_FOR_KEY[F4] = "F4 "
ANSI_STR_FOR_KEY[F5] = "\033g"
ANSI_STR_FOR_KEY[F6] = "\033h"
ANSI_STR_FOR_KEY[F7] = "\033S"
ANSI_STR_FOR_KEY[F8] = "\033c"
ANSI_STR_FOR_KEY[F9] = "\033\024"
ANSI_STR_FOR_KEY[F10] = "\033\010"
ANSI_STR_FOR_KEY[F11] = "\033\023"
ANSI_STR_FOR_KEY[F12] = "F12 "
ANSI_STR_FOR_KEY[Insert] = "\033P"
ANSI_STR_FOR_KEY[Delete] = "\033e"
ANSI_STR_FOR_KEY[Home] = "\033Q"
ANSI_STR_FOR_KEY[End] = "\033f"
ANSI_STR_FOR_KEY[PageUp] = "\033R"
ANSI_STR_FOR_KEY[PageDown] = "\033d"
ANSI_STR_FOR_KEY[PF1] = "\033P"
ANSI_STR_FOR_KEY[Pad_Slash] = "\033Q"
ANSI_STR_FOR_KEY[Pad_Star] = "\033R"
ANSI_STR_FOR_KEY[Pad_Minus] = "\033S"
ANSI_STR_FOR_KEY[Pad_Plus] = "\012"
ANSI_STR_FOR_KEY[LCtrl] = "\016"
ANSI_STR_FOR_KEY[RCtrl] = "\017"
ANSI_STR_FOR_KEY[LWin] = "\016"
ANSI_STR_FOR_KEY[RWin] = "\017"
ANSI_STR_FOR_KEY[LAlt] = "\016"
ANSI_STR_FOR_KEY[RAlt] = "\017"
ANSI_STR_FOR_KEY[Apps] = "\012"
Легко заметить, что в конфигурации по-умолчанию - клавиши <Ctrl>, <Win> и <Alt>, расположенные слева от пробела - генерят код перехода на русский регистр ( 016 ), а расположенные справа - код перехода на латинский регистр ( 017 ).
Клавиша <Apps> генерит по-умолчанию код LF ( 012 ).
Код, назначенный для клавиши PF1 :
Код:
ANSI_STR_FOR_KEY[PF1] = "\033P"
генерится при нажатии на клавишу <Num Lock>, но только в том случае, если параметр Use_NumLock_as_PF1 имеет действующее значение 1.
По умолчанию параметры управления клавиатурой таковы:
Код:
KeyboardControlling = 1
NumLockControlling = 1
NumpadSwapping = 1
Use_NumLock_as_PF1 = 0
Параметр KeyboardControlling разрешает или запрещает терминалу имитировать нажатия на клавиши <Num Lock>, <Caps Lock> и <Scroll Lock>.
Параметр NumLockControlling позволяет выборочно запретить терминалу имитировать нажатия на клавишу <Num Lock>.
Параметр NumpadSwapping отвечает за имитацию эмулятором терминала - цифрового и дополнительного клавиатурных блоков терминала 15ИЭ-00-013. При имитации терминала VT52 этот параметр лучше установить в 0, а при имитации 15ИЭ-00-013 - в 1.
Если NumpadSwapping = 1, то при включенном <Num Lock> - KEYPAD PC-шной клавиатуры имитирует NUMPAD терминалов VT52 и 15ИЭ-00-013, а стрелки PC-шной клавиатуры - имитируют стрелки терминалов VT52 и 15ИЭ-00-013 ( режим по-умолчанию ), тогда как при выключенном <Num Lock> - KEYPAD PC-шной клавиатуры имитирует KEYPAD клавиатуры 15ИЭ-00-013 ( отсутствующий у VT52 ), а стрелки PC-шной клавиатуры - имитируют клавиши 4, 5, 6 и 8 NUMPAD.
Поскольку большинство динамичных игр для PDP-11 управляются клавишами 4, 5, 6 и 8 NUMPAD - выключив <Num Lock> в режиме NumpadSwapping = 1 - можно передать эти функции стрелкам.
Но главное в том, что большинство программ для ДВК управляются кодами клавиш KEYPAD клавиатуры 15ИЭ-00-013. Поэтому, при выключенном <Num Lock> в режиме NumpadSwapping = 1 такие программы можно использовать более привычным и естественным образом.
...
В окне терминала клавиши <Alt>, <F10>, <Win> и <Apps> не выполняют своих системных функций, а генерят коды наравне с другими клавишами.
Клавиши <Ctrl> генерят назначенные им коды только при одиночном нажатии, тогда как при нажатии совместно с другими клавишами - обеспечивают генерацию управляющих кодов.
В режиме KeyboardControlling = 1:
1. При каждом получении фокуса ввода окном объекта типа Terminal - объект запоминает текущее состояние параметров <Num Lock>, <Caps Lock> и <Scroll Lock> клавиатуры и восстанавливает свой контекст, а при потере фокуса - осуществляет обратную операцию.
Каждый экземпляр терминала имеет свой собственный контекст состояний клавиатуры.
2. Одиночное нажатие на левую клавишу <Shift> всегда устанавливает <Caps Lock>, а одиночное нажатие на правую клавишу <Shift> - всегда сбрасывает <Caps Lock>.
3. Последовательные нажатия на клавишу <Scroll Lock> посылают в выходной поток коды <Ctrl/S> и <Ctrl/Q>.