wezterm/wezterm · error

missing cursor_x

Error message

missing cursor_x

What it means

Same ListAllPanes parser: the fifth field (cursor_x) is missing from a list-panes line that already yielded session_id, window_id, pane_id and pane_index. A present-but-non-numeric cursor_x would raise a ParseIntError instead.

Source

Thrown at mux/src/tmux_commands.rs:702

            if line.is_empty() {
                continue;
            }
            let mut fields = line.split(' ');
            // These ids all have various sigils such as `$`, `%`, `@`,
            // so skip those prior to parsing them
            let session_id =
                parse_sigil_number(fields.next().ok_or_else(|| anyhow!("missing session_id"))?)?;
            let window_id =
                parse_sigil_number(fields.next().ok_or_else(|| anyhow!("missing window_id"))?)?;
            let pane_id =
                parse_sigil_number(fields.next().ok_or_else(|| anyhow!("missing pane_id"))?)?;
            let _pane_index = fields
                .next()
                .ok_or_else(|| anyhow!("missing pane_index"))?
                .parse()?;
            let cursor_x = fields
                .next()
                .ok_or_else(|| anyhow!("missing cursor_x"))?
                .parse()?;
            let cursor_y = fields
                .next()
                .ok_or_else(|| anyhow!("missing cursor_y"))?
                .parse()?;
            let pane_width = fields
                .next()
                .ok_or_else(|| anyhow!("missing pane_width"))?
                .parse()?;
            let pane_height = fields
                .next()
                .ok_or_else(|| anyhow!("missing pane_height"))?
                .parse()?;
            let pane_left = fields
                .next()
                .ok_or_else(|| anyhow!("missing pane_left"))?
                .parse()?;
            let pane_top = fields

View on GitHub (pinned to 9c04f79f86)

Solutions

  1. Run `tmux list-panes -F '#{session_id} #{window_id} #{pane_id} #{pane_index} #{cursor_x} ...'` manually and inspect for 4-column lines
  2. Test with a clean tmux server (`tmux -f /dev/null new-session -d`) to rule out config/plugins
  3. Upgrade tmux; retry the domain attach after restarting the tmux server (`tmux kill-server`)
  4. File a wezterm issue including tmux version and the raw malformed line
Defensive patterns

Strategy: validation

Validate before calling

let cols: Vec<&str> = line.split(' ').collect();
if cols.len() < 11 || cols.get(4).map(|s| s.parse::<u32>().is_ok()) != Some(true) {
    log::warn!("skipping line without numeric cursor_x: {line:?}");
    continue;
}

Try / catch

Err(e) if e.to_string().contains("missing cursor_x") => {
    log::warn!("list-panes reply truncated at cursor_x; resync domain: {e:#}");
}

Prevention

When it happens

Trigger: list-panes output truncated after four columns — custom tmux format overrides, a wrapper emitting partial lines, or output interleaving where a line break lands mid-record.

Common situations: Heavily customized tmux setups, or tmux built from source with patches; also seen when the tmux control stream mixes in partial writes under load.

Related errors


AI-assisted analysis of wezterm/wezterm@9c04f79f86 (2026-08-16). Data as JSON: /api/errors/cd69d8baf3437256. Report an issue: GitHub.