C/C++ · Python

Màu mè trên Terminal

Bài viết này sẽ giới thiệu cách tô màu cho chuỗi ký tự được xuất ra Terminal. Khi lập trình, việc debug và xuất kết quả được thực hiện chủ yếu ở cửa sổ Terminal và những thông tin quan trọng sẽ được nhấn mạnh nếu có thêm màu sắc.


ANSI ESCAPE CODE

ANSI Escape Codes được sử dụng để kiểm soát vị trí con trỏ, màu sắc và các tùy chọn khác của ký tự xuất hiện trên cửa sổ text terminal. ANSI Escape Code được đính kèm với các chuỗi ký tự để áp dụng các tùy chỉnh như màu sắc, định dạng.

ANSI Escapde color code có format: “\x1b[” + code + “m”, trong đó: mỗi màu sắc sẽ tương ứng với một code.

Chú ý: ANSI Escape Code không tương thích với môi trường Windows. Các ví dụ trong bài viết này được viết trên Linux.


SỬ DỤNG ANSI ESCAPE CODE

C/C++

Chúng ta sẽ tạo một file header chứa một số ANSI Escape Code thường dùng.
File: colorcode.h

/* ANSI ESCAPE CODE */

#define FG_BLACK    "\x1b[90m"     // Black foreground
#define FG_RED      "\x1b[91m"     // Red foreground
#define FG_GREEN    "\x1b[92m"     // Green foreground
#define FG_YELLOW   "\x1b[93m"     // Yellow foreground
#define FG_BLUE     "\x1b[94m"     // Blue foreground
#define FG_MAGENTA  "\x1b[95m"     // Magenta foreground
#define FG_CYAN     "\x1b[96m"     // Cyan foreground
#define FG_WHITE    "\x1b[97m"     // White foreground

#define BG_BLACK    "\x1b[100m"    // White background
#define BG_RED      "\x1b[101m"    // Red background
#define BG_GREEN    "\x1b[102m"    // Green background
#define BG_YELLOW   "\x1b[103m"    // Yellow background
#define BG_BLUE     "\x1b[104m"    // Blue background
#define BG_MAGENTA  "\x1b[105m"    // Magenta background
#define BG_CYAN     "\x1b[106m"    // Cyan background
#define BG_WHITE    "\x1b[107m"    // White background

#define BOLD        "\x1b[1m"      // Bold format
#define ITALIC      "\x1b[3m"      // Italic format
#define UNDERLINE   "\x1b[4m"      // Underline format

#define NORMAL      "\x1b[0m"      // Normal format

File: test.c

#include "stdio.h"
#include "colorcode.h"

int main (int argc, char const *argv[]) {
    printf(FG_RED     "This text is RED!"       NORMAL "\n");
    printf(FG_GREEN   "This text is GREEN!"     NORMAL "\n");
    printf(FG_YELLOW  "This text is YELLOW!"    NORMAL "\n");
    printf(FG_BLUE    "This text is BLUE!"      NORMAL "\n");
    printf(FG_MAGENTA "This text is MAGENTA!"   NORMAL "\n");
    printf(FG_CYAN    "This text is CYAN!"      NORMAL "\n");
    printf(BOLD       "This text is BOLD!"      NORMAL "\n");
    printf(ITALIC     "This text is ITALIC!"    NORMAL "\n");
    printf(UNDERLINE  "This text is UNDERLINE!" NORMAL "\n");

    return 0;
}

Output:
capture


PYTHON

Tương tự như trên, chúng ta tạo một module chứa các ANSI Escape Code thường dùng.

File: colorcode.py

FG_BLACK   = "\x1b[90m"
FG_RED     = "\x1b[91m"
FG_GREEN   = "\x1b[92m"
FG_YELLOW  = "\x1b[93m"
FG_BLUE    = "\x1b[94m"
FG_MAGENTA = "\x1b[95m"
FG_CYAN    = "\x1b[96m"
FG_WHITE   = "\x1b[97m"

BG_BLACK   = "\x1b[100m"
BG_RED     = "\x1b[101m"
BG_GREEN   = "\x1b[102m"
BG_YELLOW  = "\x1b[103m"
BG_BLUE    = "\x1b[104m"
BG_MAGENTA = "\x1b[105m"
BG_CYAN    = "\x1b[106m"
BG_WHITE   = "\x1b[107m"

BOLD       = "\x1b[1m"
ITALIC     = "\x1b[3m"
UNDERLINE  = "\x1b[4m"

NORMAL     = "\x1b[0m"

File: test.py

from colorcode import *

print(FG_RED     + "This text is RED!"       + NORMAL);
print(FG_GREEN   + "This text is GREEN!"     + NORMAL);
print(FG_YELLOW  + "This text is YELLOW!"    + NORMAL);
print(FG_BLUE    + "This text is BLUE!"      + NORMAL);
print(FG_MAGENTA + "This text is MAGENTA!"   + NORMAL);
print(FG_CYAN    + "This text is CYAN!"      + NORMAL);
print(BOLD       + "This text is BOLD!"      + NORMAL);
print(ITALIC     + "This text is ITALIC!"    + NORMAL);
print(UNDERLINE  + "This text is UNDERLINE!" + NORMAL);

Kết quả nhận được sẽ tương tự như ví dụ trên C/C++.

Bên cạnh đó, Python có thư viện colorama hỗ trợ ANSI Escape Code rất tốt, đặc biệt là nó cho phép ANSI Escape Code hoạt động cả trên môi trường Windows bằng cách chuyển đổi ANSI Escape Code về mã tương ứng của win32.

Example:

from colorama import Fore, init

# Chỉ cần cho Windows
init()

print(Fore.RED     + "This text is RED!"     + Fore.RESET);
print(Fore.GREEN   + "This text is GREEN!"   + Fore.RESET);
print(Fore.YELLOW  + "This text is YELLOW!"  + Fore.RESET);
print(Fore.BLUE    + "This text is BLUE!"    + Fore.RESET);
print(Fore.MAGENTA + "This text is MAGENTA!" + Fore.RESET);
print(Fore.CYAN    + "This text is CYAN!"    + Fore.RESET);

SUMMARY

Như vậy chúng ta đã biết cách tùy chỉnh màu cho chuỗi ký tự khi in ra cửa sổ terminal. Cảm ơn các bạn đã theo dõi bài viết.

Thân ái và quyết thắng.

Reference:
[1] ANSI escape code.
[2] Print Colors in Python terminal.
[3] Build your own Command Line with ANSI escape codes.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s