By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
425,992 Members | 967 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 425,992 IT Pros & Developers. It's quick & easy.

Colorize expanded tabs

P: n/a
Hi all,
from a string embedding tabs I want to colorize them when expanded:

# Starting from a string:
a= '1234\t5678\t\t90\nqwerty\nasdfg'
# which embeds both tabs and lfs

# printing it you obtain:
print a
# 1234 5678 90
# qwerty
# asdfg

# print automatically expands tabs and interprets the NL.

# to colorize the expanded tabs, I tried:
print a.replace('\t',"\033[41m\t\033[0m") # 41 = red color
# instead it works (in Linux) for the \n (substituted with a red
space):
print a.replace('\n',"\033[41m \033[0m\n")

Can you help me?
Bye.

Dec 4 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
qwweeeit wrote:
Hi all,
from a string embedding tabs I want to colorize them when expanded:

# Starting from a string:
a= '1234\t5678\t\t90\nqwerty\nasdfg'
# which embeds both tabs and lfs

# printing it you obtain:
print a
# 1234 5678 90
# qwerty
# asdfg

# print automatically expands tabs and interprets the NL.

# to colorize the expanded tabs, I tried:
print a.replace('\t',"\033[41m\t\033[0m") # 41 = red color
# instead it works (in Linux) for the \n (substituted with a red
space):
print a.replace('\n',"\033[41m \033[0m\n")

Can you help me?
Bye.


If all else fails you can colorize the tabs after converting them to
spaces:

def splititer(text, token):
# A lazy iter(text.split(token)).
# Probably not worth the effort.
start = 0
while True:
try:
end = text.index(token, start)
except ValueError:
break
yield text[start:end]
start = end + len(token)
yield text[start:]

def colortabs(text, tabcolor, normcolor, tabwidth=8):
parts = splititer(text, "\t")
part = parts.next()
pos = len(part)
yield part
for part in parts:
width = tabwidth - pos % tabwidth
yield tabcolor
yield " " * width
yield normcolor
yield part
pos += width + len(part)

print "\t1234\t5678\t\t90".replace("\t", "\033[41m\t\033[0m")
print "".join(colortabs("\t1234\t5678\t\t90", "\033[41m", "\033[0m"))

Peter

Dec 4 '05 #2

P: n/a
Hi Peter,
thank you for your replay, but I was looking for a very
short routine. I even had in mind to use Linux & bash
(only one command line).
It seems that tab expansion, made by print, prevents
the working of the escape sequences for colors.
In fact, if you replace tab with a given number of spaces,
all works well.
That is :
print "\t1234\t5678\t\t90".replace("\t", "\033[41m \033[0m")
correctly colorizes in red the spaces replacing the tabs...
Unfortunately this is not tab expansion!
Bye.

Dec 4 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.