diff options
| author | Frank <[email protected]> | 2025-07-22 11:21:26 -0400 |
|---|---|---|
| committer | Frank <[email protected]> | 2025-07-22 11:21:29 -0400 |
| commit | 01f8d3b05dee77614203df6da06a8693fecf3fbf (patch) | |
| tree | 58283896e6683723d86911e0948c3e59d36cff4b /packages/tui/internal/components | |
| parent | 99d6a28249f10ba1fcb7d61599c008154663a51f (diff) | |
| download | opencode-01f8d3b05dee77614203df6da06a8693fecf3fbf.tar.gz opencode-01f8d3b05dee77614203df6da06a8693fecf3fbf.zip | |
wip: vscode extension
Diffstat (limited to 'packages/tui/internal/components')
| -rw-r--r-- | packages/tui/internal/components/commands/commands.go | 32 | ||||
| -rw-r--r-- | packages/tui/internal/components/ide/ide.go | 112 |
2 files changed, 32 insertions, 112 deletions
diff --git a/packages/tui/internal/components/commands/commands.go b/packages/tui/internal/components/commands/commands.go index 7f293230c..71e608888 100644 --- a/packages/tui/internal/components/commands/commands.go +++ b/packages/tui/internal/components/commands/commands.go @@ -11,6 +11,7 @@ import ( "github.com/sst/opencode/internal/commands" "github.com/sst/opencode/internal/styles" "github.com/sst/opencode/internal/theme" + "github.com/sst/opencode/internal/util" ) type CommandsComponent interface { @@ -24,6 +25,7 @@ type commandsComponent struct { width, height int showKeybinds bool showAll bool + showVscode bool background *compat.AdaptiveColor limit *int } @@ -73,6 +75,30 @@ func (c *commandsComponent) View() string { commandsToShow = commandsToShow[:*c.limit] } + if c.showVscode { + commandsToShow = append(commandsToShow, + // empty line + commands.Command{ + Name: "", + Description: "", + }, + commands.Command{ + Name: commands.CommandName(util.Ide()), + Description: "open opencode", + Keybindings: []commands.Keybinding{ + {Key: "cmd+esc", RequiresLeader: false}, + }, + }, + commands.Command{ + Name: commands.CommandName(util.Ide()), + Description: "reference file", + Keybindings: []commands.Keybinding{ + {Key: "cmd+opt+k", RequiresLeader: false}, + }, + }, + ) + } + if len(commandsToShow) == 0 { muted := styles.NewStyle().Foreground(theme.CurrentTheme().TextMuted()) if c.showAll { @@ -196,6 +222,12 @@ func WithShowAll(showAll bool) Option { } } +func WithVscode(showVscode bool) Option { + return func(c *commandsComponent) { + c.showVscode = showVscode + } +} + func New(app *app.App, opts ...Option) CommandsComponent { c := &commandsComponent{ app: app, diff --git a/packages/tui/internal/components/ide/ide.go b/packages/tui/internal/components/ide/ide.go deleted file mode 100644 index cb10f0fc9..000000000 --- a/packages/tui/internal/components/ide/ide.go +++ /dev/null @@ -1,112 +0,0 @@ -package ide - -import ( - "fmt" - "strings" - - tea "github.com/charmbracelet/bubbletea/v2" - "github.com/charmbracelet/lipgloss/v2" - "github.com/charmbracelet/lipgloss/v2/compat" - "github.com/sst/opencode/internal/styles" - "github.com/sst/opencode/internal/theme" -) - -type IdeComponent interface { - tea.ViewModel - SetSize(width, height int) tea.Cmd - SetBackgroundColor(color compat.AdaptiveColor) -} - -type ideComponent struct { - width, height int - background *compat.AdaptiveColor -} - -func (c *ideComponent) SetSize(width, height int) tea.Cmd { - c.width = width - c.height = height - return nil -} - -func (c *ideComponent) SetBackgroundColor(color compat.AdaptiveColor) { - c.background = &color -} - -func (c *ideComponent) View() string { - t := theme.CurrentTheme() - - triggerStyle := styles.NewStyle().Foreground(t.Primary()).Bold(true) - descriptionStyle := styles.NewStyle().Foreground(t.Text()) - - if c.background != nil { - triggerStyle = triggerStyle.Background(*c.background) - descriptionStyle = descriptionStyle.Background(*c.background) - } - - // VSCode shortcuts data - shortcuts := []struct { - shortcut string - description string - }{ - {"Cmd+Esc", "open opencode in VS Code"}, - {"Cmd+Opt+K", "insert file from VS Code"}, - } - - // Calculate column widths - maxShortcutWidth := 0 - maxDescriptionWidth := 0 - - for _, shortcut := range shortcuts { - if len(shortcut.shortcut) > maxShortcutWidth { - maxShortcutWidth = len(shortcut.shortcut) - } - if len(shortcut.description) > maxDescriptionWidth { - maxDescriptionWidth = len(shortcut.description) - } - } - - // Add padding between columns - columnPadding := 3 - - // Build the output - var output strings.Builder - - maxWidth := 0 - for _, shortcut := range shortcuts { - // Pad each column to align properly - shortcutText := fmt.Sprintf("%-*s", maxShortcutWidth, shortcut.shortcut) - description := fmt.Sprintf("%-*s", maxDescriptionWidth, shortcut.description) - - // Apply styles and combine - line := triggerStyle.Render(shortcutText) + - triggerStyle.Render(strings.Repeat(" ", columnPadding)) + - descriptionStyle.Render(description) - - output.WriteString(line + "\n") - maxWidth = max(maxWidth, lipgloss.Width(line)) - } - - // Remove trailing newline - result := strings.TrimSuffix(output.String(), "\n") - if c.background != nil { - result = styles.NewStyle().Background(*c.background).Width(maxWidth).Render(result) - } - - return result -} - -type Option func(*ideComponent) - -func WithBackground(background compat.AdaptiveColor) Option { - return func(c *ideComponent) { - c.background = &background - } -} - -func New(opts ...Option) IdeComponent { - c := &ideComponent{} - for _, opt := range opts { - opt(c) - } - return c -} |
