diff options
| author | Ramses <ramses@well-founded.dev> | 2025-09-28 04:44:20 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-27 19:44:20 -0700 |
| commit | cc2b7170290d699f7021483df3fd9ca1afe8bc43 (patch) | |
| tree | e3011a1a56a7b8a9c61696684e9fcf3c2fdf73f9 /crates | |
| parent | fix: docker compose link (#2914) (diff) | |
| download | atuin-cc2b7170290d699f7021483df3fd9ca1afe8bc43.zip | |
fix: fish up binding (#2902)
Diffstat (limited to 'crates')
| -rw-r--r-- | crates/atuin/src/command/client/init/fish.rs | 93 |
1 files changed, 61 insertions, 32 deletions
diff --git a/crates/atuin/src/command/client/init/fish.rs b/crates/atuin/src/command/client/init/fish.rs index 954a7bd6..47d41b4b 100644 --- a/crates/atuin/src/command/client/init/fish.rs +++ b/crates/atuin/src/command/client/init/fish.rs @@ -1,48 +1,77 @@ use atuin_dotfiles::store::{AliasStore, var::VarStore}; use eyre::Result; +fn print_bindings( + indent: &str, + disable_up_arrow: bool, + disable_ctrl_r: bool, + bind_ctrl_r: &str, + bind_up_arrow: &str, + bind_ctrl_r_ins: &str, + bind_up_arrow_ins: &str, +) { + if !disable_ctrl_r { + println!("{indent}{bind_ctrl_r}"); + } + if !disable_up_arrow { + println!("{indent}{bind_up_arrow}"); + } + + println!("{indent}if bind -M insert >/dev/null 2>&1"); + if !disable_ctrl_r { + println!("{indent}{indent}{bind_ctrl_r_ins}"); + } + if !disable_up_arrow { + println!("{indent}{indent}{bind_up_arrow_ins}"); + } + println!("{indent}end"); +} + pub fn init_static(disable_up_arrow: bool, disable_ctrl_r: bool) { + let indent = " ".repeat(4); + let base = include_str!("../../../shell/atuin.fish"); println!("{base}"); - // In fish 4.0 and above the option bind -k doesn't exist anymore. - // We keep it for compatibility with fish 3.x if std::env::var("ATUIN_NOBIND").is_err() { - const BIND_CTRL_R: &str = r"bind \cr _atuin_search"; - const BIND_CTRL_R_INS: &str = r"bind -M insert \cr _atuin_search"; - const BIND_UP_ARROW_INS: &str = r"bind -M insert -k up _atuin_bind_up -bind -M insert \eOA _atuin_bind_up -bind -M insert \e\[A _atuin_bind_up"; + println!("if string match -q '4.*' $version"); - let bind_up_arrow = match std::env::var("FISH_VERSION") { - Ok(ref version) if version.starts_with("4.") => r"bind up _atuin_bind_up", - Ok(_) => r"bind -k up _atuin_bind_up", + // In fish 4.0 and above the option bind -k doesn't exist anymore, + // instead we can use key names and modifiers directly. + print_bindings( + &indent, + disable_up_arrow, + disable_ctrl_r, + "bind ctrl-r _atuin_search", + "bind up _atuin_bind_up", + "bind -M insert ctrl-r _atuin_search", + "bind -M insert up _atuin_bind_up", + ); - // do nothing - we can't panic or error as this could be in use in - // non-fish pipelines - _ => "", - } - .to_string(); + println!("else"); - if !disable_ctrl_r { - println!("{BIND_CTRL_R}"); - } - if !disable_up_arrow { - println!( - r"{bind_up_arrow} -bind \eOA _atuin_bind_up -bind \e\[A _atuin_bind_up" - ); - } + // We keep these for compatibility with fish 3.x + print_bindings( + &indent, + disable_up_arrow, + disable_ctrl_r, + r"bind \cr _atuin_search", + &[ + r"bind -k up _atuin_bind_up", + r"bind \eOA _atuin_bind_up", + r"bind \e\[A _atuin_bind_up", + ] + .join("; "), + r"bind -M insert \cr _atuin_search", + &[ + r"bind -M insert -k up _atuin_bind_up", + r"bind -M insert \eOA _atuin_bind_up", + r"bind -M insert \e\[A _atuin_bind_up", + ] + .join("; "), + ); - println!("if bind -M insert > /dev/null 2>&1"); - if !disable_ctrl_r { - println!("{BIND_CTRL_R_INS}"); - } - if !disable_up_arrow { - println!("{BIND_UP_ARROW_INS}"); - } println!("end"); } } |
