aboutsummaryrefslogtreecommitdiffstats
path: root/crates
diff options
context:
space:
mode:
authorRamses <ramses@well-founded.dev>2025-09-28 04:44:20 +0200
committerGitHub <noreply@github.com>2025-09-27 19:44:20 -0700
commitcc2b7170290d699f7021483df3fd9ca1afe8bc43 (patch)
treee3011a1a56a7b8a9c61696684e9fcf3c2fdf73f9 /crates
parentfix: docker compose link (#2914) (diff)
downloadatuin-cc2b7170290d699f7021483df3fd9ca1afe8bc43.zip
fix: fish up binding (#2902)
Diffstat (limited to 'crates')
-rw-r--r--crates/atuin/src/command/client/init/fish.rs93
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");
}
}