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
- Read the message text to identify exactly which feature is missing and avoid that option.
- Use a supported subset of `bind` (listing with -l/-P/-p, simple function bindings).
- 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
- Stick to the documented/implemented subset of `bind` flags in portable scripts.
- Feature-detect advanced options at startup and degrade gracefully.
- Track the brush/pi-builtins changelog for when stubbed features land.
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
- unknown function: {0}
- unknown key binding function: {0}
- transparent (brush_parser::BindingParseError)
- I/O error occurred
- {}
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/dd39ef2eb60b01c4.
Report an issue: GitHub.