Перемещение курсора

We use cookies. Read the Privacy and Cookie Policy

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

Таблица 13.4. Экранированные последовательности, управляющие позицией курсора

Последовательность

Действие

33[l;cH

Перемещает курсор в строку l и позицию c

33[nA

Перемещает курсор вверх на n строк

33[nB

Перемещает курсор вниз на n строк

33[nC

Перемещает курсор вперед на n символов

33[nD

Перемещает курсор назад на n символов

33[2J

Очищает экран и помещает курсор в левый верхний угол (строка 0, позиция 0)

33[K

Очищает экран от позиции курсора до конца текущей строки

33[s

Сохраняет текущую позицию курсора

33[u

Восстанавливает сохраненную позицию курсора

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

PS1="[33[s33[0;0H33[0;41m33[K33[1;33m 33[0m33[u]<u@h W>$ "

В табл. 13.5 приведены отдельные части этого определения, они помогут понять, как это работает.

Таблица 13.5. Экранированные последовательности, управляющие позицией курсора

Последовательность

Действие

[

Начинает последовательность непечатаемых символов. Истин­ное назначение этой последовательности — позволить bash правильно вычислить длину строки приглашения на экране. Без этого функция редактирования командной строки неправильно позиционировала бы курсор

33[s

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

33[0;0H

Перемещает курсор в левый верхний угол, в строку 0, позицию 0

33[0;41m

Устанавливает красный цвет фона

33[K

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

33[1;33m

Устанавливает желтый цвет текста

Выводит текущее время. Хотя это «печатаемый» элемент, он находится в непечатаемом блоке строки приглашения, потому что нам не нужно, чтобы командная оболочка bash учитывала размер часов при расчете истинного размера отображаемой строки приглашения

33[0m

Выключает цвет. Сбрасывает настройки цвета для текста и фона

33[u

Восстанавливает позицию курсора, сохраненную ранее

]

Завершает последовательность непечатаемых символов

<u@h W>$

Строка приглашения