From 9db49eebf90969af34a1919d5960323fc125b3cc Mon Sep 17 00:00:00 2001 From: Joao Portela Date: Tue, 18 Apr 2017 13:48:12 +0100 Subject: [PATCH] Inserting file path on the terminal, when dragging a file to it --- .../electron-browser/terminalPanel.ts | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts index 46dee45dc7f..d13e6e34ed5 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts @@ -204,6 +204,28 @@ export class TerminalPanel extends Panel { event.stopPropagation(); } })); + this._register(DOM.addDisposableListener(this._parentDomElement, DOM.EventType.DROP, (e: DragEvent) => { + if (e.target === this._parentDomElement || DOM.isAncestor(e.target as HTMLElement, this._parentDomElement)) { + if (!e.dataTransfer) { + return; + } + const url = e.dataTransfer.getData('URL'); + const filePath = this._getPathFromUrl(url); + const terminal = this._terminalService.getActiveInstance(); + + // for files dragged from the tree explorer + if (filePath) { + terminal.sendText(filePath, false); + return; + } + + // for files dragged from the filesystem + const files = e.dataTransfer.files; + if (files.length > 0) { + terminal.sendText(files[0].path, false); + } + } + })); } private _refreshCtrlHeld(e: KeyboardEvent): void { @@ -255,4 +277,17 @@ export class TerminalPanel extends Panel { a.fontSize !== b.fontSize || a.lineHeight !== b.lineHeight; } + + /** + * Removes the trailing file:// from a URL if it exists + * Returns null if it doesn't + */ + private _getPathFromUrl(url: string): string { + const fileRefex = /^file:\/\/(.+)/; + const result = fileRefex.exec(url); + if (result && result.length === 2) { + return result[1]; + } + return null; + } } -- GitLab