summaryrefslogtreecommitdiffstats
path: root/html/src/components/terminal/xterm/addons/zmodem.ts
diff options
context:
space:
mode:
Diffstat (limited to 'html/src/components/terminal/xterm/addons/zmodem.ts')
-rw-r--r--html/src/components/terminal/xterm/addons/zmodem.ts16
1 files changed, 16 insertions, 0 deletions
diff --git a/html/src/components/terminal/xterm/addons/zmodem.ts b/html/src/components/terminal/xterm/addons/zmodem.ts
index 3d38c5c..8571f68 100644
--- a/html/src/components/terminal/xterm/addons/zmodem.ts
+++ b/html/src/components/terminal/xterm/addons/zmodem.ts
@@ -7,6 +7,7 @@ import { TrzszFilter } from 'trzsz';
export interface ZmodeOptions {
zmodem: boolean;
trzsz: boolean;
+ windows: boolean;
onSend: () => void;
sender: (data: string | Uint8Array) => void;
writer: (data: string | Uint8Array) => void;
@@ -54,6 +55,11 @@ export class ZmodemAddon implements ITerminalAddon {
this.terminal.focus();
}
+ private addDisposableListener(target: EventTarget, type: string, listener: EventListener) {
+ target.addEventListener(type, listener);
+ this.disposables.push({ dispose: () => target.removeEventListener(type, listener) });
+ }
+
@bind
private trzszInit() {
const { terminal } = this;
@@ -68,6 +74,16 @@ export class ZmodemAddon implements ITerminalAddon {
},
sendToServer: data => sender(data),
terminalColumns: terminal.cols,
+ isWindowsShell: this.options.windows,
+ });
+ const element = terminal.element as EventTarget;
+ this.addDisposableListener(element, 'dragover', event => event.preventDefault());
+ this.addDisposableListener(element, 'drop', event => {
+ event.preventDefault();
+ this.trzszFilter
+ .uploadFiles((event as DragEvent).dataTransfer?.items as DataTransferItemList)
+ .then(() => console.log('[ttyd] upload success'))
+ .catch(err => console.log('[ttyd] upload failed: ' + err));
});
this.disposables.push(terminal.onResize(size => this.trzszFilter.setTerminalColumns(size.cols)));
}