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 = fieldsView on GitHub (pinned to 9c04f79f86)
Solutions
- Run `tmux list-panes -F '#{session_id} #{window_id} #{pane_id} #{pane_index} #{cursor_x} ...'` manually and inspect for 4-column lines
- Test with a clean tmux server (`tmux -f /dev/null new-session -d`) to rule out config/plugins
- Upgrade tmux; retry the domain attach after restarting the tmux server (`tmux kill-server`)
- 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
- Wrap tmux traffic over stable transports (avoid flaky ssh multiplexers that truncate streams)
- After tmux upgrades, run one manual attach and watch logs before automating against the domain
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.