Page 1 of 2

terminal color output

Posted: Mon Jul 13, 2009 2:49 pm
by Jose Brava
Hi,

is there a simple way of getting a colored output with sbcl? I need the same output as from the

Code: Select all

echo -e "\033[34mBlah"
bash command. Any ideas ;)?

Thanks
--
JB

Re: terminal color output

Posted: Tue Jul 14, 2009 6:34 pm
by nuntius
I'm not sure why #\Esc or the like don't work, but the following does.
(format t "~C[34mBlah" (code-char 27))

Re: terminal color output

Posted: Tue Jul 14, 2009 8:15 pm
by gugamilare
nuntius wrote:I'm not sure why #\Esc or the like don't work, but the following does.
(format t "~C[34mBlah" (code-char 27))
You mean like this:

Code: Select all

(format t "~C[34mBlah" #\Esc)
? This works fine here.

Re: terminal color output

Posted: Tue Jul 14, 2009 8:57 pm
by nuntius
What I couldn't get was something like "#\Esc[34mBlah". The code-char was simply cruft from experimentation.

Re: terminal color output

Posted: Tue Jul 14, 2009 11:35 pm
by ramarren
nuntius wrote:What I couldn't get was something like "#\Esc[34mBlah". The code-char was simply cruft from experimentation.
You want cl-interpol for that sort of thing.

Re: terminal color output

Posted: Wed Jul 15, 2009 1:37 am
by Jose Brava
Thank you all for your answers, it works!

Re: terminal color output

Posted: Wed Jul 15, 2009 4:18 am
by gugamilare
nuntius wrote:What I couldn't get was something like "#\Esc[34mBlah". The code-char was simply cruft from experimentation.
Well, that wouldn't work. the '#\' is a reader macro as much as, for instance, '#()', and you can't place a vector inside a string as well.

Just note that (code-char 27) will not necessarily return #\Esc according to the ANSI spec. All implementation that I know of use either ASCII or Unicode, which means that it will work in all of them, but this is not required - as much as the ANSI spec concerns, you can create an implementation which uses characters with your own encoding.

Re: terminal color output

Posted: Wed Jul 15, 2009 6:54 pm
by nuntius
gugamilare wrote:Just note that (code-char 27) will not necessarily return #\Esc according to the ANSI spec. All implementation that I know of use either ASCII or Unicode, which means that it will work in all of them, but this is not required - as much as the ANSI spec concerns, you can create an implementation which uses characters with your own encoding.
Please... If (char-code #\Esc) is not 27, there's little chance of the terminal understanding either... A real programmer would write a raw byte array anyway. ;)

Re: terminal color output

Posted: Wed Jul 15, 2009 9:34 pm
by gugamilare
nuntius wrote:Please... If (char-code #\Esc) is not 27, there's little chance of the terminal understanding either... A real programmer would write a raw byte array anyway. ;)
Theoretically, an implementation can create some kind of internal codification and use ASCII or Unicode to communicate with the terminal (the same way that an implementation uses Unicode internally and is able to write ISO-8859-1 files). But, you are right, it would be a waste of time to create such an implementation :)

Re: terminal color output

Posted: Wed Jul 15, 2009 9:57 pm
by Paul
Jose Brava wrote:Hi,

is there a simple way of getting a colored output with sbcl? I need the same output as from the

Code: Select all

echo -e "\033[34mBlah"
bash command. Any ideas ;)?

Thanks
--
JB
http://users.actrix.co.nz/mycroft/terminfo.lisp

(ti:set-terminal)
(ti:tputs ti:set-a-foreground 4)