summaryrefslogtreecommitdiffstats
path: root/html/src/components/terminal/xterm/addons
diff options
context:
space:
mode:
Diffstat (limited to 'html/src/components/terminal/xterm/addons')
-rw-r--r--html/src/components/terminal/xterm/addons/overlay.ts2
-rw-r--r--html/src/components/terminal/xterm/addons/zmodem.ts20
2 files changed, 20 insertions, 2 deletions
diff --git a/html/src/components/terminal/xterm/addons/overlay.ts b/html/src/components/terminal/xterm/addons/overlay.ts
index 6fa5a92..74da079 100644
--- a/html/src/components/terminal/xterm/addons/overlay.ts
+++ b/html/src/components/terminal/xterm/addons/overlay.ts
@@ -1,7 +1,7 @@
// ported from hterm.Terminal.prototype.showOverlay
// https://chromium.googlesource.com/apps/libapps/+/master/hterm/js/hterm_terminal.js
import { bind } from 'decko';
-import { ITerminalAddon, Terminal } from 'xterm';
+import { ITerminalAddon, Terminal } from '@xterm/xterm';
export class OverlayAddon implements ITerminalAddon {
private terminal: Terminal;
diff --git a/html/src/components/terminal/xterm/addons/zmodem.ts b/html/src/components/terminal/xterm/addons/zmodem.ts
index 3d38c5c..52627ef 100644
--- a/html/src/components/terminal/xterm/addons/zmodem.ts
+++ b/html/src/components/terminal/xterm/addons/zmodem.ts
@@ -1,12 +1,14 @@
import { bind } from 'decko';
import { saveAs } from 'file-saver';
-import { IDisposable, ITerminalAddon, Terminal } from 'xterm';
+import { IDisposable, ITerminalAddon, Terminal } from '@xterm/xterm';
import * as Zmodem from 'zmodem.js/src/zmodem_browser';
import { TrzszFilter } from 'trzsz';
export interface ZmodeOptions {
zmodem: boolean;
trzsz: boolean;
+ windows: boolean;
+ trzszDragInitTimeout: number;
onSend: () => void;
sender: (data: string | Uint8Array) => void;
writer: (data: string | Uint8Array) => void;
@@ -54,6 +56,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 +75,17 @@ export class ZmodemAddon implements ITerminalAddon {
},
sendToServer: data => sender(data),
terminalColumns: terminal.cols,
+ isWindowsShell: this.options.windows,
+ dragInitTimeout: this.options.trzszDragInitTimeout,
+ });
+ 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)));
}