Прочитайте исходный ввод с клавиатуры с помощью read () и termios [duplicate]

Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:

Вы пытаетесь использовать ссылочную переменную, значение которой Nothing / null. Если для ссылочной переменной значение Nothing / null, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.

Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную Nothing / null, или вы вызывали функцию, которая установите для этой переменной значение Nothing / null.

9
задан johndodo 15 October 2011 в 19:55
поделиться

3 ответа

Клеммы были аппаратными устройствами, которые состояли из клавиатуры и устройства вывода (первоначально печатный принтер, а затем монитор CRT). На большом компьютере может быть подключено несколько удаленных терминалов. Каждый терминал имеет протокол для эффективной связи с компьютером, для терминалов на основе ЭЛТ это включает в себя наличие специальных «контрольных последовательностей» для изменения положения курсора, удаления частей текущей строки / экрана, переключения в альтернативный полноэкранный режим. ..

Терминальный эмулятор - это приложение, эмулирующее один из этих старых терминалов. Он позволяет выполнять такие функции, как позиционирование курсора, установка цветов переднего плана и фона, ... Терминальные эмуляторы пытаются эмулировать какой-то конкретный протокол терминалов, но каждый имеет свой собственный набор причуд и отклонений.

Unix-системы имеют базы данных описывая терминалы и эмуляторы терминалов, поэтому приложения абстрагируются от конкретного терминала (или эмулятора терминала). Старшая база данных - termcap(5), а terminfo(5) - более новая база данных. Эти базы данных позволяют приложениям запрашивать возможности используемого терминала. Возможности могут быть логическими, числовыми или даже строковыми, например: если определенный тип терминала имеет / поддерживает ключ F12, он будет иметь возможность «key_f12» (long terminfo name), «kf12» (short terminfo name), «F2» (имя termcap), описывающее строку, которую создает ключ. Попробуйте: tput kf12 | od -tx1.

Поскольку программирование напрямую с возможностями может быть громоздким, приложения обычно используют библиотеку более высокого уровня, такую ​​как curses / ncurses, slang и т. Д. ...

Существует специальная переменная среды, называемая TERM, которая сообщает приложениям, с каким типом терминала они разговаривают. Для получения наилучших результатов эта переменная должна быть установлена ​​на точный тип терминала, если она существует в базе данных. Это просто говорит приложению, что точное понимание протокола и протокола делает терминал понятным. Изменение переменной TERM не изменяет тип терминала, это просто изменяет тип терминала, с которым, по мнению приложения, разговаривает.

Все, что сказано, Ctrl+arrow - это поведение xterm (в зависимости от конфигурации ), который вообще не отражается в базе данных terminfo / termcap, поэтому большинство приложений не будут знать об этом. В любом случае, ваш эмулятор терминала (в вашем случае pyte) поддерживает его или нет.

Предполагая, что ваше основное приложение - bash или какое-либо другое приложение, использующее библиотеку readline вы можете избежать использования readline backward-word (Meta-b / Alt-b / ESC b по умолчанию, настраиваемого в inputrc).

22
ответ дан sawdust 28 August 2018 в 05:53
поделиться

Коды клавиш Ctrl + стрелки были введены xterm, и подобные Gnome Terminal и KDE Konsole пытаются быть совместимыми с xterm. Фактические терминалы VT100 и VT220 не имели отдельных клавиш для таких комбинаций. Насколько мне известно, консоль Linux нацелена на совместимость с VT100 с некоторыми дополнениями, тогда как xterm эмулирует VT220 с большим количеством дополнений.

4
ответ дан ak2 28 August 2018 в 05:53
поделиться

Быстрая проверка с помощью od -c показывает, что gnome-terminal генерирует эти значения:

Стрелка влево создает ESC - [ - D.

Управление -left-array генерирует ESC - [ - 1 - ; - 5 - D

8
ответ дан Robᵩ 28 August 2018 в 05:53
поделиться
Другие вопросы по тегам:

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