zellij-org/zellij · error · anyhow::Error

Character key missing character data

Error message

Character key missing character data

What it means

Error "Character key missing character data" thrown in zellij-org/zellij.

Solutions

  1. Include the required 'character data' field in the protobuf message before sending it.
  2. Verify the sender populates all mandatory fields; add a presence check before conversion.

When it happens

Trigger: Occurs when a protobuf message received over IPC omits the required field; deserialization fails instead of using a default.

Common situations: Occurs when a client or plugin sends an incompletely populated message, often from a version mismatch or hand-crafted payload.


AI-assisted analysis of zellij-org/zellij@e839bfffa5 (2026-08-19). Data as JSON: /api/errors/cc8e055ba5fa43be. Report an issue: GitHub.

Appendix: source

Thrown at zellij-utils/src/ipc/protobuf_conversion.rs:3251

}

impl TryFrom<crate::client_server_contract::client_server_contract::KeyWithModifier>
    for crate::data::KeyWithModifier
{
    type Error = anyhow::Error;
    fn try_from(
        key: crate::client_server_contract::client_server_contract::KeyWithModifier,
    ) -> Result<Self> {
        use crate::ipc::enum_conversions::{bare_key_from_proto_i32, key_modifier_from_proto_i32};
        use std::collections::BTreeSet;

        // Handle character keys specially
        let bare_key = if key.bare_key
            == crate::client_server_contract::client_server_contract::BareKey::Char as i32
        {
            let character_str = key
                .character
                .ok_or_else(|| anyhow!("Character key missing character data"))?;
            let character = character_str
                .chars()
                .next()
                .ok_or_else(|| anyhow!("Empty character string"))?;
            crate::data::BareKey::Char(character)
        } else {
            bare_key_from_proto_i32(key.bare_key)?
        };

        let key_modifiers: Result<BTreeSet<_>> = key
            .key_modifiers
            .into_iter()
            .map(|modifier| key_modifier_from_proto_i32(modifier))
            .collect();

        Ok(Self {
            bare_key,
            key_modifiers: key_modifiers?,

View on GitHub (pinned to e839bfffa5)