can1357/oh-my-pi · warning · BindError

unimplemented: {0}

Error message

unimplemented: {0}

What it means

`BindError::Unimplemented` is returned when a `bind` invocation requests functionality that the brush shell has not implemented yet. The payload is a static string describing what is missing. This is an intentional capability gap, not a user mistake: the shell is telling you the requested `bind` feature is a known no-op/stub.

Source

Thrown at crates/pi-builtins/src/bind.rs:100

	/// List key sequence bindings.
	#[arg(short = 'X')]
	list_key_seq_bindings: bool,
	/// Key sequence binding to readline function or command.
	key_sequence: Option<String>,
}

#[derive(Debug, thiserror::Error)]
pub(crate) enum BindError {
	/// Unknown function specified.
	#[error("unknown function: {0}")]
	UnknownFunction(String),

	/// Unknown key binding function.
	#[error("unknown key binding function: {0}")]
	UnknownKeyBindingFunction(String),

	/// Unimplemented functionality.
	#[error("unimplemented: {0}")]
	Unimplemented(&'static str),

	/// An I/O error occurred.
	#[error("I/O error occurred")]
	IoError(#[from] std::io::Error),

	/// A binding parse error occurred.
	#[error(transparent)]
	BindingParseError(#[from] brush_parser::BindingParseError),
}

impl brush_core::BuiltinError for BindError {}

impl From<&BindError> for brush_core::ExecutionExitCode {
	fn from(_err: &BindError) -> Self {
		Self::GeneralError
	}
}

View on GitHub (pinned to 9690622007)

Solutions

  1. Read the message text to identify exactly which feature is missing and avoid that option.
  2. Use a supported subset of `bind` (listing with -l/-P/-p, simple function bindings).
  3. Check the brush/pi-builtins issue tracker or source for implementation status; upgrade if a newer version implements the feature.

Example fix

// before
$ bind -m vi-insert -x '"\C-r": history-search'
unimplemented: -x with keymaps
// after
$ bind -x '"\C-r": history-search'   # drop the unsupported option
Defensive patterns

Strategy: fallback

Validate before calling

// probe whether an option is supported before relying on it
if bind -m vi-insert -l 2>/dev/null; then
  bind -m vi-insert '\C-r' history-search-backward
else
  echo "keymap bind not supported; using default keymap" >&2
fi

Prevention

When it happens

Trigger: Calling `bind` with flags or modes whose handling code constructs `BindError::Unimplemented("...")` — e.g. keymap manipulations or binding features (`-m` keymap variants, macro definitions, etc.) that brush has stubbed out.

Common situations: Running bash scripts that use advanced `bind` options; trying vi-mode keymap reconfiguration (`bind -m vi-insert ...`) in a build where that path is unimplemented; interactive users copying bash invocations verbatim.

Related errors


AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31). Data as JSON: /api/errors/dd39ef2eb60b01c4. Report an issue: GitHub.