@@ -7,6 +7,7 @@ import { TrzszFilter } from 'trzsz';
77export interface ZmodeOptions {
88 zmodem : boolean ;
99 trzsz : boolean ;
10+ windows : boolean ;
1011 onSend : ( ) => void ;
1112 sender : ( data : string | Uint8Array ) => void ;
1213 writer : ( data : string | Uint8Array ) => void ;
@@ -54,6 +55,11 @@ export class ZmodemAddon implements ITerminalAddon {
5455 this . terminal . focus ( ) ;
5556 }
5657
58+ private addDisposableListener ( target : EventTarget , type : string , listener : EventListener ) {
59+ target . addEventListener ( type , listener ) ;
60+ this . disposables . push ( { dispose : ( ) => target . removeEventListener ( type , listener ) } ) ;
61+ }
62+
5763 @bind
5864 private trzszInit ( ) {
5965 const { terminal } = this ;
@@ -68,6 +74,16 @@ export class ZmodemAddon implements ITerminalAddon {
6874 } ,
6975 sendToServer : data => sender ( data ) ,
7076 terminalColumns : terminal . cols ,
77+ isWindowsShell : this . options . windows ,
78+ } ) ;
79+ const element = terminal . element as EventTarget ;
80+ this . addDisposableListener ( element , 'dragover' , event => event . preventDefault ( ) ) ;
81+ this . addDisposableListener ( element , 'drop' , event => {
82+ event . preventDefault ( ) ;
83+ this . trzszFilter
84+ . uploadFiles ( ( event as DragEvent ) . dataTransfer ?. items as DataTransferItemList )
85+ . then ( ( ) => console . log ( '[ttyd] upload success' ) )
86+ . catch ( err => console . log ( '[ttyd] upload failed: ' + err ) ) ;
7187 } ) ;
7288 this . disposables . push ( terminal . onResize ( size => this . trzszFilter . setTerminalColumns ( size . cols ) ) ) ;
7389 }
0 commit comments