aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-hex/src/lib.rs
diff options
context:
space:
mode:
authorMichelle Tilley <michelle@michelletilley.net>2026-03-23 15:12:02 -0700
committerGitHub <noreply@github.com>2026-03-23 22:12:02 +0000
commit640beb344dd469651f918a0a2ea04fbcb5690c56 (patch)
tree7331fdb034181aa8577dae2f31784efbc8769979 /crates/atuin-hex/src/lib.rs
parentchore: Refactor CLI auth flows and token storage (#3317) (diff)
downloadatuin-640beb344dd469651f918a0a2ea04fbcb5690c56.zip
fix: Don't run 'atuin init' in 'atuin hex init' — each must be initialized separately (#3334)
Diffstat (limited to 'crates/atuin-hex/src/lib.rs')
-rw-r--r--crates/atuin-hex/src/lib.rs48
1 files changed, 11 insertions, 37 deletions
diff --git a/crates/atuin-hex/src/lib.rs b/crates/atuin-hex/src/lib.rs
index b08da631..feed6e36 100644
--- a/crates/atuin-hex/src/lib.rs
+++ b/crates/atuin-hex/src/lib.rs
@@ -29,17 +29,6 @@ enum Shell {
Nu,
}
-impl Shell {
- fn as_str(self) -> &'static str {
- match self {
- Self::Bash => "bash",
- Self::Zsh => "zsh",
- Self::Fish => "fish",
- Self::Nu => "nu",
- }
- }
-}
-
impl Init {
fn run(self) -> Result<(), String> {
let shell = detect_shell(self.shell)?;
@@ -102,15 +91,9 @@ fn shell_from_name(name: &str) -> Option<Shell> {
}
}
-fn init_command(shell: Shell) -> String {
- format!("atuin init {}", shell.as_str())
-}
-
-fn render_init(shell: Shell) -> String {
- let init_command = init_command(shell);
-
+fn render_init(shell: Shell) -> &'static str {
match shell {
- Shell::Bash | Shell::Zsh => format!(
+ Shell::Bash | Shell::Zsh => {
r#"if [[ "$-" == *i* ]] && [[ -t 0 ]] && [[ -t 1 ]]; then
_atuin_hex_tmux_current="${{TMUX:-}}"
_atuin_hex_tmux_previous="${{ATUIN_HEX_TMUX:-}}"
@@ -123,11 +106,9 @@ fn render_init(shell: Shell) -> String {
unset _atuin_hex_tmux_current _atuin_hex_tmux_previous
fi
-
-eval "$({init_command})"
"#
- ),
- Shell::Fish => format!(
+ }
+ Shell::Fish => {
r#"if status is-interactive; and test -t 0; and test -t 1
set -l _atuin_hex_tmux_current ""
if set -q TMUX
@@ -149,14 +130,13 @@ eval "$({init_command})"
exec atuin hex
end
end
-
-{init_command} | source
"#
- ),
+ }
// Nushell cannot dynamically source the output of `atuin init nu`,
// so we only output the hex preamble here. Users must also set up
// `atuin init nu` separately.
- Shell::Nu => r#"if (is-terminal --stdin) and (is-terminal --stdout) {
+ Shell::Nu => {
+ r#"if (is-terminal --stdin) and (is-terminal --stdout) {
let tmux_current = ($env.TMUX? | default "")
let tmux_previous = ($env.ATUIN_HEX_TMUX? | default "")
@@ -167,7 +147,7 @@ end
}
}
"#
- .to_string(),
+ }
}
}
@@ -452,7 +432,7 @@ mod app {
#[cfg(test)]
mod tests {
- use super::{Shell, init_command, render_init, shell_from_name};
+ use super::{Shell, render_init, shell_from_name};
#[test]
fn shell_from_name_handles_paths() {
@@ -463,24 +443,18 @@ mod tests {
}
#[test]
- fn init_command_is_bootstrap_only() {
- let command = init_command(Shell::Zsh);
- assert_eq!(command, "atuin init zsh");
- }
-
- #[test]
fn posix_init_uses_exec_and_tmux_guard() {
let script = render_init(Shell::Bash);
assert!(script.contains("exec atuin hex"));
assert!(script.contains("ATUIN_HEX_TMUX"));
- assert!(script.contains("eval \"$(atuin init bash)\""));
+ assert!(!script.contains("eval \"$(atuin init bash)\""));
}
#[test]
fn fish_init_uses_source() {
let script = render_init(Shell::Fish);
assert!(script.contains("exec atuin hex"));
- assert!(script.contains("atuin init fish | source"));
+ assert!(!script.contains("atuin init fish | source"));
}
#[test]