Каков эффект `выхода -времени `в Tmux?

Портативное решение:

$ paste file1 file2 | awk -F'\t' '{ printf("%-30s %s\n", $1, $2) }'
looooooooong line              hello
line                           world

Это использует pasteдля создания ввода с разделителями табуляции -для awk.

Сценарий awkпросто берет два поля, разделенных табуляцией -, и выводит их, используя printf(). Столбец из 30 символов зарезервирован для первого файла. %-30sозначает «30 позиций строковых данных с выравниванием по левому краю». Удаление -приведет к выравниванию столбца по правому краю, а изменение 30изменит ширину столбца.

Это также относится к файлам разной длины. Здесь я добавил строки во второй файл:

looooooooong line              hello
line                           world
                               hello
                               world
                               hello
                               world

И, при изменении порядка файлов в командной строке:

hello                          looooooooong line
world                          line
hello
world
hello
world
2
12.09.2020, 12:33
1 ответ

Терминал просто отправляет хосту поток символов. Для клавиш в основной буквенно-цифровой секции клавиатуры (в терминологии ISO 9995 )это нормально и модно, поскольку они обычно отправляют обычные печатные символы или управляющие символы C0.

Дело обстоит иначе, когда речь идет о клавишах курсора, функциональных клавишах, клавишах редактирования и т.п. в других частях клавиатуры, а также когда речь идет о клавишных аккордах даже в основной части, которые не имеют очевидных ассоциаций с управляющими символами, такими как как ⇧ Shift + ⇥ Tab или использование ⎇ Alt в качестве модификатора ускорения.

ECMA -35 и ECMA -48 определяют систему управляющих последовательностей , представленных символом ESC (U+001B )и управляющих последовательностей . ], представленный символом CSI (U+009B, аббревиатурой, обозначающей интродьюсер управляющей последовательности ). Терминалы в основном используют последнее; управляющая последовательность ECMA -48 CUB (CUrsor Backwards ), отправляемая, например, для клавиши .

Это тоже было бы прекрасно и модно, если бы не терминалы (, в том числе эмулированные ), все еще жили в 1970-х, до того времени, когда мир в значительной степени стал 8 -бит чистым .

Терминалы ведут себя так, как будто в мире до сих пор широко используются 7-битные -последовательные кодировки с нечетным/четным/отсутствием четности, что-то вроде революции ПК, BBS и подобных FidoNet и др. помогал копать могилу в 1980-х в пользу 8Н1. Таким образом, они используют форму 7 -битового псевдонима для передачи управляющих символов C1, таких как CSI.

Эта форма предназначена для 7 -битовых транспортов , неспособных к чистой передаче 8 -битовых символов. Это означает, что они фактически передают управляющие символы C1 как символ ESC, за которым следует код символа C1 минус 64(ESC Feдля тех, кто читает ECMA -35 ). Это, в свою очередь, означает, что все управляющие последовательности , которые номинально должны начинаться с управляющего символа C1, который не соответствует клавише на клавиатуре, теперь вместо этого начинаются с управляющего символа C0 для что там есть клавиша на клавиатуре.

Видите ли, у этих надоедливых пользователей есть клавиша Esc , которая отправляет символ ESC сам по себе, а не как часть управляющей последовательности. Им нравится использовать его в программах TUI для обозначения «изменить режим» или «отменить операцию» или что-то еще. Они немного пожаловались, когда несколько лет назад Apple перестала быть настоящей физической клавишей на клавиатурах Apple.

Итак, что представляет собой приложение, которое считывает входной символ терминала -по символу -, как это делают программы, подобные viи tmux(, на его реализованном -на внешнем терминале ), что делать? Как он отличает пользователя с ключом ESC и счастливого его использования от терминала, отправляющего управляющие последовательности по 7-битному транспортному протоколу -?

Устанавливает тайм-аут. Если символ, следующий за ESC, приходит достаточно быстро, то предположительно это терминал, отправляющий управляющую последовательность ECMA-48, которую он будет выполнять на машинной скорости. Если символ, следующий за ESC, появляется после минимальной задержки, то, предположительно, это человек , который набирает эту клавишу Esc перед тем, как напечатать что-то еще.

Это то, что касается настройки escape-time. tmuxпозволяет вам настроить этот тайм-аут (, как это делают VIM и NeoVIM ), которые другие программы часто используют жестко. Вы устанавливаете его на 10 секунд, просто говорите ему, что машины могут быть очень медленными,что вообще бессмысленно. Более обычная модификация заключается в уменьшении его, потому что вы человек, который может печатать так быстро.

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

Возможно, мир поймет, что TCP тоже 8-битный -(да, официально; с 1981 года ), как и последовательная связь в течение нескольких десятилетий, и что терминалы действительно могут отправлять настоящий символ CSI вместо своего 7-битного -псевдонима. Тогда будет меньше двусмысленности (, за исключением ускорителей )между управляющими последовательностями, сгенерированными терминалом, и одиночными нажатиями клавиши Esc этими надоедливыми пользователями, и программам не нужно будет измерять время между получением символов, чтобы узнать, имеют ли они дело с машиной или человеком.

В конце концов, настоящие терминалы усвоили тот факт, что мир стал на 8 -бит чистым в 1980-х… в начале 1980-х. DEC VT220, выпущенный в 1983 году, имеет управляющую последовательность S8C1T , которая сообщает терминалу прекратить использование 7-битных псевдонимов -и начать отправку правильного символа U+009B. Ко времени появления VT320, в 1987 году, это была настроенная -функция, хранящаяся в энергонезависимой -оперативной памяти терминала, которая могла быть включена по умолчанию. Тот же набор -или , который по умолчанию установлен на 8N1 .

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

16
18.03.2021, 23:06

Теги

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