The Computer Oracle

How can I change the colors of my xterm using Ansi escape sequences?

--------------------------------------------------
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
and get $2,000 discount on your first invoice
--------------------------------------------------

Music by Eric Matyas
https://www.soundimage.org
Track title: Lost Jungle Looping

--

Chapters
00:00 How Can I Change The Colors Of My Xterm Using Ansi Escape Sequences?
00:25 Accepted Answer Score 35
02:35 Answer 2 Score 31
03:37 Answer 3 Score 2
04:03 Answer 4 Score 0
04:29 Thank you

--

Full question
https://superuser.com/questions/270214/h...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#colors #xterm #ansi

#avk47



ACCEPTED ANSWER

Score 35


ANSI escape sequences consist of a sequence of characters beginning with the Escape character, character 27. The next character is often (though not always) an open-square-bracket: [

The echo command can send escape characters if you specify -e and use \e for escape.

The ANSI standard defines 8 colours, plus a bright mode, giving a total of 16 posibilities. The sequence is:

\e[<number>m

Where <number> is one of:

Foreground:

  • 30 Black
  • 31 Red
  • 32 Green
  • 33 Yellow
  • 34 Blue
  • 35 Magenta
  • 36 Cyan
  • 37 White

Background:

  • 40 Black
  • 41 Red
  • 42 Green
  • 43 Yellow
  • 44 Blue
  • 45 Magenta
  • 46 Cyan
  • 47 White

  • 0 Reset all

  • 1 Bold

So to make your foreground red and your background yellow:

$ echo -e "\e[31m\e[43m"

And to enable bold:

$ echo -e "\e[1m"

Of course, you can combine them all together:

$ echo -e "\e[31m\e[43m\e[1m"

There are many many other escape codes for doing other things.

For example - clear the screen and move the cursor to the top-left:

$ echo -e "\e[2J\e[1;1H"

Which is useful when changing the colour:

$ echo -e "\e[31m\e[43m\e[1m\e[2J\e[1;1H"

Which will change the colours, clear the screen, and put the cursor at the top-left. Well, almost the top left. Echo puts a carriage return in, so it moves down a line. You can add -n to echo to prevent this if you're fussy.

If you mess it all up and can't see what you're typing you can reset the terminal colours to normal by pressing:

Ctrl+v [ 0 m Return

At what you hope is the command prompt. It will whinge about an unknown command, but you will be able to see what you're doing again.




ANSWER 2

Score 31


Note that modern Xterms support 32-bit color!

Simple example. To set a nice dark purple background (hey, each to his own) of value #53186f, you do:

echo -ne "\033]11;#53186f\007"

Note that this instantly changes the color of the whole window, not just of the subsequent text. This is especially nice for making a window obviously different after ssh'ing to a server (for example). Put the above 'echo' into your .bashrc and your terminal automatically changes colors when you log into that server (but won't change back when you Ctrl-D out)

You can spend HOURS on the net looking for this - most docs only talk about the original 16 ANSI colors.

Sources: http://www.steike.com/code/xterm-colors/ and https://web.archive.org/web/20110716135151/http://www.steike.com/code/xterm-colors/ (look under "Operating System Controls")

Please note: the escape sequence above is valid for XTerms, and may not work for other implementations of "XTerm-like" windowing terminal emulators that may "look" like an XTerm. For example, "gnome-terminal" or "konsole" have different escape sequences, or may not implement color change at all.




ANSWER 3

Score 2


NOTE: The "^[" is the escape character, and is inserted with a CTRL-V,CTRL-[, and ^G is a bell character, inserted with CTRL-V,CTRL-G

The following block is in my .bash_profile and ensures that my xterms on this system are ALWAYS white-on-black, even after logging onto another system that may have changed my colors.

perl -e '$e=chr(27);print "${e}[37m ${e}[40m ${e}[2J ${e}[1;1H";'
export PS1='^[[37m^[]0;${HOST}: ${PWD}^G^[[40m${USER}@${HOST}:${PWD}
--> '



ANSWER 4

Score 0


check also a project ScriptEchoColor
it is completely made in bash scripts
it has packages for ubuntu here
but these scripts can be installed on any distro if you know how to (latest can be downloaded from its git also).

you can use shortened or extended color names like:

echoc "@rRedFg@{/blue}BlueFg@{/GREEN}GreenBg"

a sample: enter image description here

Also, make it sure to take a look at xtermcontrol, for a more extensive control over the xterm on itself (not only the characters).