From f1c3edeb75a31e69a4f23bde0fb3ccf2cdbb09b4 Mon Sep 17 00:00:00 2001 From: Felix NyxJae <52313587+NyxJae@users.noreply.github.com> Date: Mon, 21 Apr 2025 21:27:24 +0800 Subject: [PATCH] Fix: Improve drag-and-drop and SSH path handling (#2808) * Fix: Correct path handling for dragged files on Windows * Fix: Improve drag-and-drop and SSH path handling --- webview-ui/src/components/chat/ChatTextArea.tsx | 5 ++++- webview-ui/src/utils/path-mentions.ts | 16 ++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/webview-ui/src/components/chat/ChatTextArea.tsx b/webview-ui/src/components/chat/ChatTextArea.tsx index 369ae5e721..9cfeddd5ea 100644 --- a/webview-ui/src/components/chat/ChatTextArea.tsx +++ b/webview-ui/src/components/chat/ChatTextArea.tsx @@ -614,7 +614,10 @@ const ChatTextArea = forwardRef( e.preventDefault() setIsDraggingOver(false) - const text = e.dataTransfer.getData("application/vnd.code.uri-list") + const textFieldList = e.dataTransfer.getData("text") + const textUriList = e.dataTransfer.getData("application/vnd.code.uri-list") + // When textFieldList is empty, it may attempt to use textUriList obtained from drag-and-drop tabs; if not empty, it will use textFieldList. + const text = textFieldList || textUriList if (text) { // Split text on newlines to handle multiple files const lines = text.split(/\r?\n/).filter((line) => line.trim() !== "") diff --git a/webview-ui/src/utils/path-mentions.ts b/webview-ui/src/utils/path-mentions.ts index 1afa76156a..3a499688d6 100644 --- a/webview-ui/src/utils/path-mentions.ts +++ b/webview-ui/src/utils/path-mentions.ts @@ -12,8 +12,20 @@ * @returns A mention-friendly path */ export function convertToMentionPath(path: string, cwd?: string): string { - // Strip file:// protocol if present - let pathWithoutProtocol = path.startsWith("file://") ? path.substring(7) : path + // Strip file:// or vscode-remote:// protocol if present + let pathWithoutProtocol = path + + if (path.startsWith("file://")) { + pathWithoutProtocol = path.substring(7) + } else if (path.startsWith("vscode-remote://")) { + const protocolStripped = path.substring("vscode-remote://".length) + const firstSlashIndex = protocolStripped.indexOf("/") + if (firstSlashIndex !== -1) { + pathWithoutProtocol = protocolStripped.substring(firstSlashIndex + 1) + } else { + pathWithoutProtocol = "" + } + } try { pathWithoutProtocol = decodeURIComponent(pathWithoutProtocol)