Skip to content

Commit 556bf53

Browse files
committed
feat: improve UX with contextual hints bar and revised keybindings
- Add contextual hints bar at bottom of chat window showing relevant keybindings for current panel (Bubble Tea style) - Revise keybindings to follow Neovim conventions: - ]m/[m for message navigation, ]c/[c for code blocks - g prefix for toggles (gs, gh, gp, gr, gm, gl, gn, gd) - Single keys for actions (y, d, e, r, q) - Add code block navigation with next/prev functions - Restrict g-prefix keymaps to normal mode only (fixes typing issues) - Remove <Esc> close binding to prevent accidental closes - Add show_hints config option (default: true) - Update README with new keybindings documentation
1 parent cde4c8b commit 556bf53

5 files changed

Lines changed: 347 additions & 61 deletions

File tree

README.md

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -339,29 +339,42 @@ The `display` strategy shows the output in a float window.
339339
When using `ChatGPT` and `ChatGPTEditWithInstructions`, the following
340340
keybindings are available:
341341

342-
- `<C-Enter>` [Both] to submit.
343-
- `<C-y>` [Both] to copy/yank last answer.
344-
- `<C-o>` [Both] Toggle settings window (read-only).
345-
- `<C-h>` [Both] Toggle help window.
346-
- `<Tab>` [Both] Cycle over windows.
347-
- `<C-f>` [Chat] Cycle over modes (center, stick to right).
348-
- `<C-c>` [Both] to close chat window.
349-
- `<C-p>` [Chat] Toggle sessions list.
350-
- `<C-u>` [Chat] scroll up chat window.
351-
- `<C-d>` [Chat] scroll down chat window.
352-
- `<C-k>` [Chat] to copy/yank code from last answer.
353-
- `<C-n>` [Chat] Start new session.
354-
- `<C-r>` [Chat] draft message (create message without submitting it to server)
355-
- `<C-r>` [Chat] switch role (switch between user and assistant role to define a workflow)
356-
- `<C-s>` [Both] Toggle system message window.
357-
- `<C-i>` [Edit Window] use response as input.
358-
- `<C-d>` [Edit Window] view the diff between left and right panes and use diff-mode
359-
commands
360-
- `y` [Chat] Copy code block at cursor.
361-
- `za` [Chat] Toggle fold for code block.
362-
- `@` [Chat] Trigger context autocomplete (LSP definitions, project context).
363-
364-
The settings window (`<C-o>`) displays current configuration (model, temperature,
342+
**Submitting and Closing:**
343+
- `<C-Enter>` / `<Enter>` Submit prompt
344+
- `q` Close chat window
345+
- `<C-c>` Stop generating response
346+
347+
**Navigation:**
348+
- `]m` / `[m` Navigate to next/previous message
349+
- `]c` / `[c` Navigate to next/previous code block
350+
- `<C-u>` / `<C-d>` Scroll chat window up/down
351+
- `<Tab>` Cycle between windows
352+
353+
**Toggles (g prefix):**
354+
- `gs` Toggle settings panel (read-only)
355+
- `gh` Toggle help panel
356+
- `gp` Toggle sessions panel
357+
- `gr` Toggle system role window
358+
- `gm` Toggle message role (user/assistant)
359+
- `gl` Cycle layout modes (center/right)
360+
- `gn` Start new session
361+
- `gd` Draft message (add without sending)
362+
363+
**Actions:**
364+
- `y` Copy code block at cursor
365+
- `Y` Copy entire last answer
366+
- `d` Delete selected message
367+
- `e` Edit selected message
368+
- `r` Rename session (in sessions panel)
369+
- `za` Toggle fold for code block
370+
- `@` Trigger context autocomplete (LSP, project, file)
371+
372+
**Edit Window specific:**
373+
- `<C-y>` Accept changes
374+
- `<C-d>` Toggle diff view
375+
- `<C-i>` Use response as input
376+
377+
The settings window (`gs`) displays current configuration (model, temperature,
365378
max_tokens, session name). To change settings, modify your `setup()` configuration.
366379

367380
### Whichkey plugin mappings

lua/chatgpt.lua

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ M.setup = function(options)
5050
vim.api.nvim_set_hl(0, "ChatGPTSessionHeader", { fg = "#6c7086", bold = true, default = true })
5151
vim.api.nvim_set_hl(0, "ChatGPTSessionCursor", { fg = "#f9e2af", bold = true, default = true })
5252

53+
vim.api.nvim_set_hl(0, "ChatGPTHintsBar", { link = "Normal", default = true })
54+
vim.api.nvim_set_hl(0, "ChatGPTHintsKey", { fg = "#f9e2af", bold = true, default = true })
55+
vim.api.nvim_set_hl(0, "ChatGPTHintsText", { fg = "#6c7086", default = true })
56+
vim.api.nvim_set_hl(0, "ChatGPTHintsSep", { fg = "#45475a", default = true })
57+
5358
vim.cmd("highlight default link ChatGPTSelectedMessage ColorColumn")
5459

5560
config.setup(options)

lua/chatgpt/config.lua

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ function M.defaults()
3838
welcome_message = WELCOME_MESSAGE,
3939
default_system_message = "",
4040
loading_text = "Loading, please wait ...",
41+
show_hints = true,
4142
question_sign = "", -- 🙂
4243
answer_sign = "", -- 🤖
4344
border_left_sign = "",
@@ -58,29 +59,30 @@ function M.defaults()
5859
},
5960
},
6061
keymaps = {
61-
close = "<C-c>",
62-
close_n = "<Esc>",
63-
yank_last = "<C-y>",
64-
yank_last_code = "<C-k>",
62+
close = "q",
63+
close_n = nil,
64+
yank_last = "Y",
6565
scroll_up = "<C-u>",
6666
scroll_down = "<C-d>",
67-
new_session = "<C-n>",
67+
new_session = "gn",
6868
cycle_windows = "<Tab>",
69-
cycle_modes = "<C-f>",
70-
next_message = "<C-j>",
71-
prev_message = "<C-k>",
72-
select_session = "<Space>",
69+
cycle_modes = "gl",
70+
next_message = "]m",
71+
prev_message = "[m",
72+
next_code_block = "]c",
73+
prev_code_block = "[c",
74+
select_session = "<CR>",
7375
rename_session = "r",
7476
delete_session = "d",
75-
draft_message = "<C-r>",
77+
draft_message = "gd",
7678
edit_message = "e",
7779
delete_message = "d",
78-
toggle_settings = "<C-o>",
79-
toggle_sessions = "<C-p>",
80-
toggle_help = "<C-h>",
81-
toggle_message_role = "<C-r>",
82-
toggle_system_role_open = "<C-s>",
83-
stop_generating = "<C-x>",
80+
toggle_settings = "gs",
81+
toggle_sessions = "gp",
82+
toggle_help = "gh",
83+
toggle_message_role = "gm",
84+
toggle_system_role_open = "gr",
85+
stop_generating = "<C-c>",
8486
yank_code = "y",
8587
toggle_fold = "za",
8688
},

0 commit comments

Comments
 (0)