Цветной вывод терминала из Fortran

моя программа выводит состояние вычислений на терминал и включает в себя довольно много информации. Я хотел бы, если это возможно, части цветового кода текста.

Я видел, как это можно сделать в Bash и c++, ссылаясь на потоки на этом сайте. Однако я не смог использовать ничего из этого для достижения того же результата в Fortran (modern). Например, я попробовал этот пример кода, который, как я думал, должен работать:

PROGRAM test
    PRINT*, 'A great color is 3[95m pink 3[0m.'
END PROGRAM test

Я ожидал бы выхода быть "большим цветом-розовый", где розовый-розовый. Вместо этого я получаю "отличный цвет - 33[95m pink 33[0m". Я не понимаю, чего мне не хватает.

если я заменю строку печати в коде на: CALL EXECUTE_COMMAND_LINE ("echo" отличный цвет - 33[95m pink 33[0m.'") затем я получаю результат по желанию. Однако я не хотел бы продолжать вызывать echo из моего кода. Есть ли способ получить цветной выход?

спасибо!

4 ответов


представление escape-символа как "\033", похоже, не работает для вас. У меня нет fortran, чтобы проверить, но вы можете попробовать явно использовать символ вместо бегства в стиле c, вызвав char функция преобразования, т. е. сделать фактический символ, вызвав char(27) и используйте его в выходную строку в правильных местах.


Это старый вопрос, но я решил, что брошу свой ответ, если кто-нибудь придет позже (как я это сделал), ища ответ на это.

у меня была аналогичная проблема, как и у вас, пытаясь заставить escape-последовательности работать. Я пошла к man-страница для gfortran. поиск "escape" приведет меня к опции компилятора "- fbackslash". С мужской страницы:

изменить трактовку символы в строковых литералах от один символ обратной косой черты для escape-символов "C-style". Этот следующие комбинации развернуты "\a", "\b", "\f", "\n", " \r", "\t"," \v", " \ "и" \0 " для предупреждения символов ASCII, backspace, подача формы, новая строка, возврат каретки, горизонтальная вкладка, вертикальная вкладка, обратная косая черта и ноль соответственно. Кроме того, "\x " nn,"\u " nnnn и "\U " nnnnnnnnnn (где каждый n-шестнадцатеричная цифра) переводятся в символы Юникода, соответствующие указанным кодовым точкам. Все другой комбинации символов, которым предшествует\, являются нерасширенными.

Итак, чтобы получить escape-последовательности для работы в Fortran, все, что нам нужно сделать, это скомпилировать с этой опцией. Единственное, что отличается, - это то, что мы должны использовать шестнадцатеричные числа вместе с x вместо восьмеричных чисел. В этом конкретном случае вместо 3 мы используем:\x1B. Например, PRINT *, "\x1B[31mThis text is red.\x1B[0m напечатает текст красным цветом.

Я думаю, что этот метод определенно предпочтительнее, чем объединение группы индивидуально-определенные символы, каждый раз, когда мы хотим использовать цвета.


Если вы компилируете с ifort, вам нужно скомпилировать с помощью "- assume bscc", только тогда вы можете использовать

PRINT*, 'A great color is 3[95m pink 3[0m.'

кодексы:

[90m=dark grey           [30m=black
[91m=peach               [31m=red
[92m=light green         [32m=green
[93m=light yellow        [33m=yellow
[94m=light blue          [34m=blue
[95m=pink                [35m=purple
[96m=light aqua          [36m=aqua
[97m=pearl white

Я только что наткнулся на правила модуль / библиотека, которая, кажется, делает именно то, что вы хотите. Я еще не использовал его, но скоро сделаю это, так как форматирование вывода терминала из моих программ Fortran было бы очень полезно.