From 1f0a47cb8eff3c896dc745c515b5e8a658e7232d Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Wed, 24 Jun 2026 00:34:56 -0400 Subject: chore(todo): close C-arrow copy-mode bug, restore ai-term heading Close the copy-mode regression task with its resolution, and restore the ai-term wrap-teardown heading that was dropped when the bug task was filed. Update the copy-mode manual VERIFY for the C--only behavior. Claude-Session: https://claude.ai/code/session_01BqrdWUo9GcznYX2pZr76gZ --- todo.org | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'todo.org') diff --git a/todo.org b/todo.org index 3191d4819..b0383cc7e 100644 --- a/todo.org +++ b/todo.org @@ -55,8 +55,10 @@ Tags are additive. For example, a small wrong-behavior fix can be =:bug:quick:=, and a feature that requires internal restructuring can be =:feature:refactor:=. * Emacs Open Work -** TODO [#B] C-// wrongly enter terminal copy-mode :bug:quick: -Regression from today's modified-arrow copy-mode work (commit 83f2ac01). In a ghostel buffer, C-// now enter copy-mode, but they should pass through to the terminal — C-/C- are readline word-movement at the shell prompt, so intercepting them breaks command-line editing. Only C- (the scroll-up-into-history gesture) should enter copy-mode. Fix: drop C-// from both the ghostel-mode-map bindings and ghostel-keymap-exceptions in modules/term-config.el, keep C-. Open call (gates :solo:): whether the same exclusion applies to M-// or M-arrows stay fully bound (the original task heading asked for the M- family; M-arrows don't collide with readline the way C-arrows do). From the roam inbox, Craig's testing 2026-06-24. +** DONE [#B] C-// wrongly enter terminal copy-mode :bug:quick: +CLOSED: [2026-06-24 Wed] +Fixed 2026-06-24: per Craig, only C- enters copy-mode now — all other arrows (C-// and the M-arrows) were dropped from both the ghostel-mode-map binding and ghostel-keymap-exceptions in modules/term-config.el, so C-/C- reach the shell as readline word-motion again. Also per Craig: C- pressed while already in copy-mode just moves up — cj/term-copy-mode-up checks tmux pane_in_mode (and ghostel--input-mode without tmux) and skips re-entry, which would otherwise reset the cursor. 6 ERT tests rewritten; byte-compile clean; the live daemon was stripped of the stale bindings/exceptions and reloaded (C- bound + an exception, C- forwarded to the pty). Real-terminal scroll is the VERIFY under Manual testing and validation. +** TODO [#B] ai-term wrap-teardown + shutdown functions :feature: The .emacs.d half of the rulesets wrap-it-up teardown / shutdown feature. Implement three functions in =modules/ai-term.el=, all callable headlessly via =emacsclient -e= (no interactive frame): =cj/ai-term-quit ""= (teardown a project's aiv- tmux session + buffer + geometry restore), =cj/ai-term-live-count= (integer, the safety gate), =cj/ai-term-shutdown-countdown= (run-at-time timer). Craig's 2026-06-23 decisions: non-destructive qualifier = "with summary"/"and summarize"; countdown is a run-at-time timer (not a tty writer); safety gate uses cj/ai-term-live-count. Lands with the rulesets half (workflow + Stop hook already built/pushed). Spec: =inbox/PROCESSED-2026-06-23-2331-from-rulesets-ai-term-teardown-companion.org= (rulesets proposal: docs/design/2026-06-23-wrap-teardown-shutdown-proposal.org). Own focused session. ** TODO [#C] ai-term multi-LLM support — Claude / Codex / ollama :feature: Allow creating an ai-term that launches any of Claude, Codex, or a local LLM via ollama, switchable at session start. From rulesets/Craig via the roam inbox. Spec note: =inbox/PROCESSED-2026-06-23-2123-from-rulesets-ai-term-multi-llm-support-from-craig.org=. @@ -477,12 +479,13 @@ Expected: d duplicates; D names the exact targets and only deletes on yes; the f Craig confirmed in his live GUI frame: the agent window keeps its height across repeated F9 toggles after a C-; b pull-away, even under the WIP theme's near-zero mode-line-inactive. The total-height capture/replay fix holds (dbee95ae). *** 2026-06-20 Sat @ 22:11:00 -0400 F9 toggle preserves all windows in a 3-window layout Craig confirmed in his live GUI frame: toggling the agent off then on in a 3-window layout returns the same three windows — both working windows survive and the agent re-splits its own bottom strip. The reversible-toggle fix holds (64916462). -*** VERIFY modified-arrow copy-mode scrolls in a real terminal -What we're verifying: C-/M- in a ghostel buffer enters copy-mode and carries the movement, in one stroke, against a live tmux pane. The bindings, exceptions, and the dwim+arrow byte sequence are verified in the daemon; the actual copy-mode scroll needs a real attached tmux session. +*** VERIFY C- copy-mode scroll in a real terminal +What we're verifying: C- in a ghostel buffer enters copy-mode and scrolls up in one stroke, repeated C- keep scrolling without re-entry, and the other modified arrows are left alone (C-/C- still do readline word-motion at the prompt). The bindings, exceptions, the pane_in_mode guard, and the byte sequence are verified in the daemon; the actual scroll needs a real attached tmux session. - Open a terminal (=C-; x N= or F12) so tmux auto-starts; run something with scrollback. -- Press C- (or M-) once. -- Press it a few more times; then try C-. -Expected: the first C- enters tmux copy-mode and moves up one line at column 0; further C- keep scrolling up the left edge; C- moves back down. M- behaves identically to C-. Without tmux (rare here), the same keys enter =ghostel-copy-mode= and move point. If an arrow does nothing or reaches the shell instead, capture it and reopen the task. +- At the shell prompt, type a long line and press C- / C- — confirm they move by word (not copy-mode). +- Press C- once, then a few more times. +- While in copy-mode, press C- again a few times. +Expected: C-/C- move by word at the prompt (reach the shell, not Emacs). The first C- enters tmux copy-mode and moves up one line at column 0; further C- keep scrolling up the left edge without resetting position. C-// and the M-arrows do NOT enter copy-mode. Without tmux (rare here), C- enters =ghostel-copy-mode= and moves point up, and a second C- moves up again rather than toggling copy-mode off. If C- does nothing, resets position on repeat, or C-/ get swallowed, capture it and reopen the task. *** VERIFY face-name buttons open describe-face What we're verifying: the face names in the Face Diagnosis report are live buttons. The button text properties (action + face data) are confirmed in the daemon; this is the click/RET confirmation. - Put point on themed text and run =C-h F= (=cj/describe-face-at-point=). -- cgit v1.2.3