Соглашаясь (частично) с @leonerd, ncurses only даст вам эти ключи, поскольку они используются в качестве модификаторов для других ключей (игнорируя ASCII escape символ, который некоторые люди путают с клавишей Alt ).Некоторые конкретные устройства могут указывать эту информацию (например, консоль Linux, как описано в console_ioctl (4) ), но это не проблема, которую ncurses решит для вас.
См.FAQ по ncurses Как использовать модификаторы shift или control? для длинного ответа.
Но коротко: ncurses не сообщает вам, использовался ли данный модификатор (кроме специальныхслучаи, когда было хорошо известно использование shift ), а скорее описания его терминалов предоставляют информацию либо на
- , умножая фактические функциональные клавиши на комбинации клавиш shift- и control-модификаторы или
- с использованием имен, основанных на функциональных клавишах xterm в стиле ПК (shift - 2, alt - 3, control - 5 и т. д.), чтобы предоставить информацию.
Есть два подхода, потому что первый использует массив не более чем из 60 функциональных клавиш (достаточно хорошо для комбинаций shift и control), а другой просто использует определяемые пользователем имена).
Все эти модифицированные ключи дают несколько байтов;приложение, использующее keypad()
(конечно) в ncurses, получит одно число.В последнем случае коды клавиш определяются во время выполнения.
Это относится в основном к специальным клавишам (функциональные клавиши, клавиши редактирования и клавиши курсора).Для обычных ключей можно предположить, что keyname
дает какое-то особое поведение, но, читая описание, этого не происходит:
- сообщает о управляющих символах ASCII (что вы можете сделатьиспользуя макрос
iscntrl
), а - делает предположения о мета (которые полезны только для
xterm
терминалов, которые вы, вероятно, будете использовать), а - не предлагает помощи длямодификатор shift .
Из терминалов ... все имеют информацию о модификаторе, доступную внутри, но терминалы обычно не имеют возможности передавать эту информацию приложениям.xterm
может сделать это, используя ресурс modifyOtherKeys
,
modifyOtherKeys (class ModifyOtherKeys)
Like modifyCursorKeys, tells xterm to construct an escape
sequence for other keys (such as "2") when modified by
Control-, Alt- or Meta-modifiers. This feature does not apply
to function keys and well-defined keys such as ESC or the
control keys. The default is "0":
0 disables this feature.
1 enables this feature for keys except for those with well-
known behavior, e.g., Tab, Backarrow and some special
control character cases, e.g., Control-Space to make a
NUL.
2 enables this feature for keys including the exceptions
listed.
, который соответствует последовательности управления, что можно увидеть в Последовательности управления XTerm :
CSI > Ps; Ps m
Set or reset resource-values used by xterm to decide whether
to construct escape sequences holding information about the
modifiers pressed with a given key. The first parameter iden-
tifies the resource to set/reset. The second parameter is the
value to assign to the resource. If the second parameter is
omitted, the resource is reset to its initial value.
Ps = 0 -> modifyKeyboard.
Ps = 1 -> modifyCursorKeys.
Ps = 2 -> modifyFunctionKeys.
Ps = 4 -> modifyOtherKeys.
но (будучи специфической для xterm функцией), нет причин использовать ее в ncurses: это излишне усложнит getch
.