Как я могу печатать цвета в консоли с D? - PullRequest
9 голосов
/ 19 февраля 2012

Я пробовал escape-последовательности с функцией writeln (), я также пытался использовать их с функцией printf (), импортированной из модуля std.c.stdlib, но она печатает только пустую строку.

printf("\0x1B[5;32;40m Blink Text");

printf("\e[5;32;40m Blink Text\e[m");

writeln("\0x1b\x5b1;31;40m\tColor");

Ни одна из этих работ.

Я перепробовал все, что мог придумать, есть ли способ?

Поиск ссылки на библиотеку сайта D мне не помог.


РЕДАКТИРОВАТЬ: РЕШЕНИЕ

Хорошо, поэтому я попытался импортировать функцию SetConsoleTextAttribute, как любезно предложил Марс:

extern (Windows) bool SetConsoleTextAttribute(void*, ushort);

Я также импортировал другую функцию (которую, как я уже догадался, мне нужно импортировать, поскольку у меня нет опыта работы с Win-программированием)

extern (Windows) void* GetStdHandle(uint);

И просто называется две функции

auto handle  = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, FOREGROUND_BLUE);
writeln("In Color");

Это отлично работает, большое спасибо всем за ваше время и помощь

Ответы [ 3 ]

6 голосов
/ 20 февраля 2012

Как указал CyberShadow, вы должны использовать \ x1B или \ 033. Это должно работать нормально, если вы работаете в Linux. Windows не поддерживает эти коды, хотя. Здесь вы должны использовать функцию API SetConsoleTextAttribute из std.c.windows.windows.

3 голосов
/ 19 февраля 2012

В вашей строке есть опечатка: используйте \x1B вместо \0x1B.

D не поддерживает код выхода \e в строках, используйте \x1B.

2 голосов
/ 20 февраля 2012

Вы также можете попробовать вспомогательный модуль, например http://www.digitalmars.com/d/archives/digitalmars/D/Color_your_terminal_s_output_146182.html

...