wezterm/wezterm · error · anyhow::Error

missing pane_height

Error message

missing pane_height

What it means

WezTerm's tmux integration expects every non-empty `list-panes` reply line to carry 11 space-separated fields (session_id through pane_active). `missing pane_height` means the line ended after exactly 7 tokens (through pane_width), so `fields.next()` returned None at field 8, the pane row count.

Source

Thrown at mux/src/tmux_commands.rs:714

            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
                .next()
                .ok_or_else(|| anyhow!("missing pane_top"))?
                .parse()?;
            let pane_active = fields
                .next()
                .ok_or_else(|| anyhow!("missing pane_active"))?
                .parse::<usize>()?;

            let pane_active = pane_active == 1;

            pane_set.insert(pane_id);

View on GitHub (pinned to 08e5e0afc6)

Solutions

  1. Upgrade the tmux server to a mainstream release >= 3.1 and retest.
  2. Reproduce under `tmux -CC` with the exact format string and locate the 7-token line.
  3. Rule out tmux.conf output with `tmux -f /dev/null`.
  4. Update WezTerm.
  5. Capture the line with WEZTERM_LOG=trace and file an issue.

Example fix

// before
let pane_height = fields
    .next()
    .ok_or_else(|| anyhow!("missing pane_height"))?
    .parse()?;

// after
let fields: Vec<&str> = line.split(' ').collect();
anyhow::ensure!(fields.len() >= 11, "malformed list-panes line: {line:?}");
let pane_height: u64 = fields[7].parse()?;
Defensive patterns

Strategy: validation

Validate before calling

fn pane_line_is_complete(line: &str) -> bool {
    !line.is_empty() && line.split(' ').count() >= 11
}

Try / catch

if let Err(err) = panes_result {
    if err.to_string().starts_with("missing ") {
        log::warn!("tmux output malformed: {err:#}");
        return; // non-fatal: next sync round retries
    }
    return Err(err);
}

Prevention

When it happens

Trigger: A pane sync on a tmux domain where a captured line has only 7 tokens: truncated tmux output, an unexpected line inside the %begin/%end block, or list-panes rendering from a tmux build that deviates from the format string in `ListAllPanes::get_command`.

Common situations: Old or vendor-patched tmux servers, rapid pane/window teardown during sync, control-stream desync. The error propagates out of `process_result` and fails `sync_pane_state`/`remove_detached_pane` for that round.

Related errors


AI-assisted analysis of wezterm/wezterm@08e5e0afc6 (2026-08-20). Data as JSON: /api/errors/6c12804ff398e0c2. Report an issue: GitHub.