Skip to content
This repository was archived by the owner on Jun 16, 2020. It is now read-only.

Commit 61aef23

Browse files
committed
Add fallback to non bright colors for 8-color palette
1 parent 49c7874 commit 61aef23

File tree

7 files changed

+38
-17
lines changed

7 files changed

+38
-17
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ A Linux terminal recorder written in Python which renders your command
55
line sessions as standalone SVG animations.
66

77
<p align="center">
8-
<img src="https://cdn.rawgit.com/nbedos/termtosvg/0.2.0/examples/awesome.svg">
8+
<img src="https://cdn.rawgit.com/nbedos/termtosvg/0.2.1/examples/awesome.svg">
99
</p>
1010

11-
More examples of recordings [here](https://github.com/nbedos/termtosvg/blob/0.2.0/examples/examples.md)
11+
More examples of recordings [here](https://github.com/nbedos/termtosvg/blob/0.2.1/examples/examples.md)
1212

1313
## Motivation
1414
I really like the clean look of SVG animations and I also wanted to see

examples/examples.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
# Examples
22
## awesome.svg
33
<p align="center">
4-
<img src="https://cdn.rawgit.com/nbedos/termtosvg/0.2.0/examples/awesome.svg">
4+
<img src="https://cdn.rawgit.com/nbedos/termtosvg/0.2.1/examples/awesome.svg">
55
</p>
66

77
## colors.svg
88
<p align="center">
9-
<img src="https://cdn.rawgit.com/nbedos/termtosvg/0.2.0/examples/colors.svg">
9+
<img src="https://cdn.rawgit.com/nbedos/termtosvg/0.2.1/examples/colors.svg">
1010
</p>
1111

1212
## ipython.svg
1313
<p align="center">
14-
<img src="https://cdn.rawgit.com/nbedos/termtosvg/0.2.0/examples/ipython.svg">
14+
<img src="https://cdn.rawgit.com/nbedos/termtosvg/0.2.1/examples/ipython.svg">
1515
</p>
1616

1717
## htop.svg
1818
<p align="center">
19-
<img src="https://cdn.rawgit.com/nbedos/termtosvg/0.2.0/examples/htop.svg">
19+
<img src="https://cdn.rawgit.com/nbedos/termtosvg/0.2.1/examples/htop.svg">
2020
</p>
2121

2222
## unittest.svg
2323
<p align="center">
24-
<img src="https://cdn.rawgit.com/nbedos/termtosvg/0.2.0/examples/unittest.svg">
24+
<img src="https://cdn.rawgit.com/nbedos/termtosvg/0.2.1/examples/unittest.svg">
2525
</p>

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
setup(
66
name='termtosvg',
7-
version='0.2.0',
7+
version='0.2.1',
88
description='Record terminal sessions as SVG animations',
99
long_description='A Linux terminal recorder written in Python '
1010
'which renders your command line sessions as '

termtosvg/anim.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,18 @@ def from_pyte(cls, char, palette):
4646
else:
4747
search_color = char.fg
4848

49-
if search_color in color_numbers and color_numbers[search_color] in palette:
50-
# Named colors
51-
text_color = palette[color_numbers[search_color]]
49+
if search_color in color_numbers:
50+
# NAMED COLORS
51+
if color_numbers[search_color] in palette:
52+
# Case for color numbers < 8 (since the palette has at least the first 8 colors)
53+
# or for 16-color palette (all named colors in the palette)
54+
text_color = palette[color_numbers[search_color]]
55+
else:
56+
# Case for color numbers >= 8 and 8-color palette: fallback to non bright color
57+
text_color = palette[color_numbers[char.fg]]
5258
elif len(char.fg) == 6:
53-
# Hexadecimal colors
54-
# raise ValueError if char.bg hexadecimal number
59+
# HEXADECIMAL COLORS
60+
# raise ValueError if char.fg is not an hexadecimal number
5561
int(char.fg, 16)
5662
text_color = '#{}'.format(char.fg)
5763
else:
@@ -65,7 +71,7 @@ def from_pyte(cls, char, palette):
6571
background_color = palette[color_numbers[char.bg]]
6672
elif len(char.bg) == 6:
6773
# Hexadecimal colors
68-
# raise ValueError if char.bg hexadecimal number
74+
# raise ValueError if char.bg is not an hexadecimal number
6975
int(char.bg, 16)
7076
background_color = '#{}'.format(char.bg)
7177
else:

termtosvg/asciicast.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ def from_xresources(cls, xresources):
6767
res_db = rdb.ResourceDB(string=xresources)
6868

6969
colors = {}
70-
names = [('foreground', True), ('background', True)] + \
71-
[('color{}'.format(index), index < 8) for index in range(16)]
72-
for name, required in names:
70+
names = ['foreground', 'background'] + \
71+
['color{}'.format(index) for index in range(16)]
72+
for name in names:
7373
res_name = 'termtosvg.' + name
7474
res_class = res_name
7575
colors[name] = res_db.get(res_name, res_class, None)

tests/test___main__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import termtosvg.__main__ as __main__
1010
import termtosvg.term as term
11+
from tests.test_term import xresources_minimal
1112

1213
SHELL_COMMANDS = [
1314
'echo $SHELL && sleep 0.1;\r\n',
@@ -19,6 +20,8 @@
1920
'a',
2021
'm',
2122
'i\r\n',
23+
"\033[1;31mbright red fg\033[0m\r\n",
24+
"\033[1;41mbright red bg\033[0m\r\n",
2225
'exit;\r\n'
2326
]
2427

@@ -121,4 +124,11 @@ def test_main(self):
121124
get_x_mock = Mock(return_value=xresources_dracula)
122125
with unittest.mock.patch('termtosvg.term._get_xresources', get_x_mock):
123126
args = ['termtosvg', svg_filename, '--theme', 'circus', '--verbose']
127+
TestMain.run_main(SHELL_COMMANDS, args)
128+
129+
with self.subTest(case='8 color palette'):
130+
# Mock color info gathering
131+
get_x_mock = Mock(return_value=xresources_minimal)
132+
with unittest.mock.patch('termtosvg.term._get_xresources', get_x_mock):
133+
args = ['termtosvg', svg_filename]
124134
TestMain.run_main(SHELL_COMMANDS, args)

tests/test_anim.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ def test_from_pyte(self):
2626
pyte.screens.Char('G', '008700', 'ABCDEF'),
2727
# Bright and bold
2828
pyte.screens.Char('H', 'brightgreen', 'ABCDEF', bold=True),
29+
# Bright but not in the palette --> fallback to the non bright color
30+
# for compatibility with an 8-color palette (issue #1)
31+
pyte.screens.Char('I', 'brown', 'ABCDEF', bold=True),
2932
]
3033

3134
char_cells = [
@@ -37,12 +40,14 @@ def test_from_pyte(self):
3740
anim.CharacterCell('F', 'foreground', 'background'),
3841
anim.CharacterCell('G', '#008700', '#ABCDEF'),
3942
anim.CharacterCell('H', 'color10', '#ABCDEF'),
43+
anim.CharacterCell('I', 'color3', '#ABCDEF'),
4044
]
4145

4246
palette = {
4347
'foreground': 'foreground',
4448
'background': 'background',
4549
1: 'color1',
50+
3: 'color3',
4651
4: 'color4',
4752
9: 'color9',
4853
10: 'color10',

0 commit comments

Comments
 (0)