diff options
| -rw-r--r-- | todo.org | 63 |
1 files changed, 53 insertions, 10 deletions
@@ -55,18 +55,60 @@ 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 [#C] EAT: ctrl+backspace deletes the previous word :feature: -Enable Ctrl+Backspace inside EAT terminals to delete the previous word, matching its behavior in other buffers. From the roam inbox. -** TODO [#C] Delay GPG/SSH key prompt until first use :refactor: -Emacs prompts for the GPG/SSH passphrase soon after startup. Defer the key unlock until the functionality that actually needs it is first used. From the roam inbox. -** TODO [#C] Register F1 in EAT so dashboard F1 works in ai-term :bug:quick:solo: -F1 (the dashboard help key) does not reach Emacs inside ai-term/EAT buffers; the terminal swallows it. Add F1 to the EAT keymap exceptions and rebuild, following the F9/F12 pattern in ai-term.el. From the roam inbox. -** TODO [#C] Replace all-the-icons with nerd-icons everywhere :refactor: -Audit every remaining all-the-icons usage, map each to its nerd-icons equivalent, and migrate, to drop the all-the-icons package. From the roam inbox. +** DONE [#C] EAT: ctrl+backspace deletes the previous word :feature: +CLOSED: [2026-06-29 Mon] +Bound =C-<backspace>= in =eat-semi-char-mode-map= to =cj/term-backward-kill-word=, which sends M-DEL (ESC DEL) to the pty — readline's backward-kill-word, the same word-boundary delete C-<backspace> does in normal buffers. Terminals send no standard code for Ctrl+Backspace, so EAT's default forwarded a bare key the program dropped. Live-reloaded; M-DEL byte sequence (27 127) confirmed. Hands-on check (does the claude TUI honor it?) filed under "Manual testing and validation". From the roam inbox. +** DONE [#C] Delay GPG/SSH key prompt until first use :refactor: +CLOSED: [2026-06-29 Mon] +Root cause: calendar-sync ran calendar-sync-start at module load, syncing immediately and then on a timer. Every configured calendar (google, proton, deepsat) resolves its .ics feed URL from a :secret-host in authinfo.gpg, so both the immediate sync and each timer tick decrypt authinfo.gpg — surfacing as a GPG passphrase prompt right after startup on a cold gpg-agent. No ssh-agent config exists, so the "SSH" part was really this GPG prompt. Fix: deferred the whole calendar-sync-start (immediate sync + recurring timer) to the first org-agenda use via a one-shot org-agenda-mode-hook (calendar-sync.el). Manual calendar-sync-start/-now still work on demand. 2 new ERT tests for the one-shot helper; full suite green; live-reloaded. Cold-reboot confirm filed under "Manual testing and validation". From the roam inbox. +** DONE [#C] Register F1 in EAT so dashboard F1 works in ai-term :bug:quick:solo: +CLOSED: [2026-06-29 Mon] +F1 (the dashboard help key) did not reach Emacs inside ai-term/EAT buffers; the terminal swallowed it. Bound =<f1>= to =cj/dashboard-only= in =eat-semi-char-mode-map= and =eat-mode-map= (eat-config.el), alongside the existing F12 and C-; passthroughs. EAT needs no exception-list/rebuild dance (that was ghostel) — the bind alone suffices. Live-reloaded into the daemon; hands-on UX check filed under "Manual testing and validation". +** DONE [#C] Replace all-the-icons with nerd-icons everywhere :refactor: +CLOSED: [2026-06-29 Mon] +nerd-icons already rendered every icon (dashboard, dirvish, ibuffer, completion). all-the-icons survived only as scaffolding: a font-install helper, the all-the-icons-nerd-fonts bridge, and a terminal-blanking advice block the nerd-icons sibling already duplicated. Removed all of it (font-config.el, keyboard-compat.el) and repointed the font-install helper at nerd-icons ("Symbols Nerd Font Mono"), keeping the auto-install-on-first-GUI-frame convenience. Renamed cj/maybe-install-all-the-icons-fonts → cj/maybe-install-nerd-icons-fonts and updated its two tests. Full suite green, live-reloaded. Visual confirm filed under "Manual testing and validation". From the roam inbox. ** TODO [#C] Music: create playlists from a radio.info lookup :feature: Create EMMS playlists from a radio.info (radio-browser) station lookup. From the roam inbox. ** PROJECT [#A] Manual testing and validation Exercised once the phases above land. +*** VERIFY nov reading view: palettes, font sizing, width keys +What we're verifying: the nov-reading layer renders correctly in a real EPUB — palette colors, live font sizing, and the moved width keys. Faces + pure logic are unit-tested and the layer applies live in a temp buffer; this is the on-screen reading check only Craig can eyeball. +- Open an EPUB (=M-x calibredb=, or open a .epub file). +Expected: it opens in the sepia palette (warm dark background, tan text) at a comfortable serif size. +- Press =c= a few times. +Expected: cycles sepia -> dark -> light -> none (theme default) -> back. =C= prompts to pick one by name. +- Press =+= and =-=. +Expected: the page font grows/shrinks live. == returns it to the default size. +- Press =+= twice, then close the book (=q=) and reopen it (same or a different EPUB). Then restart Emacs and open an EPUB. +Expected: the book reopens at the bumped-up size, not the base — the live size is remembered globally across books and across sessions (persisted to =data/nov-reading-text-scale=). Pressing == resets to base and that reset also persists. +- Press ={= and =}=. +Expected: the text column narrows/widens (the width control, moved off +/-). +- In an EPUB that has chapter headings and internal links (a TOC page works), eyeball a heading and a link under each palette (cycle with =c=). +Expected: headings and links carry the palette's accent color — for sepia a warm gold heading and amber link, for dark a near-white heading and soft-blue link, for light a dark-brown heading and warm-brown link. Headings keep their relative sizing; links stay underlined. Crucially, opening HTML mail or eww shows the normal theme shr colors, NOT these reading accents (the remap is buffer-local to nov). +- Open theme-studio (=make -C scripts/theme-studio open=), find the "nov reading view" app. +Expected: the face list now has nine faces — the three palettes plus a -heading and -link for each. The preview shows three mock book pages (Hawthorne's "Dr. Heidegger's Experiment") in sepia / dark / light; each page's title is drawn in that palette's heading face and an inline phrase ("the rose of half a century") in its link face. Tuning a palette, heading, or link face repaints its page and writes into the dupre theme. +*** VERIFY No GPG prompt at startup; calendar syncs on first agenda use +What we're verifying: calendar-sync no longer decrypts authinfo.gpg at startup, so a cold gpg-agent isn't prompted until calendar data is first wanted. The deferral is unit-tested; this is the cold-agent reboot behavior only Craig can confirm. Needs a cold gpg-agent to be meaningful (clear it or reboot). +- Clear the agent cache: run =gpgconf --kill gpg-agent= in a shell (or reboot). +- Start Emacs fresh and use it normally for a bit WITHOUT opening the agenda. +Expected: no GPG passphrase prompt appears on its own. +- Now open the agenda (F8, or =M-x org-agenda=). +Expected: the GPG prompt appears now (once), calendar-sync starts, and the agenda fills in with calendar events on the next refresh. Subsequent agenda opens don't re-prompt (agent caches). +*** VERIFY Icons still render after dropping all-the-icons +What we're verifying: removing the all-the-icons package left every icon intact, since nerd-icons was already doing the rendering. Verified by the full test suite and a live-reload; this is the eyeball-on-a-clean-restart confirm. Best done after a real Emacs restart (not just the daemon live-reload), which is the true test that nothing depended on all-the-icons being loaded. +- Restart Emacs (or the daemon). +- Open the dashboard (F1), a dirvish buffer, =M-x ibuffer=, and any =completing-read= picker (e.g. =C-x b=). +Expected: file/dir/mode icons render everywhere they did before (dashboard navigator glyphs, dirvish file icons, ibuffer rows, completion candidates). No missing-glyph boxes, no errors about all-the-icons functions. +*** VERIFY C-<backspace> deletes the previous word in an ai-term/EAT terminal +What we're verifying: =C-<backspace>= now deletes the previous word inside an EAT terminal (the claude agent TUI, and bash once the agent exits), matching its behavior in normal buffers. It sends M-DEL to the pty; verified live that the binding sends ESC DEL (27 127). Whether the running program honors M-DEL is the program-specific bit only Craig can confirm in the terminal. +- =C-; a a= (or =C-; a s=) to open an agent in an EAT buffer; click into the terminal. +- Type a few words (e.g. =foo.bar baz=) at the agent prompt, then press =C-<backspace>=. +Expected: the previous word is deleted with word boundaries (e.g. =bar= goes, leaving =foo.= ), not the whole line. If the claude TUI ignores M-DEL (nothing deletes), tell me and I'll switch the binding to send C-w (whitespace-delimited, more widely honored). +*** VERIFY F1 reaches Emacs inside an ai-term/EAT agent buffer +What we're verifying: =<f1>= now runs =cj/dashboard-only= (the kill-all sweep back to the dashboard) from inside an EAT agent terminal, instead of being swallowed by the pty. Bound in =eat-semi-char-mode-map= + =eat-mode-map=; verified live with =keymap-lookup=, this is the in-terminal keypress only Craig can confirm. +- =C-; a a= (or =C-; a s=) to open an agent in an EAT buffer; click into the terminal so EAT has focus. +- Press =F1=. +Expected: the dashboard is shown (other windows cleared, agent buffer buried not killed — its tmux session survives and =C-; a a= brings it back). F1 does not type into the agent. *** TODO File-basename pickers show marginalia size/date annotations What we're verifying: the eight pickers now carry a completion category and annotator (commit 4d644374), so marginalia should show a size + date suffix beside each candidate (a "dir" marker for directory candidates). The metadata is unit-tested; this is the live minibuffer render only Craig can see. Marginalia must be on (it is in this config). Eyeball each prompt, then =C-g=. - =M-x cj/tmr-select-sound-file=. Expected: each timer-sound candidate shows a size + YYYY-MM-DD suffix. @@ -729,11 +771,12 @@ Brainstorm complete 2026-06-22 — validated design at [[file:docs/design/vamp-m Next: (1) revise the spec to the new direction; (2) spike the risky assumptions (mpd dumb-single-file-player contract; m3u =.desktop= on Hyprland); (3) =/start-work= against the revised spec — pure-helper extraction (review Migration Plan step 1) is the safe first phase. -** TODO [#C] nov: sepia reading view (dark bg, tan/sepia text) :feature: +** DONE [#C] nov: sepia reading view (dark bg, tan/sepia text) :feature: +CLOSED: [2026-06-29 Mon] :PROPERTIES: :LAST_REVIEWED: 2026-06-29 :END: -A sepia setting for =nov-mode=: keep a dark background, render the letters in a tan/sepia color. nov defines no faces of its own and leans on shr, so the path is buffer-local face-remapping (=face-remap-add-relative= on =default= / =shr-text= / =variable-pitch=) in a nov-mode hook, toggled per a sepia preference. Overlaps the "epub/nov reading color" note under "Route hardcoded theme colors through the theme" (the removed =#E8DCC0= sepia plus "needs a themeable reading face") — reconcile with that themeable-face direction. From the roam inbox. +Grew into a reading-view theme layer, =modules/nov-reading.el=, on top of stock nov (no fork). Buffer-local: a reading palette (sepia/dark/light, each a themeable face the dupre theme owns, sepia default; =c= cycles, =C= selects), serif typography (family + a defcustom base height replacing the old hardcoded 180), and page font sizing (=+=/=-= live, == resets); width moved to ={= =}=. Pulled the reading concerns out of calibredb-epub-config.el (keeps library + width/centering). Dropped the frame-global EBook fontaine preset (reading size is buffer-local now). Registered the 3 palette faces as a "nov reading view" app in theme-studio (face_data.py + regenerated). Reconciled the "epub/nov reading color" / themeable-face note: done via theme-owned faces, not a hardcoded hex. Full suite + theme-studio check green. Committed 659197c7. Live reading-view confirm filed under "Manual testing and validation". From the roam inbox. ** TODO [#C] pdf-view: epdfinfo crashes loading some PDFs (large IA scans) :bug: :PROPERTIES: :LAST_REVIEWED: 2026-06-29 |
