Skip to content

Commit 6c79a46

Browse files
authored
Merge pull request #5436 from xtermjs/merogge/serialize-range
add range to IHTMLSerializeOptions
2 parents 9fce067 + 4a62856 commit 6c79a46

3 files changed

Lines changed: 34 additions & 0 deletions

File tree

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,22 @@ 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, 'bye hello\r\nworld');
153+
const output = serializeAddon.serializeAsHTML({
154+
range: {
155+
startLine: 0,
156+
endLine: 0,
157+
startCol: 4
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('bye'));
164+
assert.ok(!output.includes('world'));
165+
});
166+
151167
it('cells with bold styling', async () => {
152168
await writeP(terminal, ' ' + sgr('1') + 'terminal' + sgr('22') + ' ');
153169

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: range.startCol, y: typeof range.startLine === 'number' ? range.startLine : range.startLine },
457+
end: { x: terminal.cols, y: typeof range.endLine === 'number' ? range.endLine : range.endLine }
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: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,17 @@ 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 range to serialize. This is prioritized over {@link onlySelection}.
96+
*/
97+
range?: ISerializeBufferRange;
98+
}
99+
100+
export interface ISerializeBufferRange {
101+
startLine: number;
102+
endLine: number;
103+
startCol: number;
93104
}
94105

95106
export interface ISerializeRange {

0 commit comments

Comments
 (0)