@@ -151,6 +151,15 @@ func (s *ConfigStore) SetCompactMode(scope Scope, enabled bool) error {
return s.SetConfigField(scope, "options.tui.compact_mode", enabled)
}
+// SetTransparentBackground sets the transparent background setting and persists it.
+func (s *ConfigStore) SetTransparentBackground(scope Scope, enabled bool) error {
+ if s.config.Options == nil {
+ s.config.Options = &Options{}
+ }
+ s.config.Options.TUI.Transparent = &enabled
+ return s.SetConfigField(scope, "options.tui.transparent", enabled)
+}
+
// SetProviderAPIKey sets the API key for a provider and persists it.
func (s *ConfigStore) SetProviderAPIKey(scope Scope, providerID string, apiKey any) error {
var providerConfig ProviderConfig
@@ -44,20 +44,21 @@ type ActionSelectModel struct {
// Messages for commands
type (
- ActionNewSession struct{}
- ActionToggleHelp struct{}
- ActionToggleCompactMode struct{}
- ActionToggleThinking struct{}
- ActionTogglePills struct{}
- ActionExternalEditor struct{}
- ActionToggleYoloMode struct{}
- ActionToggleNotifications struct{}
- // ActionInitializeProject is a message to initialize a project.
- ActionInitializeProject struct{}
- ActionSummarize struct {
+ ActionNewSession struct{}
+ ActionToggleHelp struct{}
+ ActionToggleCompactMode struct{}
+ ActionToggleThinking struct{}
+ ActionTogglePills struct{}
+ ActionExternalEditor struct{}
+ ActionToggleYoloMode struct{}
+ ActionToggleNotifications struct{}
+ ActionToggleTransparentBackground struct{}
+ ActionInitializeProject struct{}
+ ActionSummarize struct {
SessionID string
}
- // ActionSelectReasoningEffort is a message indicating a reasoning effort has been selected.
+ // ActionSelectReasoningEffort is a message indicating a reasoning effort
+ // has been selected.
ActionSelectReasoningEffort struct {
Effort string
}
@@ -427,9 +427,9 @@ func (c *Commands) defaultCommands() []*CommandItem {
commands = append(commands, NewCommandItem(c.com.Styles, "toggle_sidebar", "Toggle Sidebar", "", ActionToggleCompactMode{}))
}
if c.hasSession {
- cfg := c.com.Config()
- agentCfg := cfg.Agents[config.AgentCoder]
- model := cfg.GetModelByType(agentCfg.Model)
+ cfgPrime := c.com.Config()
+ agentCfg := cfgPrime.Agents[config.AgentCoder]
+ model := cfgPrime.GetModelByType(agentCfg.Model)
if model != nil && model.SupportsImages {
commands = append(commands, NewCommandItem(c.com.Styles, "file_picker", "Open File Picker", "ctrl+f", ActionOpenDialog{
// TODO: Pass in the file picker dialog id
@@ -472,6 +472,16 @@ func (c *Commands) defaultCommands() []*CommandItem {
NewCommandItem(c.com.Styles, "toggle_yolo", "Toggle Yolo Mode", "", ActionToggleYoloMode{}),
NewCommandItem(c.com.Styles, "toggle_help", "Toggle Help", "ctrl+g", ActionToggleHelp{}),
NewCommandItem(c.com.Styles, "init", "Initialize Project", "", ActionInitializeProject{}),
+ )
+
+ // Add transparent background toggle.
+ transparentLabel := "Disable Background Color"
+ if cfg != nil && cfg.Options != nil && cfg.Options.TUI.Transparent != nil && *cfg.Options.TUI.Transparent {
+ transparentLabel = "Enable Background Color"
+ }
+ commands = append(commands, NewCommandItem(c.com.Styles, "toggle_transparent", transparentLabel, "", ActionToggleTransparentBackground{}))
+
+ commands = append(commands,
NewCommandItem(c.com.Styles, "quit", "Quit", "ctrl+c", tea.QuitMsg{}),
)
@@ -1328,6 +1328,27 @@ func (m *UI) handleDialogMsg(msg tea.Msg) tea.Cmd {
return util.NewInfoMsg("Thinking mode " + status)
})
m.dialog.CloseDialog(dialog.CommandsID)
+ case dialog.ActionToggleTransparentBackground:
+ cmds = append(cmds, func() tea.Msg {
+ cfg := m.com.Config()
+ if cfg == nil {
+ return util.ReportError(errors.New("configuration not found"))()
+ }
+
+ isTransparent := cfg.Options != nil && cfg.Options.TUI.Transparent != nil && *cfg.Options.TUI.Transparent
+ newValue := !isTransparent
+ if err := m.com.Store().SetTransparentBackground(config.ScopeGlobal, newValue); err != nil {
+ return util.ReportError(err)()
+ }
+ m.isTransparent = newValue
+
+ status := "disabled"
+ if newValue {
+ status = "enabled"
+ }
+ return util.NewInfoMsg("Transparent background " + status)
+ })
+ m.dialog.CloseDialog(dialog.CommandsID)
case dialog.ActionQuit:
cmds = append(cmds, tea.Quit)
case dialog.ActionInitializeProject: