Skip to content

Commit 5141a91

Browse files
committed
add range to IHTMLSerializeOptions
1 parent 9fce067 commit 5141a91

3 files changed

Lines changed: 27 additions & 0 deletions

File tree

addons/addon-serialize/src/SerializeAddon.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,21 @@ describe('SerializeAddon', () => {
148148
assert.equal((output.match(/<div><span>&lt;a>&amp;pi;<\/span><\/div>/g) || []).length, 1, output);
149149
});
150150

151+
it('serializes rows within a provided range', async () => {
152+
await writeP(terminal, 'hello\r\nworld');
153+
154+
const output = serializeAddon.serializeAsHTML({
155+
range: {
156+
start: 0,
157+
end: 0
158+
}
159+
});
160+
const rowMatches = output.match(/<div><span>.*?<\/span><\/div>/g) || [];
161+
assert.equal(rowMatches.length, 1, output);
162+
assert.ok(rowMatches[0]?.includes('hello'));
163+
assert.ok(!output.includes('world'));
164+
});
165+
151166
it('cells with bold styling', async () => {
152167
await writeP(terminal, ' ' + sgr('1') + 'terminal' + sgr('22') + ' ');
153168

addons/addon-serialize/src/SerializeAddon.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,13 @@ export class SerializeAddon implements ITerminalAddon , ISerializeApi {
450450
const buffer = terminal.buffer.active;
451451
const handler = new HTMLSerializeHandler(buffer, terminal, options);
452452
const onlySelection = options.onlySelection ?? false;
453+
const range = options.range;
454+
if (range) {
455+
return handler.serialize({
456+
start: { x: 0, y: typeof range.start === 'number' ? range.start : range.start.line },
457+
end: { x: terminal.cols, y: typeof range.end === 'number' ? range.end : range.end.line }
458+
});
459+
}
453460
if (!onlySelection) {
454461
const maxRows = buffer.length;
455462
const scrollback = options.scrollback;

addons/addon-serialize/typings/addon-serialize.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@ declare module '@xterm/addon-serialize' {
9090
* Whether to include the global background of the terminal. False by default.
9191
*/
9292
includeGlobalBackground: boolean;
93+
94+
/**
95+
* The row range to serialize. This is prioritized over {@link onlySelection}.
96+
*/
97+
range?: ISerializeRange;
9398
}
9499

95100
export interface ISerializeRange {

0 commit comments

Comments
 (0)