Вывод полужирного текста на консоль в C (на Mac — Xcode)

В последнее время я экспериментировал с кодированием базовых программ на C с помощью Xcode и обнаружил, что ищу способы выделить текст курсивом, сделать его полужирным или цветным. Несмотря на многочисленные подобные сообщения о SO, не было ни одного, чтобы оказаться полезным для моей ситуации, однако я нашел много примеров для этого на С++ (если это что-то значит). Возможно, невозможно отформатировать текст в C с помощью Xcode?

В частности, я читал об использовании escape-кодирования ANSI, но когда я использую этот код: printf("\033[32;1mTest"), я получаю на выходе это: [32;1mTest. Я считаю, что это связано с тем, что escape-кодирование ANSI не предназначено для использования в MacOS (только в Linux).

В частности, я ищу способ вывода форматированного текста на консоль с помощью printf или другого метода, выводящего текст на консоль на Mac. (Возможно ли это?...)

Не стесняйтесь запрашивать любую дополнительную информацию по мере необходимости.


person Nik    schedule 22.11.2016    source источник
comment
Попробуйте использовать \e[32;1m вместо \033[32;1m, это более универсально. Также вам не нужен пробел между «m» и «Test».   -  person MD XF    schedule 23.11.2016
comment
@MDXF Я только что попробовал это, и это не дало никакого эффекта. Что касается лишнего пробела, это была просто ошибка при написании кода в вопросе, но спасибо, что напомнили мне.   -  person Nik    schedule 23.11.2016
comment
Нет проблем, я не особенно разбираюсь в Mac OS, просто подумал, что это может помочь.   -  person MD XF    schedule 23.11.2016
comment
Пока вы это делаете, вы можете попробовать \x1b вместо \033 и \e, я знаю, что это проблема в других языках программирования, но это может быть применимо.   -  person MD XF    schedule 23.11.2016
comment
@MDXF К сожалению, ни один из них не дает другого результата. Если вам нужна дополнительная информация, не стесняйтесь спрашивать   -  person Nik    schedule 23.11.2016
comment
Является ли код, который вы используете, просто оператором printf внутри приложения типа hello-world? Или у вас есть еще код?   -  person MD XF    schedule 23.11.2016
comment
@MDXF В настоящее время это игра в блэкджек, но даже когда я пробую это в простой программе только с printf, результат тот же.   -  person Nik    schedule 23.11.2016
comment
Вы запускаете его в XCode и отображаете во внутренней консоли или запускаете из командной строки? Внутренняя консоль отображает escape-коды в виде текста (то есть того, что вы там видите), а не интерпретирует их как команды для изменения вывода.   -  person Petesh    schedule 23.11.2016
comment
@Petesh Я запускаю его из внутренней консоли. Я не должен быть? Я просто нажимаю CMD-R, чтобы запустить программу   -  person Nik    schedule 23.11.2016
comment
Внутренняя консоль не интерпретирует escape-коды, поэтому вы не увидите отображения цветов, выделенных жирным шрифтом, то есть вы не увидите ожидаемого поведения. Эскейп-коды прекрасно работают с terminal. Вы можете использовать схему редактирования, чтобы заставить его работать в терминале из xcode   -  person Petesh    schedule 23.11.2016
comment
@Петеш Спасибо! Сделайте ответ, объясняющий это, и я приму его!   -  person Nik    schedule 23.11.2016
comment
@Petesh Дополнительный вопрос: возможно ли вообще выделить текст цветом/жирным шрифтом/курсивом в консоли Xcode?   -  person Nik    schedule 23.11.2016
comment
Не то чтобы я в курсе. Поскольку стандартный механизм изменения цветов и т. д. заключается в использовании escape-кодов, если они игнорируются при выводе, вы не сможете этого сделать.   -  person Petesh    schedule 23.11.2016


Ответы (1)


Внутренняя консоль по умолчанию для XCode не является терминалом, поэтому она не интерпретирует управляющие коды. В результате вы не можете увидеть эффекты изменения жирного шрифта/цвета.

В XCode 8 есть возможность отредактировать схему, чтобы программа запускалась в терминале. Щелкните всплывающее меню справа от кнопки «Стоп» и выберите «Редактировать схему…».

Редактировать цель раскрывающегося списка схемы

Как только вы откроете экран «Редактировать схему», выберите options, затем выберите «Выполнить в терминале».

введите здесь описание изображения

Если вы просто пытаетесь запустить его с терминала; вы можете запустить терминал отдельно, затем перетащить бинарник из раздела "Продукты" навигатора проекта в терминал (он распечатает полный путь к бинарнику в терминале, и вы сможете запустить его оттуда).

Цветные эмодзи правильно отображаются на консоли; просто он не учитывает escape-коды цвета.

person Petesh    schedule 23.11.2016
comment
Эта опция не существует в Xcode 9. - person Aidan; 28.12.2020
comment
Этот параметр предназначен только для приложений Mac и присутствует даже в Xcode 12.3. - person Petesh; 28.12.2020
comment
Да, он вернулся в Xcode 12. По какой-то причине его не было в Xcode 9. - person Aidan; 22.01.2021