summaryrefslogtreecommitdiffhomepage
path: root/packages/tui/internal/app
diff options
context:
space:
mode:
authoradamdottv <[email protected]>2025-06-18 13:56:46 -0500
committeradamdottv <[email protected]>2025-06-18 13:56:51 -0500
commitbd46cf0f868293b501874c1f04632ced3bec7b81 (patch)
treebcd5ed78fc41bcf73c0ffd76086bf10c34ed700b /packages/tui/internal/app
parentd4157d9a9603c099e650af4f6c369a56d3878179 (diff)
downloadopencode-bd46cf0f868293b501874c1f04632ced3bec7b81.tar.gz
opencode-bd46cf0f868293b501874c1f04632ced3bec7b81.zip
feat(tui): configurable keybinds and mouse scroll
Diffstat (limited to 'packages/tui/internal/app')
-rw-r--r--packages/tui/internal/app/app.go70
1 files changed, 48 insertions, 22 deletions
diff --git a/packages/tui/internal/app/app.go b/packages/tui/internal/app/app.go
index 8db93381a..940ac7b2f 100644
--- a/packages/tui/internal/app/app.go
+++ b/packages/tui/internal/app/app.go
@@ -19,16 +19,16 @@ import (
var RootPath string
type App struct {
- Info client.AppInfo
- Version string
- ConfigPath string
- Config *config.Config
- Client *client.ClientWithResponses
- Provider *client.ProviderInfo
- Model *client.ModelInfo
- Session *client.SessionInfo
- Messages []client.MessageInfo
- Commands commands.Registry
+ Info client.AppInfo
+ Version string
+ StatePath string
+ Config *config.Config
+ Client *client.ClientWithResponses
+ Provider *client.ProviderInfo
+ Model *client.ModelInfo
+ Session *client.SessionInfo
+ Messages []client.MessageInfo
+ Commands commands.CommandRegistry
}
type SessionSelectedMsg = *client.SessionInfo
@@ -38,6 +38,10 @@ type ModelSelectedMsg struct {
}
type SessionClearedMsg struct{}
type CompactSessionMsg struct{}
+type SendMsg struct {
+ Text string
+ Attachments []Attachment
+}
func New(
ctx context.Context,
@@ -51,19 +55,33 @@ func New(
appConfig, err := config.LoadConfig(appConfigPath)
if err != nil {
appConfig = config.NewConfig()
- config.SaveConfig(appConfigPath, appConfig)
}
- theme.SetTheme(appConfig.Theme)
+ if len(appConfig.Keybinds) == 0 {
+ appConfig.Keybinds = make(map[string]string)
+ appConfig.Keybinds["leader"] = "ctrl+x"
+ }
+
+ appStatePath := filepath.Join(appInfo.Path.State, "tui")
+ appState, err := config.LoadState(appStatePath)
+ if err != nil {
+ appState = config.NewState()
+ config.SaveState(appStatePath, appState)
+ }
+
+ mergedConfig := config.MergeState(appState, appConfig)
+ theme.SetTheme(mergedConfig.Theme)
+
+ slog.Debug("Loaded config", "config", mergedConfig)
app := &App{
- Info: appInfo,
- Version: version,
- ConfigPath: appConfigPath,
- Config: appConfig,
- Client: httpClient,
- Session: &client.SessionInfo{},
- Messages: []client.MessageInfo{},
- Commands: commands.NewCommandRegistry(),
+ Info: appInfo,
+ Version: version,
+ StatePath: appStatePath,
+ Config: mergedConfig,
+ Client: httpClient,
+ Session: &client.SessionInfo{},
+ Messages: []client.MessageInfo{},
+ Commands: commands.LoadFromConfig(mergedConfig),
}
return app, nil
@@ -160,8 +178,12 @@ func (a *App) IsBusy() bool {
return lastMessage.Metadata.Time.Completed == nil
}
-func (a *App) SaveConfig() {
- config.SaveConfig(a.ConfigPath, a.Config)
+func (a *App) SaveState() {
+ state := config.ConfigToState(a.Config)
+ err := config.SaveState(a.StatePath, state)
+ if err != nil {
+ slog.Error("Failed to save state", "error", err)
+ }
}
func (a *App) InitializeProject(ctx context.Context) tea.Cmd {
@@ -348,3 +370,7 @@ func (a *App) ListProviders(ctx context.Context) ([]client.ProviderInfo, error)
providers := *resp.JSON200
return providers.Providers, nil
}
+
+// func (a *App) loadCustomKeybinds() {
+//
+// }