Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions addons/addon-serialize/src/SerializeAddon.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,21 @@ describe('SerializeAddon', () => {
assert.equal((output.match(/<div><span>&lt;a>&amp;pi;<\/span><\/div>/g) || []).length, 1, output);
});

it('serializes rows within a provided range', async () => {
await writeP(terminal, 'hello\r\nworld');

const output = serializeAddon.serializeAsHTML({
range: {
start: 0,
end: 0
}
});
const rowMatches = output.match(/<div><span>.*?<\/span><\/div>/g) || [];
assert.equal(rowMatches.length, 1, output);
assert.ok(rowMatches[0]?.includes('hello'));
assert.ok(!output.includes('world'));
});

it('cells with bold styling', async () => {
await writeP(terminal, ' ' + sgr('1') + 'terminal' + sgr('22') + ' ');

Expand Down
7 changes: 7 additions & 0 deletions addons/addon-serialize/src/SerializeAddon.ts
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,13 @@ export class SerializeAddon implements ITerminalAddon , ISerializeApi {
const buffer = terminal.buffer.active;
const handler = new HTMLSerializeHandler(buffer, terminal, options);
const onlySelection = options.onlySelection ?? false;
const range = options.range;
if (range) {
return handler.serialize({
start: { x: 0, y: typeof range.start === 'number' ? range.start : range.start.line },
end: { x: terminal.cols, y: typeof range.end === 'number' ? range.end : range.end.line }
});
}
if (!onlySelection) {
const maxRows = buffer.length;
const scrollback = options.scrollback;
Expand Down
5 changes: 5 additions & 0 deletions addons/addon-serialize/typings/addon-serialize.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,11 @@ declare module '@xterm/addon-serialize' {
* Whether to include the global background of the terminal. False by default.
*/
includeGlobalBackground: boolean;

/**
* The row range to serialize. This is prioritized over {@link onlySelection}.
*/
range?: ISerializeRange;
}

export interface ISerializeRange {
Expand Down
Loading