#smalltalk #ansi
#smalltalk #ansi-escape
Вопрос:
Я пытаюсь создать консольную программу, которая использует управляющие коды ANSI в GNU Smalltalk. Кажется, я не могу понять, как печатать объект string, отформатированный с помощью управляющих кодов ANSI. Я пробовал следующее.
'x1b[31mHi' displayNl
При этом выводится вся строка, включая управляющий код, без какого-либо форматирования. Я ожидал, что это выведет «Hi» красным цветом (а затем все остальное в консоли после этого, поскольку я не сбросил цвет.)
Немного погуглив, я смог найти пару проблем в списках рассылки, где люди пытались создавать такие вещи, как новые строки, используя » n». В большинстве ответов использовался метод cr объекта Transcript, но я ничего не нашел о цветах в классе textCollector.
Похоже, создать мой собственный модуль на C для достижения этой функциональности не должно быть так уж сложно, но сначала я хотел бы знать, есть ли способ получше.
Я знаю о привязках ncurses, но я не уверен, что это было бы практично для простого окрашивания определенных фрагментов текста в программе. Итак, существует ли стандартный способ вывода цветного текста на терминал в GNU Smalltalk с использованием управляющих последовательностей ANSI?
Комментарии:
1. Похоже, что комбинация
expandMacrosWith
и приведение символов к строкам сasString
может сработать.
Ответ №1:
В итоге я получил ответ в списке рассылки GNU Smalltalk. Похоже, вы можете использовать оператор интерполяции для достижения этой цели.
Например, ('%1[31mHi' % #($<16r1B>)) displayNl.
изменил бы цвет на красный, а ('%1[34mHi' % #($<16r1B>)) displayNl.
изменил бы цвет на синий.
По сути, оператор % ищет последовательности, которые выглядят как «% (число)», и заменяет их объектами в массиве справа от оператора. В нашем случае массив содержит один элемент, который является управляющим символом ascii в шестнадцатеричном формате. Таким образом, «%1» в «%1[31mHi’ заменяется управляющим символом, а затем печатается.
(Этот ответ был украден почти дословно у Паоло из списка рассылки GNU Smalltalk.)