diff --git a/src/panels/ICHelperPanel.ts b/src/panels/ICHelperPanel.ts index fade7a0..871a987 100644 --- a/src/panels/ICHelperPanel.ts +++ b/src/panels/ICHelperPanel.ts @@ -494,6 +494,27 @@ export async function showICHelperPanel( // 退出登录 vscode.commands.executeCommand("ic-coder.logout"); break; + case "openFile": + // 打开文件 + if (message.filePath) { + vscode.workspace.openTextDocument(message.filePath).then(doc => { + vscode.window.showTextDocument(doc); + }); + } + break; + case "openFileWithSelection": + // 打开文件并选中代码 + if (message.filePath) { + vscode.workspace.openTextDocument(message.filePath).then(doc => { + vscode.window.showTextDocument(doc).then(editor => { + const start = new vscode.Position(message.startLine - 1, 0); + const end = new vscode.Position(message.endLine - 1, doc.lineAt(message.endLine - 1).text.length); + editor.selection = new vscode.Selection(start, end); + editor.revealRange(new vscode.Range(start, end)); + }); + }); + } + break; case "acceptChange": // 采纳变更 if (message.changeId) { diff --git a/src/views/contextDisplay.ts b/src/views/contextDisplay.ts index 98fd2b3..32f9422 100644 --- a/src/views/contextDisplay.ts +++ b/src/views/contextDisplay.ts @@ -51,7 +51,11 @@ export function getContextDisplayStyles(): string { transition: all 0.2s ease; } - .context-item:hover { + .context-item.clickable { + cursor: pointer; + } + + .context-item.clickable:hover { background: var(--vscode-list-hoverBackground); } @@ -180,11 +184,14 @@ export function getContextDisplayScript(): string { case 'code': icon = getCodeIcon(); break; } + const clickable = item.type !== 'folder' ? 'clickable' : ''; + const onclick = item.type !== 'folder' ? \`onclick="window.handleContextItemClick(\${item.id})"\` : ''; + return \` -
+
\${icon} \${item.displayPath || getFileName(item.path)} - + \${getRemoveIcon()}
@@ -192,6 +199,27 @@ export function getContextDisplayScript(): string { }).join(''); } + // 全局访问函数 + window.handleContextItemClick = function(id) { + const item = contextItems.find(i => i.id === id); + if (!item || item.type === 'folder') return; + + if (item.type === 'code') { + const codeData = JSON.parse(item.path); + vscode.postMessage({ + command: 'openFileWithSelection', + filePath: codeData.fileName, + startLine: codeData.startLine, + endLine: codeData.endLine + }); + } else { + vscode.postMessage({ + command: 'openFile', + filePath: item.path + }); + } + }; + // 处理后端返回的文件选择结果 window.addEventListener('message', event => { const message = event.data;