我们从Python开源项目中,提取了以下10个代码示例,用于说明如何使用urwid.AttrSpec()。
def read_config(): counter = 0 new_config = CONFIG # make a copy of the default config with open(CONFIG_PATH, 'r') as f: lines = [x.strip('\n') for x in f.readlines()] # strip any unempty lines for line in lines: counter += 1 if line.strip() and line.lstrip()[0] != '#': # skip lines with '#' at beginning split = line.split(':') # break the line into two parts item and attributes item = split[0].strip() if item in palette_items: # if this line is a palette line attribs = split[1].strip().split(",") try: # try creating an urwid attr spec a = urwid.AttrSpec(attribs[0].strip(), attribs[1].strip(), colors=256) if attribs[2] not in text_options: attribs[2] = '' new_config[item] = [item]+[a.foreground, a.background, attribs[2]] # add this to the new config except: print("error on line" + str(counter)) else: # this line isn't a palette lime if item in new_config: # if this item exists in config dict new_config[item] = split[1].strip() # redefine it in the dict return new_config
def background_chart(chart, foreground, colors): """ Create text markup for a background colour chart chart -- palette chart as string foreground -- colour to use for foreground of chart colors -- number of colors (88 or 256) This will remap 8 <= colour < 16 to high-colour versions in the hopes of greater compatibility """ def convert_background(entry): try: attr = urwid.AttrSpec(foreground, entry, colors) except urwid.AttrSpecError: return None # fix 8 <= colour < 16 if colors > 16 and attr.background_basic and \ attr.background_number >= 8: # use high-colour with same number entry = 'h%d'%attr.background_number attr = urwid.AttrSpec(foreground, entry, colors) return attr, entry return parse_chart(chart, convert_background)
def pixel_process(color): return (urwid.AttrSpec(color, color, 256), ' ')
def register_palette(self): """Converts pygmets style to urwid palatte""" default = 'default' palette = list(self.palette) mapping = CONFIG['rgb_to_short'] for tok in self.style.styles.keys(): for t in tok.split()[::-1]: st = self.style.styles[t] if '#' in st: break if '#' not in st: st = '' st = st.split() st.sort() # '#' comes before '[A-Za-z0-9]' if len(st) == 0: c = default elif st[0].startswith('bg:'): c = default elif len(st[0]) == 7: c = 'h' + rgb_to_short(st[0][1:], mapping)[0] elif len(st[0]) == 4: c = 'h' + rgb_to_short(st[0][1]*2 + st[0][2]*2 + st[0][3]*2, mapping)[0] else: c = default a = urwid.AttrSpec(c, default, colors=256) row = (tok, default, default, default, a.foreground, default) palette.append(row) self.loop.screen.register_palette(palette)
def foreground_chart(chart, background, colors): """ Create text markup for a foreground colour chart chart -- palette chart as string background -- colour to use for background of chart colors -- number of colors (88 or 256) """ def convert_foreground(entry): try: attr = urwid.AttrSpec(entry, background, colors) except urwid.AttrSpecError: return None return attr, entry return parse_chart(chart, convert_foreground)
def _attr_to_escape(self, a): if a in self._pal_escape: return self._pal_escape[a] elif isinstance(a, urwid.AttrSpec): return self._attrspec_to_escape(a) # undefined attributes use default/default # TODO: track and report these return self._attrspec_to_escape( urwid.AttrSpec('default','default'))
def _attrspec_to_escape(self, a): """ Convert AttrSpec instance a to an escape sequence for the terminal >>> s = Screen() >>> s.set_terminal_properties(colors=256) >>> a2e = s._attrspec_to_escape >>> a2e(s.AttrSpec('brown', 'dark green')) '\\x1b[0;33;42m' >>> a2e(s.AttrSpec('#fea,underline', '#d0d')) '\\x1b[0;38;5;229;4;48;5;164m' """ if a.foreground_high: fg = "38;5;%d" % a.foreground_number elif a.foreground_basic: if a.foreground_number > 7: if self.bright_is_bold: fg = "1;%d" % (a.foreground_number - 8 + 30) else: fg = "%d" % (a.foreground_number - 8 + 90) else: fg = "%d" % (a.foreground_number + 30) else: fg = "39" st = "1;" * a.bold + "4;" * a.underline + "7;" * a.standout if a.background_high: bg = "48;5;%d" % a.background_number elif a.background_basic: if a.background_number > 7: # this doesn't work on most terminals bg = "%d" % (a.background_number - 8 + 100) else: bg = "%d" % (a.background_number + 40) else: bg = "49" return urwid.escape.ESC + "[0;%s;%s%sm" % (fg, st, bg)
def translate_color(raw_text): formated_text = [] raw_text = raw_text.decode("utf-8") for at in raw_text.split("\x1b["): try: attr, text = at.split("m",1) except: attr = '0' text = at.split("m",1) list_attr = [ int(i) for i in attr.split(';') ] list_attr.sort() fg = -1 bg = -1 for elem in list_attr: if elem <= 29: pass elif elem <= 37: fg = elem - 30 elif elem <= 47: bg = elem - 40 elif elem <= 94: fg = fg + 8 elif elem >= 100 and elem <= 104: bg = bg + 8 fgcolor = color_list[fg] bgcolor = color_list[bg] if fg < 0: fgcolor = '' if bg < 0: bgcolor = '' if list_attr == [0]: fgcolor = '' bgcolor = '' formated_text.append((urwid.AttrSpec(fgcolor, bgcolor), text)) return formated_text # vim: ai ts=4 sw=4 et sts=4