ฉันกำลังสร้างแอปพลิเคชั่นง่ายๆที่ต้องการเอาต์พุตสี ฉันจะทำให้ผลลัพธ์ของฉันเป็นสีเช่น emacs และ bash ได้อย่างไร?
ฉันไม่สนใจ Windows เนื่องจากแอปพลิเคชันของฉันใช้สำหรับระบบ UNIX เท่านั้น
ฉันกำลังสร้างแอปพลิเคชั่นง่ายๆที่ต้องการเอาต์พุตสี ฉันจะทำให้ผลลัพธ์ของฉันเป็นสีเช่น emacs และ bash ได้อย่างไร?
ฉันไม่สนใจ Windows เนื่องจากแอปพลิเคชันของฉันใช้สำหรับระบบ UNIX เท่านั้น
คำตอบ:
ตัวเลียนแบบเทอร์มินัลที่ทันสมัยทั้งหมดใช้รหัสหนี ANSI เพื่อแสดงสีและสิ่งอื่น ๆ
ไม่ต้องกังวลกับไลบรารีโค้ดนั้นง่ายมาก
ตัวอย่างใน C:
#include <stdio.h>
#define ANSI_COLOR_RED "\x1b[31m"
#define ANSI_COLOR_GREEN "\x1b[32m"
#define ANSI_COLOR_YELLOW "\x1b[33m"
#define ANSI_COLOR_BLUE "\x1b[34m"
#define ANSI_COLOR_MAGENTA "\x1b[35m"
#define ANSI_COLOR_CYAN "\x1b[36m"
#define ANSI_COLOR_RESET "\x1b[0m"
int main (int argc, char const *argv[]) {
printf(ANSI_COLOR_RED "This text is RED!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_GREEN "This text is GREEN!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_YELLOW "This text is YELLOW!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_BLUE "This text is BLUE!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_MAGENTA "This text is MAGENTA!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_CYAN "This text is CYAN!" ANSI_COLOR_RESET "\n");
return 0;
}
การจัดการกับลำดับสีอาจทำให้ยุ่งเหยิงและระบบต่างๆอาจใช้ตัวบ่งชี้ลำดับสีที่แตกต่างกัน
ผมขอแนะนำให้คุณลองใช้ncurses นอกเหนือจากสีแล้ว ncurses ยังสามารถทำสิ่งอื่น ๆ อีกมากมายด้วยคอนโซล UI
คุณสามารถส่งออกรหัสควบคุมสีพิเศษที่จะได้รับการส่งออกสีเทอร์มินี่เป็นแหล่งข้อมูลที่ดีเกี่ยวกับวิธีการพิมพ์สี
ตัวอย่างเช่น:
printf("\033[22;34mHello, world!\033[0m"); // shows a blue hello world
แก้ไข: รหัสเดิมของฉันใช้รหัสสีพร้อมต์ซึ่งใช้ไม่ได้ :( อันนี้ทำ (ฉันทดสอบแล้ว)
edition.c: In function ‘int main(int, const char**)’: edition.c:4: error: unknown escape sequence '\]' edition.c:4: error: unknown escape sequence '\]' edition.c edition.c~
ไม่มีอะไรมากไปกว่าข้อผิดพลาดในการคอมไพล์ :(
22
โดย1
จะเห็นมันในตัวหนา
คุณสามารถกำหนดหนึ่งสีให้กับทุกฟังก์ชันเพื่อให้มีประโยชน์มากขึ้น
#define Color_Red "\33[0:31m\\]" // Color Start
#define Color_end "\33[0m\\]" // To flush out prev settings
#define LOG_RED(X) printf("%s %s %s",Color_Red,X,Color_end)
foo()
{
LOG_RED("This is in Red Color");
}
เช่นเดียวกับที่ชาญฉลาดคุณสามารถเลือกรหัสสีที่แตกต่างกันและทำให้เป็นแบบทั่วไปได้มากขึ้น
หากคุณใช้สีเดียวกันทั้งโปรแกรมคุณสามารถกำหนดprintf()
ฟังก์ชันได้
#include<stdio.h>
#define ah_red "\e[31m"
#define printf(X) printf(ah_red "%s",X);
#int main()
{
printf("Bangladesh");
printf("\n");
return 0;
}
เนื่องจากคุณไม่สามารถพิมพ์อักขระที่มีการจัดรูปแบบสตริงได้ คุณยังสามารถคิดเพิ่มรูปแบบด้วยสิ่งนี้ได้
#define PRINTC(c,f,s) printf ("\033[%dm" f "\033[0m", 30 + c, s)
f
เป็นรูปแบบในรูปแบบ printf
PRINTC (4, "%s\n", "bar")
จะพิมพ์ blue bar
PRINTC (1, "%d", 'a')
จะพิมพ์ red 97
#include <stdio.h>
#define BLUE(string) "\x1b[34m" string "\x1b[0m"
#define RED(string) "\x1b[31m" string "\x1b[0m"
int main(void)
{
printf("this is " RED("red") "!\n");
// a somewhat more complex ...
printf("this is " BLUE("%s") "!\n","blue");
return 0;
}
อ่านWikipedia :