aboutsummaryrefslogtreecommitdiff
path: root/working/eat-sixel-patch
diff options
context:
space:
mode:
Diffstat (limited to 'working/eat-sixel-patch')
-rw-r--r--working/eat-sixel-patch/eat-xtwinops.patch46
-rw-r--r--working/eat-sixel-patch/rulesets-companion-note.org5
-rw-r--r--working/eat-sixel-patch/takuzu-original-bug-report.org17
3 files changed, 68 insertions, 0 deletions
diff --git a/working/eat-sixel-patch/eat-xtwinops.patch b/working/eat-sixel-patch/eat-xtwinops.patch
new file mode 100644
index 00000000..4347d729
--- /dev/null
+++ b/working/eat-sixel-patch/eat-xtwinops.patch
@@ -0,0 +1,46 @@
+--- a/eat.el
++++ b/eat.el
+@@ -2809,6 +2809,33 @@
+ (funcall (eat--t-term-input-fn eat--t-term) eat--t-term
+ "\e[>0;0;0c")))))
+
++(defun eat--t-send-window-size-report (n)
++ "Respond to XTWINOPS window size report request N.
++
++N is 14 (text area size in pixels), 16 (cell size in pixels) or 18
++\(text area size in characters). Other operations are ignored.
++Multiplexers like tmux send \\='CSI 14 t\\=' to discover the cell
++pixel size they need before they will emit Sixel to a terminal."
++ (let ((disp (eat--t-term-display eat--t-term)))
++ (pcase n
++ (14
++ (funcall (eat--t-term-input-fn eat--t-term) eat--t-term
++ (format "\e[4;%i;%it"
++ (* (eat--t-disp-height disp)
++ (eat--t-term-char-height eat--t-term))
++ (* (eat--t-disp-width disp)
++ (eat--t-term-char-width eat--t-term)))))
++ (16
++ (funcall (eat--t-term-input-fn eat--t-term) eat--t-term
++ (format "\e[6;%i;%it"
++ (eat--t-term-char-height eat--t-term)
++ (eat--t-term-char-width eat--t-term))))
++ (18
++ (funcall (eat--t-term-input-fn eat--t-term) eat--t-term
++ (format "\e[8;%i;%it"
++ (eat--t-disp-height disp)
++ (eat--t-disp-width disp)))))))
++
+ (defun eat--t-send-graphics-attrs (attr operation)
+ "Send graphics attributes.
+
+@@ -3632,6 +3659,9 @@
+ ;; CSI s.
+ (`((?s) nil nil)
+ (eat--t-save-cur))
++ ;; CSI <n> t.
++ (`((?t) nil ((,n)))
++ (eat--t-send-window-size-report n))
+ ;; CSI u.
+ (`((?u) nil nil)
+ (eat--t-restore-cur)))))))
diff --git a/working/eat-sixel-patch/rulesets-companion-note.org b/working/eat-sixel-patch/rulesets-companion-note.org
new file mode 100644
index 00000000..2df33273
--- /dev/null
+++ b/working/eat-sixel-patch/rulesets-companion-note.org
@@ -0,0 +1,5 @@
+#+TITLE: EAT XTWINOPS patch companion note
+#+SOURCE: from rulesets
+#+DATE: 2026-07-13 10:58:54 -0500
+
+EAT XTWINOPS patch (companion file eat-xtwinops.patch, sent separately just now): verified live on ratio 2026-07-13, this makes sixel images render AND persist in tmux inside EAT. Root cause chain: tmux 3.7b has native sixel but refuses to transmit unless it knows the client's cell pixel size; it asks via CSI 14 t (XTWINOPS), which EAT 0.9.4 silently ignores (its CSI dispatch has no 't' case). The patch adds eat--t-send-window-size-report answering CSI 14/16/18 t from eat--t-term-char-width/height and the display dims — same fields EAT's own XTSMGRAPHICS reply already uses. With it, tmux learns the geometry at client attach, ingests raw sixel into its grid, and re-emits on every redraw — images survive window switches, scrolling, and resizing (Craig verified visually). Needs on the emacsd side: (1) a durable home for the patch — the elpa file is version-pinned, so likely a load-path shadow or an advice-free vendored fix, your call, plus wiring so both daily drivers load it (velox verified ready: same tmux build, imagemagick present); (2) written test-first per testing.md when productionizing — this was a timeboxed spike, treat the diff as evidence not deliverable; (3) strongly consider sending it upstream to EAT (codeberg akib/emacs-eat) so 0.9.5+ ships it stock. tmux side is separate (two conf lines, handoff sent to dotfiles). Ask rulesets for the full investigation log if useful.
diff --git a/working/eat-sixel-patch/takuzu-original-bug-report.org b/working/eat-sixel-patch/takuzu-original-bug-report.org
new file mode 100644
index 00000000..02107a88
--- /dev/null
+++ b/working/eat-sixel-patch/takuzu-original-bug-report.org
@@ -0,0 +1,17 @@
+#+TITLE: Bug/investigate: images from Claude Code don't display in th
+#+SOURCE: from takuzu
+#+DATE: 2026-07-11 14:41:39 -0500
+
+Bug/investigate: images from Claude Code don't display in the EAT terminal.
+
+Context: running Claude Code inside EAT (eat 0.9.4 from elpa). When the agent posts an image to the terminal, nothing renders — Craig can't see it.
+
+Finding: EAT *does* have Sixel image support. eat.el defines eat-sixel-scale, eat-sixel-aspect-ratio, eat-sixel-render-formats, and a full Sixel decode/render path (sixel-buffer, sixel-palette, sixel-render-format, etc.). So the capability exists; this isn't a plain 'EAT can't do images' limitation.
+
+Likely causes to check:
+1. Protocol mismatch: Claude Code CLI probably emits the kitty graphics protocol or the iTerm2 inline-image protocol (OSC 1337), NOT Sixel. EAT renders Sixel only, so a kitty/iTerm image sequence is dropped. Confirm which protocol Claude Code uses (env like TERM, or its terminal-capability detection) and whether it can be told to emit Sixel.
+2. Sixel render-format availability: eat-sixel-render-formats lists preferred render backends; if none is available in this Emacs build, Sixel silently won't display. Test EAT with a known-good sixel image (e.g. img2sixel output) to confirm EAT-side rendering works at all.
+
+Repro: in an EAT session, have Claude Code (or any tool) post an image; observe nothing renders. Next step: identify the emitted escape sequence (capture raw bytes) to confirm protocol.
+
+From the takuzu session, 2026-07-11 — surfaced because the agent kept posting game screenshots the terminal couldn't show.