on main help sign in
chore: add completions help and small improvements
commit5bf5eac98f17262b4ecd134d43ef3a269f10cdf2 authorKujtim Hoxha <kujtimii.h@gmail.com> dateThu 10 Jul 2025, 13:41 (1 year ago) parent1f16850
6 files changed+38−5
internal/tui/components/chat/editor/editor.go+5 internal/tui/components/completions/completions.go+7−3 internal/tui/components/completions/item.go+1 internal/tui/components/completions/keys.go+1−1 internal/tui/page/chat/chat.go+20 internal/tui/tui.go+4−1
internal/tui/components/chat/editor/editor.go+5
@@ -35,6 +35,7 @@ type Editor interface {
3535 layout.Positional
3636
3737 SetSession(session session.Session) tea.Cmd
38+ IsCompletionsOpen() bool
3839 Cursor() *tea.Cursor
3940}
4041
@@ -391,6 +392,10 @@ func (c *editorCmp) SetSession(session session.Session) tea.Cmd {
391392 return nil
392393}
393394
395+func (c *editorCmp) IsCompletionsOpen() bool {
396+ return c.isCompletionsOpen
397+}
398+
394399func New(app *app.App) Editor {
395400 t := styles.CurrentTheme()
396401 ta := textarea.New()
internal/tui/components/completions/completions.go+7−3
@@ -70,8 +70,8 @@ func New() Completions {
7070 list.WithHideFilterInput(true),
7171 )
7272 return &completionsCmp{
73− width: 30,
74− height: 10,
73+ width: 0,
74+ height: 0,
7575 list: l,
7676 query: "",
7777 keyMap: completionsKeyMap,
@@ -89,6 +89,10 @@ func (c *completionsCmp) Init() tea.Cmd {
8989// Update implements Completions.
9090func (c *completionsCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
9191 switch msg := msg.(type) {
92+ case tea.WindowSizeMsg:
93+ c.width = min(msg.Width-c.x, 80)
94+ c.height = min(msg.Height-c.y, 15)
95+ return c, nil
9296 case tea.KeyPressMsg:
9397 switch {
9498 case key.Matches(msg, c.keyMap.Up):
@@ -135,7 +139,7 @@ func (c *completionsCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
135139 item := NewCompletionItem(completion.Title, completion.Value, WithBackgroundColor(t.BgSubtle))
136140 items = append(items, item)
137141 }
138− c.height = max(min(10, len(items)), 1) // Ensure at least 1 item height
142+ c.height = max(min(c.height, len(items)), 1) // Ensure at least 1 item height
139143 cmds := []tea.Cmd{
140144 c.list.SetSize(c.width, c.height),
141145 c.list.SetItems(items),
internal/tui/components/completions/item.go+1
@@ -90,6 +90,7 @@ func (c *completionItemCmp) View() string {
9090 if c.bgColor != nil {
9191 titleStyle = titleStyle.Background(c.bgColor)
9292 titleMatchStyle = titleMatchStyle.Background(c.bgColor)
93+ itemStyle = itemStyle.Background(c.bgColor)
9394 }
9495
9596 if c.focus {
internal/tui/components/completions/keys.go+1−1
@@ -22,7 +22,7 @@ func DefaultKeyMap() KeyMap {
2222 key.WithHelp("up", "move up"),
2323 ),
2424 Select: key.NewBinding(
25− key.WithKeys("enter"),
25+ key.WithKeys("enter", "tab", "ctrl+y"),
2626 key.WithHelp("enter", "select"),
2727 ),
2828 Cancel: key.NewBinding(
internal/tui/page/chat/chat.go+20
@@ -657,6 +657,26 @@ func (a *chatPage) Help() help.KeyMap {
657657 fullList = append(fullList, []key.Binding{v})
658658 }
659659 default:
660+ if a.editor.IsCompletionsOpen() {
661+ shortList = append(shortList,
662+ key.NewBinding(
663+ key.WithKeys("tab", "enter"),
664+ key.WithHelp("tab/enter", "complete"),
665+ ),
666+ key.NewBinding(
667+ key.WithKeys("esc"),
668+ key.WithHelp("esc", "cancel"),
669+ ),
670+ key.NewBinding(
671+ key.WithKeys("up", "down"),
672+ key.WithHelp("↑/↓", "choose"),
673+ ),
674+ )
675+ for _, v := range shortList {
676+ fullList = append(fullList, []key.Binding{v})
677+ }
678+ return core.NewSimpleHelp(shortList, fullList)
679+ }
660680 if a.app.CoderAgent != nil && a.app.CoderAgent.IsBusy() {
661681 cancelBinding := key.NewBinding(
662682 key.WithKeys("esc"),
internal/tui/tui.go+4−1
@@ -109,6 +109,7 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
109109 }
110110 return a, tea.Batch(cmds...)
111111 case tea.WindowSizeMsg:
112+ a.completions.Update(msg)
112113 return a, a.handleWindowResize(msg.Width, msg.Height)
113114
114115 // Completions messages
@@ -119,9 +120,11 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
119120
120121 // Dialog messages
121122 case dialogs.OpenDialogMsg, dialogs.CloseDialogMsg:
123+ u, completionCmd := a.completions.Update(completions.CloseCompletionsMsg{})
124+ a.completions = u.(completions.Completions)
122125 u, dialogCmd := a.dialog.Update(msg)
123126 a.dialog = u.(dialogs.DialogCmp)
124− return a, dialogCmd
127+ return a, tea.Batch(completionCmd, dialogCmd)
125128 case commands.ShowArgumentsDialogMsg:
126129 return a, util.CmdHandler(
127130 dialogs.OpenDialogMsg{