@@ -66,9 +66,11 @@ defmodule Asciinema.Recordings.Snapshot do
66
66
67
67
defp invert_colors ( attrs ) , do: attrs
68
68
69
- def regroup ( % __MODULE__ { mode: mode } = snapshot , mode ) , do: snapshot
69
+ def regroup ( snapshot , mode , opts \\ [ ] )
70
70
71
- def regroup ( % __MODULE__ { lines: lines } , :cells ) do
71
+ def regroup ( % __MODULE__ { mode: mode } = snapshot , mode , _opts ) , do: snapshot
72
+
73
+ def regroup ( % __MODULE__ { lines: lines } , :cells , _opts ) do
72
74
lines =
73
75
Enum . map ( lines , fn line ->
74
76
Enum . flat_map ( line , & split_segment / 1 )
@@ -77,8 +79,9 @@ defmodule Asciinema.Recordings.Snapshot do
77
79
% __MODULE__ { lines: lines , mode: :cells }
78
80
end
79
81
80
- def regroup ( % __MODULE__ { lines: lines } , :segments ) do
81
- lines = Enum . map ( lines , & group_line_segments / 1 )
82
+ def regroup ( % __MODULE__ { lines: lines } , :segments , opts ) do
83
+ split_specials = Keyword . get ( opts , :split_specials , true )
84
+ lines = Enum . map ( lines , & group_line_segments ( & 1 , split_specials ) )
82
85
83
86
% __MODULE__ { lines: lines , mode: :segments }
84
87
end
@@ -91,13 +94,13 @@ defmodule Asciinema.Recordings.Snapshot do
91
94
|> Enum . map ( & { & 1 , attrs , char_width } )
92
95
end
93
96
94
- defp group_line_segments ( [ ] ) , do: [ ]
97
+ defp group_line_segments ( [ ] , _split_specials ) , do: [ ]
95
98
96
- defp group_line_segments ( cells ) do
99
+ defp group_line_segments ( cells , split_specials ) do
97
100
{ segments , last_segment } =
98
101
Enum . reduce ( cells , { [ ] , nil } , fn { cur_char , cur_attrs , cur_char_width } = current ,
99
102
{ segments , prev } ->
100
- if cur_char_width > 1 || special_char ( cur_char ) do
103
+ if split_specials && ( cur_char_width > 1 || special_char ( cur_char ) ) do
101
104
{ [ current , prev | segments ] , nil }
102
105
else
103
106
case prev do
0 commit comments