diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-16 02:00:19 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-16 02:00:19 -0500 |
| commit | e6b45e8a30525c8233b6d902c8efa1237ff93d45 (patch) | |
| tree | e1e4823ad12e0322c19d7212a31f5444079bf4e5 /docs/design | |
| parent | 621172bd9b11ce4d6ac31e4e2cfc0a076e5f6d0e (diff) | |
| download | dotemacs-e6b45e8a30525c8233b6d902c8efa1237ff93d45.tar.gz dotemacs-e6b45e8a30525c8233b6d902c8efa1237ff93d45.zip | |
feat(ai-conversations-browser): dired-style browser for saved GPTel conversations
`cj/gptel-load-conversation` prompts via `completing-read`. A
dedicated browser shows what each conversation is about at a
glance and supports single-key load / delete / rename without
having to scroll a minibuffer list.
New module `modules/ai-conversations-browser.el` +
`cj/gptel-browse-conversations` entry point bound to `C-; a b`
("browse conversations"). Opens `*GPTel-Conversations*` in
`cj/gptel-browser-mode` (a `special-mode` derivative).
Each row shows date, time, topic slug, and a preview of the most
recent message (length configurable via
`cj/gptel-browser-preview-length`, default 60 chars). Rows sort
newest first.
In the browser:
- `RET` / `l`: load the conversation (delegates to
`cj/gptel-load-conversation` with the file pre-selected via a
`cl-letf` stub on `completing-read` so the user isn't prompted
twice), then bury the window.
- `d`: delete the file under point after `y-or-n-p` confirmation,
re-render.
- `r`: rename the file under point. Preserves the timestamp,
slugifies the new topic, refuses unchanged input and existing
targets.
- `g`: refresh.
- `n` / `p`: next / previous row.
- `q`: quit-window.
21 tests cover the helpers (topic parsing, header stripping,
preview shaping for truncate / short / empty cases, row-for-file
with conversation + non-conversation filenames, rows enumeration,
render output for empty + populated cases, newest-first sort,
rename-target preservation of timestamp + slug, rename-target
error on missing timestamp) and the file-touching actions (delete
with y, cancel with n, rename, rename-on-empty-line error).
Diffstat (limited to 'docs/design')
0 files changed, 0 insertions, 0 deletions
