<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs/docs/specs/2026-07-17-org-agenda-fullscreen-frame-spec.org, branch main</title>
<subtitle>My Emacs configuration
</subtitle>
<id>https://git.cjennings.net/dotemacs/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/dotemacs/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/'/>
<updated>2026-07-27T19:19:32+00:00</updated>
<entry>
<title>refactor(agenda): replace the dedicated frame with a full-frame F8</title>
<updated>2026-07-27T19:19:32+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-27T19:19:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=9da363f35b2b9ebc5ffefb41cf092b006c56a695'/>
<id>urn:sha1:9da363f35b2b9ebc5ffefb41cf092b006c56a695</id>
<content type='text'>
- F8 now fills the whole frame instead of three quarters.
- The agenda rebuilds itself on every five-minute wall-clock mark.
- Quitting restores the window layout it took over.
- The dedicated agenda frame and its tests are gone.
- S-&lt;f8&gt; returns to the force-rescan.

The frame bought live shared state. It paid for that with a read-only deny policy, engage-routing and a snapshot failure path. All of it existed only because the agenda shared a process with my working frames. A full-frame F8 needs none of it.

The refresh rebuilds only a visible agenda. It keeps point on its line. The body is guarded, because a signal in a repeating timer resignals every tick.
</content>
</entry>
<entry>
<title>fix(agenda): spawn the agenda frame tiled, not compositor-fullscreen</title>
<updated>2026-07-20T20:38:23+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-20T20:38:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=1ccd7bddf55c41202afe316e70fa01059e1bcbbb'/>
<id>urn:sha1:1ccd7bddf55c41202afe316e70fa01059e1bcbbb</id>
<content type='text'>
I dropped (fullscreen . fullboth) from the spawned frame so a tiling WM places it side by side with the working frame. "Fullscreen" was the wrong word for the intent: a normal frame at its full tiled position, not one covering the whole output. The engage-routing and focus logic are unchanged and matter more now, since a task opens in the adjacent working pane.
</content>
</entry>
<entry>
<title>feat(agenda): add S-&lt;f8&gt; dedicated fullscreen agenda frame</title>
<updated>2026-07-20T19:23:38+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-20T19:23:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=404590623599398f120cd73d44ad235271c3b5bd'/>
<id>urn:sha1:404590623599398f120cd73d44ad235271c3b5bd</id>
<content type='text'>
I added a standing agenda surface in its own fullscreen frame of the daemon, placeable on its own workspace while the working frames stay untouched. S-&lt;f8&gt; spawns, raises, or closes it. The force-rescan moves to C-M-&lt;f8&gt;.

It shows a today-anchored seven-day view and refreshes every five minutes through org-agenda-redo, so the now-line and synced events stay current without re-scanning the file list. A default-deny minor mode keeps it read-only: only navigation, the engage keys (routed to the working frame), and the frame's own controls are allowed. A failed redo falls back to the last-good snapshot with cloned markers, so the frame is never blank or unrestricted.

I made it a frame of the daemon rather than a second process, so it shares the live state (calendar-sync, edits, the now-line). There's no startup auto-open, and the Hyprland-managed-window variant is a vNext once this proves out.
</content>
</entry>
</feed>
