Розфарбовуємо консоль Windows під хохлому
З наступаючим, колеги. Всі знають, що для консолі у windows можна легко встановити колір тексту та фону. Але мало хто знає, що решту 14 кольорів теж можна задати, суттєво спростивши собі роботу з консольними додатками, що підтримують кольори у windows — наприклад, git або mercurial. Під катом я в обличчях і картинках розповім про свою боротьбу з квітами і про утилітку, що вийшла в результаті, на python, яка дозволяє розфарбувати консоль однією командою, щоб більше не бачити цього біло-синього жаху powershell.
ANSI Colors
Отже, я хочу змінити всі кольори в консолі, а не лише тексту та тла. Спочатку подивимося, що це за кольори. У linux і osx все просто – є стандарт «ANSI Colors», який говорить, що якщо вивести в консоль певну послідовність символів, то наступний за нею текст буде пофарбований у всі кольори веселки:
На жаль, автори windows цей стандарт не підтримали, але щось схоже є - 16 кольорів, якими можна розфарбовувати текст і тло. Просте програма на python показує, як це виглядає:
з ctypes import * windll.Kernel32.GetStdHandle.restype = c_ulong h = windll.Kernel32.GetStdHandle(c_ulong(0xfffffff5)) для кольору в xrange(16): windll.Kernel32.SetConsoleTextAt ( color )
Кольори, м'яко кажучи, сумні. Особливо якщо порівнювати результати з колірною схемою за замовчуванням в ubuntu:
Змінюємо кольори
Кольорові налаштування консолі зберігаються, що очікується, у реєстрі. Нас цікавить ключ HKEY_CURRENT_USER\Console, значення від ColorTable00 (чорний, він же колір фону) до ColorTable15 (яскравий білий). Значення DWORD, 0x00BBGGRR. Змінюємо ці чарівні ключі і отримуємо те саме, що і в Ubuntu.Єдина різниця - кольори йдуть в іншому порядку:
Ціль досягнута? Схоже на те. Але тут є…
Інтрига
Радіємо новим кольорам. Через деякий час розуміємо, що у нас Windows 7 або Windows 8 і ми хочемо прикріпити консоль у taskbar, щоб викликати її через хоткей „win+номер“. Робимо „pin this program to taskbar“, запускаємо, і бачимо ЦЕ:
Звідки взялося це синє тло, яке при розмальовці стає чорним? Адже якщо запустити консоль через „win+r“ — бачимо наші кольори, встановлені на попередньому кроці. Тут криється найцікавіше - коли ми прикріплюємо консольний додаток на taskbar, Windows створює для нього ярлик (файл з розширенням .lnk) і встановлює для цього ярлика персональні налаштування кольорів. Що робити? Беремо до рук python, трохи COM, і модифікуємо налаштування ярлика. Тепер зовсім усе працює.
Обіцяні два кліки
Щоб не розгубити кваліфікацію програміста, я оформив усе вищеперелічене як невеликий модуль на python, який можна використовувати як утиліту командного рядка. Якщо у вас вже встановлено python, то для встановлення мого шедевра достатньо виконати команду:
pip install pywincmdtheme
Якщо ж python у вас не варто, то рекомендую поставити збірку ActivePython - крім python вона містить ще й низку попередньо встановлених розширень, корисних для роботи під Windows. Як за допомогою утиліти розфарбувати консоль під хохлому? Якщо запустити утиліту без аргументів командного рядка, вона спробує знайти в директорії користувача файл .Xresources і застосувати кольори з нього. Якщо такого файлу немає, то будуть застосовані кольори з ubuntu, які я демонстрував у прикладах вище.Файл .Xresources — це штатний для *nix спосіб зберігання налаштувань терміналу, зокрема колірних схем. Якщо погуглити, можна знайти красиві готові схеми.
Робота з ярликами трохи складніше - щоб модифікувати налаштування ярлика, необхідно викликати утиліту з ключем командного рядка '--update-link' та повним шляхом до ярлика. Ярлики прикріплених на taskbar програм у Windows зберігаються в директорії %USERPROFILE%AppDataRoamingMicrosoftInternet ExplorerQuick LaunchUser PinnedTaskBar. Приклад модифікації ярлика PowerShell, прикріпленого до taskbar:
pywincmdtheme --update-link "%USERPROFILE%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Windows PowerShell.lnk"
Начебто все. Ще раз із наступаючим всіх, сподіваюся кому-небудь вищевикладене знадобиться :).
color
Змінює колір переднього плану та фону у вікні командного рядка поточного сеансу. При використанні без параметрів колір відновлює вікно командного рядка за промовчанням для переднього плану та фону.
Синтаксис
Параметри
| Параметр |
Опис |
| attr |
Вказує атрибут кольору вихідних даних консолі. |
| /? |
Відображення довідки у командному рядку. |
У наступній таблиці перераховані допустимі шістнадцяткові цифри, які можна використовувати як значення: attr
| Значення |
Колір |
| 0 |
Чорний |
| 1 |
Синій |
| 2 |
Зелений |
| 3 |
Темно-бірюзова |
| 4 |
Червоний |
| 5 |
Лілова |
| 6 |
Жовтий |
| 7 |
Білий |
| 8 |
Сірий |
| 9 |
Світло-синій |
| a |
Світло-зелений |
| б |
Легкий водний |
| c |
Світло-червоний |
| d |
Світло-фіолетовий |
| e |
Світло-жовтий |
| f |
Яскраво-білий |
Зауваження
- Можна вказати одну чи дві шістнадцяткові цифри. Перший використовується як колір переднього плану, а другий використовується як колір фону.Якщо вказати дві шістнадцяткові цифри, не використовуйте пробіли між ними.
- Якщо вказати лише одну шістнадцяткову цифру, відповідний колір використовується як колір переднього плану, а колір фону має значення за замовчуванням.
- Щоб встановити колір вікна командного рядка за промовчанням, виберіть лівий верхній кут. вікна командного рядка, виберіть вкладку "Кольори", а потім виберіть кольори, які ви хочете використовувати для фону екрану і екрану.
- Якщо вказати те саме значення для двох шістнадцяткових цифр, для параметра ERRORLEVEL встановлено 1 значення, і зміни не змінюються на передньому плані або кольорі фону.
Приклади
Щоб змінити колір фону командного рядка на сірий і колір переднього плану на червоний, введіть:
Щоб змінити колір командного рядка переднього плану на світло-жовтий, введіть наступне:
У цьому прикладі для фону заданий колір за замовчуванням, оскільки вказано лише одну шістнадцяткову цифру.
Додаткові посилання