Что использовать для расширенного режима киоска, который запускает другие программы с минимальным пользовательским интерфейсом

Johan Myréen ответил близко, но это не совсем проблема :большинство эмуляторов терминала, которые вы будете использовать, имеют обычный и прикладной режимы для специальных клавиш. Описания терминалов написаны для одного режима, который соответствует тому, что использует полноэкранное -приложение. Другие приложения (, такие как интерактивная оболочка ), обычно не инициализируют экран для использования режима приложения . Баш тому пример.

В обычном режиме терминалы xterm и подобные отправляютescape[(CSI ), а в режиме приложения их клавиатуры отправляютescapeO(СС3 ). В синтаксисе terminfo этот экран равен \E. Итак, infocmpпоказывает вам, что в описании используется режим приложения. Возможностьhomeотправляется на терминал, сообщая ему, как переместить курсор в исходное положение (вверху слева ), и это не то же самое, чтоkhome(отправил с терминала с помощью клавиатуры ).

Полноэкранные -приложения (, такие как использующие ncurses ), могут отправлять терминалу -строки возможностей для инициализации клавиатуры. Некоторые описания терминала переводят терминал в режим приложения, некоторые нет.

Использованиеkendвместоendявляется соглашением об именах :в terminfo по соглашению любое имя, начинающееся с k относится к специальной клавише (клавиатура -клавиша ), чтобы было ясно, что это строки, которые должны быть прочитаны приложением. Например,kcub1(курсор -назад клавиша)отличается отcub1(перемещение курсора назад на один столбец ).

ncurses распознает клавишу как KEY_END, потому что приложение, которое вы используете, вызовет функциюkeypadдля инициализации терминала, используяsmkx(мнемонику, означающую «запустить режим передачи с клавиатуры -» ). Это может/не может фактически включить режим приложения. В описании терминала консоли Linux нет, в xterm есть.

В принципе, вы могли бы использоватьtputдля переключения режима (и получить результаты, отличные отshowkey):

$ showkey -a

Press any keys - Ctrl-D will terminate this program

^[[H     27 0033 0x1b
         91 0133 0x5b
         72 0110 0x48
^C        3 0003 0x03
^D        4 0004 0x04
$ tput smkx
$ showkey -a

Press any keys - Ctrl-D will terminate this program

^[OH     27 0033 0x1b
         79 0117 0x4f
         72 0110 0x48

Как усложнение, curses распознает только одно имя для строки. Некоторые терминалы (, такие как xterm ), эмулируют старые аппаратные терминалы, используя другие названия клавиш на клавиатуре редактирования. В FAQ по xterm, указанном ниже, есть возможность назвать эту клавишу "Home" "Insert"...

Дополнительная литература:

1
26.06.2019, 10:52
1 ответ

Оконный менеджер Matchbox обычно является хорошим началом для такого рода проектов.

Одновременно отображается одно приложение в полноэкранном режиме.

0
28.01.2020, 00:08

Теги

Похожие вопросы