From 5611ef8b28216aa9dd2ceb6ed17d5779a29154f6 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 21 Jul 2025 19:10:51 -0400 Subject: wip: vscode extension --- sdks/vscode/images/button-dark.svg | 4 +++ sdks/vscode/images/button-light.svg | 4 +++ sdks/vscode/package.json | 15 ++++++++++- sdks/vscode/src/extension.ts | 50 ++++++++++++++++++------------------- 4 files changed, 47 insertions(+), 26 deletions(-) create mode 100644 sdks/vscode/images/button-dark.svg create mode 100644 sdks/vscode/images/button-light.svg (limited to 'sdks') diff --git a/sdks/vscode/images/button-dark.svg b/sdks/vscode/images/button-dark.svg new file mode 100644 index 000000000..404e214d5 --- /dev/null +++ b/sdks/vscode/images/button-dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/sdks/vscode/images/button-light.svg b/sdks/vscode/images/button-light.svg new file mode 100644 index 000000000..a309fcaed --- /dev/null +++ b/sdks/vscode/images/button-light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index b2e1135b2..c034d5880 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -26,13 +26,26 @@ "commands": [ { "command": "opencode.openTerminal", - "title": "Open Terminal with Opencode" + "title": "Open Terminal with Opencode", + "icon": { + "light": "images/button-dark.svg", + "dark": "images/button-light.svg" + } }, { "command": "opencode.addFilepathToTerminal", "title": "Add Filepath to Terminal" } ], + "menus": { + "editor/title": [ + { + "command": "opencode.openTerminal", + "when": "editorTextFocus", + "group": "navigation" + } + ] + }, "keybindings": [ { "command": "opencode.openTerminal", diff --git a/sdks/vscode/src/extension.ts b/sdks/vscode/src/extension.ts index a183ef09a..f4daeb10b 100644 --- a/sdks/vscode/src/extension.ts +++ b/sdks/vscode/src/extension.ts @@ -1,10 +1,10 @@ // This method is called when your extension is deactivated export function deactivate() {} -import * as vscode from "vscode" +import * as vscode from "vscode"; export function activate(context: vscode.ExtensionContext) { - const TERMINAL_NAME = "opencode Terminal" + const TERMINAL_NAME = "opencode Terminal"; // Register command to open terminal in split screen and run opencode let openTerminalDisposable = vscode.commands.registerCommand("opencode.openTerminal", async () => { @@ -15,56 +15,56 @@ export function activate(context: vscode.ExtensionContext) { viewColumn: vscode.ViewColumn.Beside, preserveFocus: false, }, - }) + }); - terminal.show() - terminal.sendText("OPENCODE_THEME=system OPENCODE_CALLER=vscode opencode") - }) + terminal.show(); + terminal.sendText("OPENCODE_THEME=system OPENCODE_CALLER=vscode opencode"); + }); // Register command to add filepath to terminal let addFilepathDisposable = vscode.commands.registerCommand("opencode.addFilepathToTerminal", async () => { - const activeEditor = vscode.window.activeTextEditor + const activeEditor = vscode.window.activeTextEditor; if (!activeEditor) { - vscode.window.showInformationMessage("No active file to get path from") - return + vscode.window.showInformationMessage("No active file to get path from"); + return; } - const document = activeEditor.document - const workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri) + const document = activeEditor.document; + const workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri); if (!workspaceFolder) { - vscode.window.showInformationMessage("File is not in a workspace") - return + vscode.window.showInformationMessage("File is not in a workspace"); + return; } // Get the relative path from workspace root - const relativePath = vscode.workspace.asRelativePath(document.uri) - let filepathWithAt = `@${relativePath}` + const relativePath = vscode.workspace.asRelativePath(document.uri); + let filepathWithAt = `@${relativePath}`; // Check if there's a selection and add line numbers - const selection = activeEditor.selection + const selection = activeEditor.selection; if (!selection.isEmpty) { // Convert to 1-based line numbers - const startLine = selection.start.line + 1 - const endLine = selection.end.line + 1 + const startLine = selection.start.line + 1; + const endLine = selection.end.line + 1; if (startLine === endLine) { // Single line selection - filepathWithAt += `#L${startLine}` + filepathWithAt += `#L${startLine}`; } else { // Multi-line selection - filepathWithAt += `#L${startLine}-${endLine}` + filepathWithAt += `#L${startLine}-${endLine}`; } } // Get or create terminal - let terminal = vscode.window.activeTerminal + let terminal = vscode.window.activeTerminal; if (terminal?.name === TERMINAL_NAME) { - terminal.sendText(filepathWithAt) - terminal.show() + terminal.sendText(filepathWithAt); + terminal.show(); } - }) + }); - context.subscriptions.push(openTerminalDisposable, addFilepathDisposable) + context.subscriptions.push(openTerminalDisposable, addFilepathDisposable); } -- cgit v1.2.3