Console color editor — создаем и редактируем цветовые схемы командной строки | белые окошки
В Windows 10 дизайнеры Microsoft хорошо поработали над улучшением внешнего вида командной строки, добавив новые настройки цветовых схем и реализовав прозрачность, но всё же в целом ее интерфейс остается таким же скучным. Если собственные цветовые настройки командной строки вас не устраивают, попробуйте Console Color Editor — небольшое приложение, предназначенное для создания и редактирования цветовых схем консоли CMD.
В программе уже имеется небольшой набор готовых цветовых схем, но служат они скорее для демонстрации работы приложения. Цветные кнопки, расположенные в верхней части окна редактора, соответствуют цветовому ряду на вкладке «Цвета» в свойствах командной строки. Клик по такой кнопке вызывает окошко системной палитры Windows, с помощью которой пользователь может изменить текущий цвет, если же кликнуть по кнопке с зажатой клавишей Ctrl, откроется окошко для вставки цвета в HEX-формате, что удобно при копировании из других источников.
Кнопка «Apply» применяет настройки, «New» — служит для создания новой схемы, «Save» — сохраняет внесенные изменения. Для предпросмотра результата служит кнопка «Preview in CMD». Отдельной настройки, позволяющей изменять цвет текста в Console Color Editor нет, применение новых параметров подразумевает прежде всего редактирование схемы в настройках самой командной строки, то есть чтобы изменить цвет шрифта, вам всё равно нужно будет зайти в свойства консоли.
Скачать утилиту можно с сайта разработчика:
apps.codigobit.info/2021/08/console-color-editor-and-manager.html
Распространяется редактор цветовых схем командной строки на бесплатной основе, в установке не нуждается, язык простого интерфейса — английский. В текущей версии утилиты есть небольшой баг (?), из-за которого настройки применяются только к командной строке, запущенной с правами администратора, также по какой-то причине у нас оказалась неактивной кнопка сброса параметров «Reset CMD settings».
Альтернативное решение – программа nhcolor
В итоге, пришлось написать решение, которое
- может менять цвет текста в консоли по строкам
- не ограничивает выводимый текст
- не требует административных полномочий.
Итак, программа nhcolor имеет два варианта запуска.
Как изменить цвет для окна консоли c
Сам спросил – сам и отвечу.
Внимание! Представленные ниже способы подходят только для Windows систем! Для Linux используйте библиотеку ncurses
.
Можно менять цвет фона окна и символов без дополнительных библиотек, простой функцией system()
. Достаточно написать, например, system("color F0")
и будет установлен белый фон (F) и чёрный текст (0). Можно писать и наоборот, например: system("color 3F");
установит голубой фон и белый текст.
Список цветов:
- 0 — черный
- 1 — синий
- 2 — зеленый
- 3 — голубой
- 4 — красный
- 5 — лиловый
- 6 — желтый
- 7 — белый
- 8 — серый
- 9 — свело-синий
- A — светло-зеленый
- B — светло-голубой
- С — светло-красный
- E — светло-желтый
- F — ярко-белый
Можно использовать функцию SetConsoleTextAttribute()
из Windows.h:
HANDLE h;
h = GetStdHandle(STD_OUTPUT_HANDLE); //получаем наше окно, в котором нужно изменить цвет
И установим жёлтый цвет на зелёном фоне:
SetConsoleTextAttribute(h, (((2 << 4) | 14)));
Что же это за страшная функция? Если кратко: число смещается на 4 бита влево и объединяется со вторым в результате логического ИЛИ. Эти действия объединят числа, чтобы функция установила нужный цвет и фон. Если интересно, можно взять результат этих операций (в данном случае 46) и скормить их функции:
SetConsoleTextAttribute(h, 46);
И вы получите такой же результат. Но настраивать гораздо удобнее по двум числа (первая отвечает за фон, вторая за текст).
Вот список цветов для этой функции:
- Чёрный – 0
- Синий – 1
- Зелёный – 2
- Голубой – 3
- Красный – 4
- Пурпурный – 5
- Коричневый – 6
- Светло-серый – 7
- Тёмно-серый – 8
- Светло-синий – 9
- Светло-зелёный – 10
- Светло-голубой – 11
- Светло-красный- 12
- Светло-пурпурный – 13
- Жёлтый – 14
- Белый – 15
Внимание! Функция system("color ...")
устанавливает цвет для всей консоли и всех символов, а SetConsoleTextAttribute();
только для символов и той части консоли, которая находится под ними.
Как изменить цвет строки в cmd?
Сам я ни черта не понимаю в cmd, поэтому искал решение в интернетах.
Насколько я понял, color для этого не используют т.к. он меняет цвет во всей сессии. Зато используют какой-то хак с командой findstr, которой можно явно указать цвет выводимого ею сообщения.
Вот что нарыл:
:write
setlocal
:write1
set "tempFolder=%TEMP%%~n0.%time:~-2%.%random%"
md "%tempFolder%" 2>nul || goto write1
pushd %tempFolder%
set /p .=.<nul>"%~2"
findstr /a:%~1 /c:"." /s "%~2"
popd
rd /s /q "%tempFolder%" 2>nul
endlocal & exit /b
:writeLn
call :write %1 "%~2"
echo:
exit /b
Эта фигня работает почти как надо, за исключением того, что добавляет двоеточие и точку в конце. То есть вызов call :write 0A "My Charona"
вернет My Charona:.
, где My Charona и двоеточие будут зеленого цвета, а точка – дефолтного.
Некоторые строчки кода для меня почти ясны (findstr /a:%~1 /c:"." /s "%~2"
), некоторые вообще черная магия (set /p .=.<nul>"%~2"
).
Можно ли как-то избавиться от двух последних символов в строке, которую выводит findstr?
Кстати, да: если из кода убрать все операции с директориями, функционал не меняется абсолютно, все работает так же.
Параметры
В следующей таблице перечислены допустимые шестнадцатеричные числа, которые можно задать в качестве значений параметров т и ф.
Примеры использования
Чтобы изменить цвет текста на красный, а цвет фона на белый в окне командной строки, введите следующую команду:
color FC
Примечания
- Чтобы задать стандартные цвета в окне командной строки, щелкните левый верхний угол этого окна, выберите команду Умолчания, перейдите к вкладке Цвета и укажите цвета для параметров Текст на экране и Фон экрана.
- Для изменения цветов окна командной строки в текущем сеансе можно воспользоваться командой cmd /t:тф.
- Если цвета текста и фона совпадают, команда color устанавливает значение параметра ERRORLEVEL в единицу (1).
Способы изменения цвета в командной строке и bat файле
Есть несколько довольно часто используемых способов, но они имеют существенные недостатки
Таблица цветов
Такая же, как в команде COLOR, поэтому её всегда можно посмотреть командой COLOR /?
Атрибуты цветов задаются в виде ДВУХ шестнадцатеричных цифр -- первая задает цвет фона, а вторая определяет цвет переднего плана. Каждая цифра может иметь следующие значения: 0 = Черный 8 = Серый 1 = Синий 9 = Светло-синий 2 = Зеленый A = Светло-зеленый 3 = Голубой B = Светло-голубой 4 = Красный C = Светло-красный 5 = Лиловый D = Светло-лиловый 6 = Желтый E = Светло-желтый 7 = Белый F = Ярко-белый
Цвет текста входного потока stdin
Программа выводит в заданном цвете весь поток, поступающий на stdin.
Цвет текста задаётся параметром, например, 0c — это светло-красный текст на черном фоне, а входной поток направляется в nhcolor
Цвет текста, заданного в командной строке
Программа выводит текст, указанный в командной строке, заданным цветом.
Цвет текста задаётся первым параметром, например, 0a — это светло-зелёный текст на черном фоне, а выводимый текст задаётся в аргументах nhcolor
nhcolor 0a Архивирование закончено
Результат:
Ещё один пример, который показывает вывод всех 15 доступных цветов текста на черном тексте:
Цветовое оформление консольного вывода
Кратко о том, как сделать для своей консольной программы или скрипта цветной вывод текста, а также дополнить его другими элементами оформления. Собственно, назначить можно цвет текста, цвет фона под ним, сделать текст жирным, подчеркнутым, невидимым и даже мигающим.
Шаблон для использования в современных командных оболочках и языках программирования таков: x1b[…m. Это ESCAPE-последовательность, где x1b обозначает символ ESC (десятичный ASCII код 27), а вместо “…” подставляются значения из таблицы, приведенной ниже, причем они могут комбинироваться, тогда нужно их перечислить через точку с запятой.
атрибуты | |
0 | нормальный режим |
1 | жирный |
4 | подчеркнутый |
5 | мигающий |
7 | инвертированные цвета |
8 | невидимый |
цвет текста | |
30 | черный |
31 | красный |
32 | зеленый |
33 | желтый |
34 | синий |
35 | пурпурный |
36 | голубой |
37 | белый |
цвет фона | |
40 | черный |
41 | красный |
42 | зеленый |
43 | желтый |
44 | синий |
45 | пурпурный |
46 | голубой |
47 | белый |
Теперь несколько примеров. Все это можно опробовать, введя в консольном окне echo -e "текст примера"
.
Обратите внимание, что во всех трех случаях после слова Test идет последовательность x1b[0m, которая просто сбрасывает стиль оформления на стандартный.
Комплексный пример использования:
Хорошая раскраска вывода часто значительно облегчает восприятие информации. Так что пробуйте и экспериментируйте.
P.S. Также об этом и некотором другом можно прочитать в man console_codes
. Спасибо Riateche за подсказку.