Управління консоллю FreeBSD

Керуючий символ ESCAPE (ASCII - 0x1B HEX, 033 OCT, 27 DEC)

Управління консоллю, вікном терміналу та іншим господарством завжди починається з виведення символу, що управляє, т.зв. Escape символ. Його ASCII-код дорівнює 27, при редагуванні він зазвичай з'являється як ^[ . Однак це недрукований символ і в консолі його просто так не ввести.

Щоб уникнути проблеми введення, необхідно вдатися до допомоги тих команд, які вміють розширювати передані ним рядки, замінюючи код символу на сам символ. У консолі фрібсд є, як мінімум, дві такі команди - вбудованаecho-e у/bin/sh та утиліта/usr/bin/printf. Виглядає це так:

Після escape-символу вже йдуть безпосередньо команди на керування терміналом (консоль, ssh-клієнт тощо). Загалом це виглядає приблизно так:

Ось так інтерпретується рядок, виведенийprintf :

\033[1;31m модифікатор кольору (яскравий + червоний шрифт)Hello безпосередньо напис\033[m скидання модифікатора кольору (повернення до стандартних налаштувань)>\n переклад рядка

Модифікатори кольору

Модифікатор кольору задається за допомогою конструкції [#m , де # — номер кольору або послідовність номерів, розділених крапкою з комою.

АтрибутиНезрозуміло щоКолір символівКолір фону
\033[mскасування модифікаторів кольору
\033[0mскасування модифікаторів кольору
\033[1mяскравий
\033[4mпідкреслений у PUTTY, яскравий у FreeBSD
\033[5mсвітлий у PUTTY, без ефекту у FreeBSD
\033[7mінверсія
\033[12mпісля цього консоль PUTTY перетвориться начереда кракозябр.
\033[21mпідкреслений у PUTTY, без ефекту у FreeBSD
\033[30mчорний шрифт
\033[31mчервоний шрифт
\033[32mзелений шрифт
\033[33mжовтий шрифт у PUTTY, коричневий у FreeBSD (якщо не яскравий)
\033[34mсиній шрифт
\033[35mмалиновий шрифт
\033[36mсиній шрифт
\033[37mсірий шрифт
\033[40mчорний фон
\033[41mчервоний фон
\033[42mзелений фон
\033[43mжовтий фон у PUTTY, коричневий у FreeBSD
\033[44mсиній фон
\033[45mмалиновий фон
\033[46mблакитний фон
\033[47mсірий фон

Для більшої наочності я сформував таблицю кольорів у файлі color-freebsd.txt. Наведу скріншоти для PUTTY та FreeBSD.

Зведена таблиця кольорів для PUTTY

PUTTY

Зведена таблиця кольорів для FreeBSD

консоллю

У комірках таблиці вказані параметри модифікатора, які потрібно використовувати, щоб досягти того ж кольору, як у комірки.

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

Управління курсором

\033[#Aпересунути курсор вгору на # позицій
\033[#Bпересунути курсор вниз на # позицій
\033[#Cпересунути курсор праворуч на # позицій
\033[#Dпересунути курсор вліво на # позицій
\033[#Eпересунути курсор вниз на # позицій і поставити на початок рядка
\033[#Fпересунути курсор вгору на # позицій та поставити на початок рядка
\033[#Gпересунути курсор в позицію поточного рядка (працює тільки в PUTTY)
\033[#;#Hпомістити курсор за вказаними координатами

Приклад реалізації прогрессбару засобами консолі та /bin/sh

Підсумовуючи цю статтю, я наведу приклад реалізації графічної лінії прогресу засобами /bin/sh .

У роботі це виглядає приблизно так:

Чесно скажу, що не став морочитися з точними формулами розрахунку координат смуги прогресу і всі цифри підібрав «на вічко». Але принцип тут використовується подвійно простий - виходячи з відсотка, в змінну $bar записується графічна частина прогресу (червона смуга), яка потім вирівнюється праворуч на довжину всієї смуги. При цьому щоразу при виведенні йде зміщення вліво на довжину всього прогресу, щоб забезпечити статичний вигляд.

Висновок

Якщо є запитання чи побажання, то можете писати сюди чи на форум. І вдалого колоризингу консолі :)

PS: Якщо раптом захочете розмістити будь-які матеріали з цієї статті у себе на сайті, будь ласка, не забудьте дати посилання на цей сайт як першоджерело.