aboutsummaryrefslogtreecommitdiffstats
path: root/src/command
diff options
context:
space:
mode:
authorSteven Xu <stevenxxiu@users.noreply.github.com>2023-03-27 01:44:06 +1100
committerGitHub <noreply@github.com>2023-03-26 15:44:06 +0100
commita7cb21a51b393b436c0ca7e09c892ebb3c597ad0 (patch)
treed55d1ad07d5d01ccac6f5100bf4d131da748537c /src/command
parentAdd musl build (#809) (diff)
downloadatuin-a7cb21a51b393b436c0ca7e09c892ebb3c597ad0.zip
feat: add *Nushell* support (#788)
* feat: add *Nushell* support * refactor: use `sh` to swap `STDOUT` and `STDERR` instead of using a temporary file * feat: include both keybindings, with the current REPL buffer passed to *Atuin*'s * feat: don't record commands run by keybindings
Diffstat (limited to '')
-rw-r--r--src/command/client/import.rs20
-rw-r--r--src/command/init.rs44
2 files changed, 63 insertions, 1 deletions
diff --git a/src/command/client/import.rs b/src/command/client/import.rs
index 7d7c2caf..7abc3d44 100644
--- a/src/command/client/import.rs
+++ b/src/command/client/import.rs
@@ -9,7 +9,8 @@ use atuin_client::{
database::Database,
history::History,
import::{
- bash::Bash, fish::Fish, resh::Resh, zsh::Zsh, zsh_histdb::ZshHistDb, Importer, Loader,
+ bash::Bash, fish::Fish, nu::Nu, nu_histdb::NuHistDb, resh::Resh, zsh::Zsh,
+ zsh_histdb::ZshHistDb, Importer, Loader,
},
};
@@ -29,6 +30,10 @@ pub enum Cmd {
Resh,
/// Import history from the fish history file
Fish,
+ /// Import history from the nu history file
+ Nu,
+ /// Import history from the nu history file
+ NuHistDb,
}
const BATCH_SIZE: usize = 100;
@@ -68,6 +73,17 @@ impl Cmd {
} else if shell.ends_with("/bash") {
println!("Detected Bash");
import::<Bash, DB>(db).await
+ } else if shell.ends_with("/nu") {
+ if NuHistDb::histpath().is_ok() {
+ println!(
+ "Detected Nu-HistDb, using :{}",
+ NuHistDb::histpath().unwrap().to_str().unwrap()
+ );
+ import::<NuHistDb, DB>(db).await
+ } else {
+ println!("Detected Nushell");
+ import::<Nu, DB>(db).await
+ }
} else {
println!("cannot import {shell} history");
Ok(())
@@ -79,6 +95,8 @@ impl Cmd {
Self::Bash => import::<Bash, DB>(db).await,
Self::Resh => import::<Resh, DB>(db).await,
Self::Fish => import::<Fish, DB>(db).await,
+ Self::Nu => import::<Nu, DB>(db).await,
+ Self::NuHistDb => import::<NuHistDb, DB>(db).await,
}
}
}
diff --git a/src/command/init.rs b/src/command/init.rs
index 585a8281..7cb4b35e 100644
--- a/src/command/init.rs
+++ b/src/command/init.rs
@@ -21,6 +21,8 @@ pub enum Shell {
Bash,
/// Fish setup
Fish,
+ /// Nu setup
+ Nu,
}
impl Cmd {
@@ -90,11 +92,53 @@ bind -M insert \e\[A _atuin_bind_up";
println!("end");
}
}
+
+ fn init_nu(&self) {
+ let full = include_str!("../shell/atuin.nu");
+ println!("{full}");
+
+ if std::env::var("ATUIN_NOBIND").is_err() {
+ const BIND_CTRL_R: &str = r#"let-env config = (
+ $env.config | upsert keybindings (
+ $env.config.keybindings
+ | append {
+ name: atuin
+ modifier: control
+ keycode: char_r
+ mode: emacs
+ event: { send: executehostcommand cmd: (_atuin_search_cmd) }
+ }
+ )
+)
+"#;
+ const BIND_UP_ARROW: &str = r#"let-env config = (
+ $env.config | upsert keybindings (
+ $env.config.keybindings
+ | append {
+ name: atuin
+ modifier: none
+ keycode: up
+ mode: emacs
+ event: { send: executehostcommand cmd: (_atuin_search_cmd '--shell-up-key-binding') }
+ }
+ )
+)
+"#;
+ if !self.disable_ctrl_r {
+ println!("{BIND_CTRL_R}");
+ }
+ if !self.disable_up_arrow {
+ println!("{BIND_UP_ARROW}");
+ }
+ }
+ }
+
pub fn run(self) {
match self.shell {
Shell::Zsh => self.init_zsh(),
Shell::Bash => self.init_bash(),
Shell::Fish => self.init_fish(),
+ Shell::Nu => self.init_nu(),
}
}
}