summaryrefslogtreecommitdiffstats
path: root/html/src/components/terminal/xterm/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'html/src/components/terminal/xterm/index.ts')
-rw-r--r--html/src/components/terminal/xterm/index.ts19
1 files changed, 15 insertions, 4 deletions
diff --git a/html/src/components/terminal/xterm/index.ts b/html/src/components/terminal/xterm/index.ts
index e6809e4..06d97ee 100644
--- a/html/src/components/terminal/xterm/index.ts
+++ b/html/src/components/terminal/xterm/index.ts
@@ -44,6 +44,7 @@ export interface ClientOptions {
enableTrzsz: boolean;
enableSixel: boolean;
titleFixed?: string;
+ isWindows: boolean;
}
export interface FlowControl {
@@ -94,7 +95,10 @@ export class Xterm {
private writeFunc = (data: ArrayBuffer) => this.writeData(new Uint8Array(data));
- constructor(private options: XtermOptions, private sendCb: () => void) {}
+ constructor(
+ private options: XtermOptions,
+ private sendCb: () => void
+ ) {}
dispose() {
for (const d of this.disposables) {
@@ -199,13 +203,13 @@ export class Xterm {
terminal.write(data, () => {
this.pending = Math.max(this.pending - 1, 0);
if (this.pending < lowWater) {
- this.socket?.send(textEncoder.encode(Command.PAUSE));
+ this.socket?.send(textEncoder.encode(Command.RESUME));
}
});
this.pending++;
this.written = 0;
if (this.pending > highWater) {
- this.socket?.send(textEncoder.encode(Command.RESUME));
+ this.socket?.send(textEncoder.encode(Command.PAUSE));
}
} else {
terminal.write(data);
@@ -218,7 +222,10 @@ export class Xterm {
if (socket?.readyState !== WebSocket.OPEN) return;
if (typeof data === 'string') {
- socket.send(textEncoder.encode(Command.INPUT + data));
+ const payload = new Uint8Array(data.length * 3 + 1);
+ payload[0] = Command.INPUT.charCodeAt(0);
+ const stats = textEncoder.encodeInto(data, payload.subarray(1));
+ socket.send(payload.subarray(0, (stats.written as number) + 1));
} else {
const payload = new Uint8Array(data.length + 1);
payload[0] = Command.INPUT.charCodeAt(0);
@@ -320,6 +327,7 @@ export class Xterm {
this.zmodemAddon = new ZmodemAddon({
zmodem: prefs.enableZmodem,
trzsz: prefs.enableTrzsz,
+ windows: prefs.isWindows,
onSend: this.sendCb,
sender: this.sendData,
writer: this.writeData,
@@ -370,6 +378,9 @@ export class Xterm {
this.titleFixed = value;
document.title = value;
break;
+ case 'isWindows':
+ if (value) console.log('[ttyd] is windows');
+ break;
default:
console.log(`[ttyd] option: ${key}=${JSON.stringify(value)}`);
if (terminal.options[key] instanceof Object) {