Какая часть терминального стека отвечает за направление вывода текста? [закрыто]

С новыми спецификациями, о которых вы говорите, нам нужно изменить его:

perl -e '
   $h{s/\n//r}++ for qx[cat ${\+shift}];
   $h{$.} && print while <>;
' whitelist.txt list.txt

Пояснение

  • Сначала заполните хэш %h, используя содержимое белого списка. txt, который является первым аргументом, который необходимо передать коду Perl. Обратите внимание, что оператор qx[] не что иное, как оператор обратной кавычки.

  • Затем мы печатаем строки второго аргумента, а именно, файл list.txt, номера строк которого входят в хэш %h. Примечание: поскольку $. всегда является числовым И > 0, это причина, по которой мы можем обойтись просто $h{$.} вместо пропа exists $h{$.}

Результаты

172363
612851
172418
19
72457
0
27.08.2018, 23:12
2 ответа

Какого точного поведения вы хотели бы добиться?

Во-первых, я предполагаю, что вы хотите, чтобы все строки были в обратном порядке все время .

Заметьте, что, по моему мнению, в большинстве случаев это приведет к ужасно необычному и контринтуитивному (, если не прямому )поведению, которое, возможно, вы откажетесь использовать довольно скоро.

catПри просмотре текстового файла его строки будут отображаться снизу вверх, а не в том направлении, в котором вы обычно читаете текст. В вашем любимом текстовом редакторе и программе просмотра строки также будут перевернуты. В приложениях их верхняя панель будет внизу, а их нижняя панель будет вверху. В alsamixer регуляторы громкости будут свисать сверху. Символы рисования прямоугольника (например. в alsamixer, Midnight Commander и т. д. )разваливались бы по углам. Во многих приложениях клавиши «Вверх» и «Вниз» перемещали курсор в противоположном направлении.

Этого можно добиться, изменив исходный код вашего любимого эмулятора терминала (или VTE, если вы используете эмулятор на основе VTE -, такой как GNOME Terminal ).

В основном эмулятор терминала отслеживает логическое содержимое (, какая символьная ячейка содержит какую букву с какими графическими атрибутами ), и преобразовывает их в пользовательские -видимые пиксели (хорошо отображаемые глифы ). Это нужно будет перевернуть вверх дном. Я бы искал места, где происходит преобразование между координатами на основе символа -и координатами на основе пикселя -, то есть во всех местах, где происходит умножение или деление на высоту ячейки. Эти формулы необходимо будет скорректировать. Например, если вы видите y_pixel = top_padding + row * cell_height, это может стать y_pixel = top_padding + (number_of_rows - 1 - row) * cell_heightили что-то в этом роде.

В VTE суперплавная прокрутка (на -пиксель прокрутка с сенсорной панелью ), а также способ дополнительного нижнего заполнения (в случае не выравнивания по сетке, например.развернутое окно )заполняется содержимым при плавной прокрутке доставит вам лишнюю головную боль.

Когда вы закончите базовую визуализацию, вам также нужно будет убедиться, что события мыши, отправляемые в приложения, правильно переворачиваются, а также события мыши, которые отслеживают выбор. Полоса прокрутки также должна быть перевернута.

В качестве второго шага вы можете либо добавить пункт меню, либо ввести новую пользовательскую escape-последовательность (, возможно, новый частный номер DEC ), который позволит вам переключаться между стандартным и этим перевернутым поведением. Обратите внимание, что изменение режима немедленно перевернет все (все экранное содержимое и историю )вверх ногами или назад. Удобно иметь возможность восстановить исходное поведение, особенно если это можно сделать автоматически в сценарии-оболочке перед, скажем, предпочитаемым вами редактором. В случае VTE и эмулятора на основе VTE -для входа в графическое меню потребуется новый API между двумя компонентами, поэтому это еще одна причина вместо этого использовать escape-последовательность.

Если вы хотите получить что-то более мелкозернистое, например,. вывод каждой команды должен отображаться в «нормальном» порядке, в то время как последовательность команд «вверх ногами», тогда это становится более сложной историей, которую нельзя сделать в эмуляторе самостоятельно, для этого потребуется получить помощь (через недавно разработанные escape-последовательности ), чтобы знать, какие логические части следует переворачивать. Моя личная рекомендация - забыть об этом, я не считаю это разумно выполнимым.

0
28.01.2020, 02:23

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

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

Первое было бы очень сложной задачей. Прикладные программы, как те, которые предоставляют полноэкранные -текстовые пользовательские интерфейсы, так и те, которые просто делают такие вещи, как предоставление редактируемой отдельной строки, делают предположения о направлении прогресса . Они предполагают всевозможные вещи, такие как направления , , , , RI, IND, CUD, CUUи так далее. (Теоретически в устройстве, совместимом с ECMA -48 :1991, направления линейной последовательности и неявного перемещения переключаются. Я не знаю ни одного эмулятора терминала Unix или Linux, который действительно реализует это. Мир в основном действовал исходя из того, что это не так. )В конце концов, я подозреваю, что можно пройти весь путь через различные последствия и постучать -по эффектам, чтобы обнаружить, что последний метод реализован трудным путем.

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

Тем не менее, :он использовал его и боролся с многолетней привычкой читать сверху вниз, а затем столкнулся только с первоначальными проблемами с приложениями, которые ожидают таких мелочей, (как знак каретки — стрелка вверх для бедняка , а тильда — знак подчеркивания для бедняка ), затем я сделал предупреждение на странице руководства. Я подумываю о том, чтобы оставить этот механизм в следующем выпуске, чтобы люди могли с этого момента действительно попробовать неправильный путь вверх по терминалу и прийти к выводу, что они не хотят этого, несмотря на то, что они утверждали, после все. & #9786;

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

  • Джонатан де Бойн Поллард.console-termio-realizer. справочные страницы набора инструментов nosh. Программное обеспечение.
  • Джонатан де Бойн Поллард.console-fb-realizer. справочные страницы набора инструментов nosh. Программное обеспечение.
  • https://unix.stackexchange.com/a/289871/5132
3
28.01.2020, 02:23

Теги

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