Skip to content

feat: multiline editor and scrolling for the hidden Claude conversation (#32) - #53

Merged
lippdev merged 1 commit into
mainfrom
claude/quirky-lovelace-pybgg3
Sep 28, 2026
Merged

lippdev merged 1 commit into
mainfrom
claude/quirky-lovelace-pybgg3

Conversation

@lippdev

@lippdev lippdev commented Sep 28, 2026

Copy link
Copy Markdown
Owner

Resumo

Refs #32, parte de código. O ensaio em terminais reais está no item 55 do roteiro.

  • Editor (src/tui/draft.rs): rascunho de várias linhas com cursor. Alt+Enter ou Ctrl+J quebram linha; setas, Home/End, Backspace e Delete editam. A colagem preserva as quebras, descarta caracteres de controle e nunca é enviada sem Enter.
  • Rascunho preservado: continua durante permissões, exportação, a tela original (Ctrl+O) e redimensionamentos. Dá para escrever antes de o Claude ficar pronto.
  • Envio de várias linhas: vai como uma única colagem delimitada quando o Claude ativou esse modo no terminal dele. Sem esse modo, as quebras viram espaços, para não enviar a mensagem em pedaços.
  • Conversa:
    • linhas longas quebram pela largura de exibição (antes eram cortadas);
    • PgUp/PgDn e ↑/↓ nas bordas do rascunho rolam a conversa;
    • o título avisa quando há mensagens novas abaixo;
    • Esc ou um envio voltam ao fim.
  • Sem cor e largura mínima: --no-color usa o fundo padrão do terminal. Os atalhos se distribuem em até quatro linhas. O mínimo passou de 40×10 para 40×12, para todos continuarem visíveis. A caixa de mensagem mostra até cinco linhas sem esconder a conversa.

Validação

  • cargo fmt --all -- --check, cargo clippy --locked --all-targets -- -D warnings, cargo test --locked e cargo build --locked passaram localmente em Linux.
  • Os quatro scripts PTY e o check_bundle.py também passaram localmente.
  • Testes unitários do editor cobrem coluna entre linhas, colagem, quebra com caracteres largos e posição do cursor.
  • check_claude_hidden_pty.py ganhou uma CLI falsa que registra exatamente o que recebe. Em 80×24 e em 40×12, o teste cobre:
    • PgUp e Esc;
    • colagem que não é enviada antes do Enter;
    • edição com Home/End/Alt+Enter;
    • envio delimitado byte a byte;
    • envio em uma linha quando o Claude não ativou a colagem delimitada.
  • As telas foram conferidas num emulador de terminal (pyte). Isso revelou o cursor fora da caixa em 40×12, já corrigido.

Limitações

  • Alguns terminais não repassam Alt+Enter; Ctrl+J é a alternativa.
  • A rolagem anda por mensagem, não por linha quebrada.
  • O ensaio em terminais reais está pendente (item 55).
  • Houve apenas autorrevisão.

Documentos atualizados: docs/specs/workspace.md, docs/MANUAL_TESTS.md (item 55), docs/EXECUTION.md e ROADMAP.md.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MUyLMVv9GbqWRByEZ7LgEb


Generated by Claude Code

…on (#32)

A new Draft editor gives the Bee view multiline input with cursor
movement; paste keeps line breaks and is never sent before Enter, and the
draft survives permission reviews, export, the original screen and
resizes. Multiline prompts reach Claude as one bracketed paste when it
enabled that mode. The conversation wraps long lines, scrolls with
PgUp/PgDn and returns to the end with Esc. No-color uses the terminal's
default background, and shortcuts wrap onto up to four rows so all stay
visible at the new 40x12 minimum.

Refs #32

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MUyLMVv9GbqWRByEZ7LgEb

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ Sem problemas críticos; há uma sugestão menor inline.

Reviewed changes

Revisei o editor multilinha, a navegação da conversa e os respectivos testes PTY e documentação.

  • Editor e envio: adiciona edição multilinha com cursor, colagem preservada e envio delimitado quando suportado pelo terminal do Claude.
  • Conversa e layout: adiciona quebra de linhas, rolagem com indicador de mensagens novas e ajustes para --no-color e terminais 40×12.
  • Testes e documentação: amplia o teste PTY sintético e registra o contrato e o ensaio manual ainda pendente.

Pullfrog  | Fix all ➔ | Fix 👍s ➔ | View workflow run | Using GPT Luna | 𝕏

Comment thread src/tui/draft.rs
@lippdev
lippdev merged commit af9aafe into main Sep 28, 2026
2 of 3 checks passed
lippdev pushed a commit that referenced this pull request Sep 28, 2026
Up/Down counted characters while the cursor is placed in display cells,
so wide characters (e.g. CJK) moved the cursor to a different visual
column. Columns are now measured in cells and never land inside a wide
character. Follow-up to the Pullfrog review of the merged PR #53.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MUyLMVv9GbqWRByEZ7LgEb
lippdev added a commit that referenced this pull request Sep 28, 2026
Refs #41. Decision in ADR 0019.

- Workspace state folders use an advisory OS lock (File::try_lock) released on exit or kill, with a 500 ms grace for fork-inherited descriptors; a live holder is refused with its PID.
- Leftover *.new snapshots are kept as *.new.recovered-<n>, never loaded or deleted, and reported in the UI.
- Snapshots sync the file and the directory.
- Follow-up from the #53 review: Up/Down in the draft keep the visual column with wide characters.
- Demo PTY test waits for the first event instead of indexing an empty list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MUyLMVv9GbqWRByEZ7LgEb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants