Вывод цветного текста на консоль в Rebol

На некоторых языках я могу поместить Esc-коды вокруг текста, чтобы сделать их окрашенными на консоли/терминале Linux. Однако, похоже, это не работает в Rebol:

NORMAL: "\e[0m"
RED: "\e[0;31m"

print rejoin["\e[0;31m" "red text" "\e[0m"]

Приведенный выше код выводит только черный (обычно цветной) текст:

\e[0;31mred text\e[0m

Можно ли распечатать цветной текст с помощью Rebol на терминале Linux?


person rnso    schedule 27.09.2017    source источник
comment
Предполагая, что это консоль без графического интерфейса в Linux/Unix   -  person Geeky I    schedule 27.09.2017


Ответы (2)


Аналогичным образом вы можете использовать цветовые коды в Rebol/Red.

print "This text is ^[[0;31mred^[[0m text."

#"^[" — это Escape-символ в Rebol/Red.

Например, вы можете изменить подсказки, выделенные красным цветом, с помощью следующих кодов:

system/console/prompt: "^[[31m^[[5D>>^[(B^[[m "
system/console/result: "^[[32m^[[5D==^[(B^[[m"

В ветке Ren-C Rebol 3 вы можете изменить подсказки со следующими (похожими) кодами:

system/console/prompt: "^[[31m^[[5D>>^[(B^[[m "
system/console/result: "^[[32m^[[5D==^[(B^[[m "
person rgchris    schedule 27.09.2017
comment
Где разместить текст, который нужно раскрасить? Скажем, я хочу распечатать этот красный текст, только красный цвет окрашен в красный цвет. - person rnso; 27.09.2017

   REBOL [
        Title:  "colorebol"
        Date:   14-Jul-2013
        File:   %colorebol.reb
        Version: 1.0.0
        Purpose: "Enable switching of terminal font colors and backgrounds etc"
        Note: "Includes the clr func for clearing the screen"
    ]

    clr: does [prin "^(page)"]

    coloreb: func [
    {Use Fore/Red /Green /Yellow /Blue /Magenta /Cyan /White /Reset and even /Black. Viola! Font-color
     Similarly Background/Blue etc...,  then Style/bright /dim /normal /reset_all and finally Cyclor, which
    randomly picks a font color. It needs some polishing}
    ][cyclor print ["this is all i do. that, and provide a help doc-string"] cyclor]

    Fore: make object! [

        Colors:   ["black" "red" "green" "yellow" "blue" "magenta" "cyan" "white" "reset"]
        BLACK:    does [prin "^[[30m"]
        RED:      does [prin "^[[31m"]
        GREEN:    does [prin "^[[32m"]
        YELLOW:   does [prin "^[[33m"]
        BLUE:     does [prin "^[[34m"]
        MAGENTA:  does [prin "^[[35m"]
        CYAN:     does [prin "^[[36m"]
        WHITE:    does [prin "^[[37m"]
        RESET:    does [prin "^[[39m"]
    ]

    Background: make object! [
        Colors:   ["black" "red" "green" "yellow" "blue" "magenta" "cyan" "white" "reset"]
        BLACK:    does [prin "^[[40m"]
        RED:      does [prin "^[[41m"]
        GREEN:    does [prin "^[[42m"]
        YELLOW:   does [prin "^[[43m"]
       BLUE:     does [prin "^[[44m"]
        MAGENTA:  does [prin "^[[45m"]
        CYAN:     does [prin "^[[46m"]
        WHITE:    does [prin "^[[47m"]
        RESET:    does [prin "^[[49m"]
    ]

    Style: make object! [
        Styles:    ["bright" "dim" "normal" "reset_all"]
        BRIGHT:    does [prin "^[[1m"]
        DIM:       does [prin "^[[2m"]
        NORMAL:    does [prin "^[[22m"]
        RESET_ALL: does [prin "^[[0m"]
    ]

    cyclor: func [] [fore/(to-word fore/colors/(random/only [2 3 4 5 6 7 8]))]

Поместите это в другие ваши файлы сценариев:

do %colorebol.reb

а затем используйте его так:

        col: has [
        "Wrap the colorebol.reb wrappers to reduce visual clutter"
         color /red /green /blue /yellow /cyan /magenta /black /white][
        if red [color: 'red]
        if green [color: 'green]
        if blue [color: 'blue]
        if yellow [color: 'yellow]
        if cyan [color: 'cyan]
        if magenta [color: 'magenta]
        if black [color: 'black]
        if white [color: 'white]

        if unixy-os? [fore/(color)]
    ]

    ;test it:
    col/magenta print "magenta" ;(it works). Maybe just mod /%colorebol.reb?

Я не так хорошо разбираюсь в Rebol - я уверен, что есть более лаконичный способ. Но это очень хорошо сработало для меня в GNU/Linux. Чтобы скрипты были переносимыми, у меня есть функция определения ОС, и код раскрашивания зависит от нее.

person klausnrooster    schedule 04.10.2017
comment
Ответ на ваш вопрос — самая последняя строка кода выше. - person klausnrooster; 04.10.2017
comment
Отличный сценарий. Вам явно понравился мой вопрос. - person rnso; 04.10.2017