matryer/xbar · error

length

Error message

length

What it means

This error occurs when the "length" key in a plugin item's parameter string cannot be parsed as an integer. setValueByKey calls parseInt for the length value and wraps any failure with the key "length". It means the length= value used to truncate item text is not a valid integer.

Source

Thrown at pkg/plugins/item_params.go:230

		if err != nil {
			return errors.Wrap(err, key)
		}
	case "refresh":
		var err error
		p.Refresh, err = parseBool(value)
		if err != nil {
			return errors.Wrap(err, key)
		}
	case "dropdown":
		var err error
		p.Dropdown, err = parseBool(value)
		if err != nil {
			return errors.Wrap(err, key)
		}
	case "length":
		val, err := parseInt(value)
		if err != nil {
			return errors.Wrap(err, key)
		}
		p.Length = val
	case "trim":
		var err error
		p.Trim, err = parseBool(value)
		if err != nil {
			return errors.Wrap(err, key)
		}
	case "alternate":
		var err error
		p.Alternate, err = parseBool(value)
		if err != nil {
			return errors.Wrap(err, key)
		}
	case "emojize":
		var err error
		p.Emojize, err = parseBool(value)
		if err != nil {

View on GitHub (pinned to d624239058)

Solutions

  1. Change the value to a plain integer, e.g. length=30.
  2. Remove units or decimal points (length=10px -> length=10).
  3. Ensure a non-empty numeric value follows '='; if truncation is not wanted, remove the length key entirely rather than leaving it blank.
  4. If the value is computed at runtime, format it with a plain integer (e.g. printf 'length=%d' "$n") instead of string interpolation that may inject units.

Example fix

// before
params := "length=20px"
// after
params := "length=20"
Defensive patterns

Strategy: validation

Validate before calling

if v := getParam(params, "length"); v != "" {
    if _, err := strconv.Atoi(strings.TrimSpace(v)); err != nil {
        return fmt.Errorf("length must be a plain integer, got %q", v)
    }
}

Type guard

func isInt(s string) bool {
    _, err := strconv.Atoi(strings.TrimSpace(s))
    return err == nil
}

Try / catch

if err := item.ParseParams(raw); err != nil {
    if strings.Contains(err.Error(), "length") {
        log.Printf("bad length in %q: %v; dropping key", raw, err)
        raw = removeParam(raw, "length")
    }
}

Prevention

When it happens

Trigger: Parsing a param string containing 'length=abc', 'length=10px', 'length=' (empty), or 'length=3.5' via parseParamStr — anything strconv.Atoi rejects.

Common situations: Developers set a max character length for menu bar text and accidentally include units (px, chars), decimals, or leave the value empty after deleting a number during editing.

Related errors


AI-assisted analysis of matryer/xbar@d624239058 (2026-09-02). Data as JSON: /api/errors/285f6b4efd3f9062. Report an issue: GitHub.