fzf has two distinct window concepts with different resize semantics. The popup is set once at launch via --tmux "center,W,H" and cannot be resized after. The preview window can be resized per-entry via the focus:transform bind emitting a change-preview-window(...) action. To make a picker feel “native” across heterogeneous entries, size the popup up-front to the widest entry and re-size the preview on every focus change using a hidden per-row width field.

Almost every intuitive “dynamic fzf window” idea hits the popup wall. The popup dimensions are fixed for the session, full stop. The focus:transform escape hatch is easy to miss because it’s listed under “transform” events rather than preview controls; the common wrong turn is reaching for a nonexistent transform-preview-window action. There is no such action. Only change-preview-window(...) exists; the dynamism comes from generating it via focus:transform.

The mechanics. focus:transform:CMD runs CMD on every focus change, and CMD must print a fzf action string on stdout, which fzf then executes. Example: focus:transform:printf 'change-preview-window(right,%s,noinfo,follow)' {3} where {3} is a hidden width field on each row. --with-nth=N.. hides fields 1..N-1 from the visible list while keeping them accessible in binds via {1}, {2}, etc., which is how you attach per-row metadata (pane_id, socket, width, height) without showing it to the user.

Two color quirks bite reliably. --ansi is required for fzf to pass through ANSI escapes from preview output; without it, fzf strips escape sequences and the preview is plain text. COLORTERM=truecolor is required because tmux popups commonly inherit TERM=screen-256color, and fzf will silently downgrade truecolor bg sequences to 256-color approximations unless COLORTERM=truecolor is set in its environment. Prefix invocations with both: COLORTERM=truecolor fzf --ansi ....

Compute popup dimensions up-front from all entries’ dimensions (max(widths) + list_column + padding), then let focus:transform shrink the preview to match each entry. Don’t try to resize the popup. Store per-row metadata as leading hidden fields and expose them to binds via {N} placeholders rather than parsing visible content to recover metadata. See Tmux capture-pane Color Semantics for the typical producer of bg-wrapped truecolor content fzf renders, and Neovim Window Geometry and Read-Only RPC for the geometry source that drives per-entry preview width.