diff options
author | YummyOreo <bobgim20@gmail.com> | 2023-03-05 13:00:59 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-05 19:00:59 +0000 |
commit | e9c5e1d85c5c1d3310fb7994c474f9462c0bca97 (patch) | |
tree | 22ca21bc9f8a6b6fb860acc89ae69008df90e262 | |
parent | df16a03cb630644b1dd5705ff0a89149b20f3d08 (diff) |
Windows support (#754)
* adds support for getting home dir in windows
* fixes bug
* adds windows server support + build for linux ^| todo: test server on linux
* improvements to redability
* removes comment
* returns if windows when importing auto
* this should be here, to prevent double inputs
* adds explanation to why we have to throw away 1 event in the tui
* better message when running atuin import on windows + spell fix
-rw-r--r-- | atuin-common/src/utils.rs | 8 | ||||
-rw-r--r-- | src/command/client/import.rs | 5 | ||||
-rw-r--r-- | src/command/client/search/interactive.rs | 8 |
3 files changed, 20 insertions, 1 deletions
diff --git a/atuin-common/src/utils.rs b/atuin-common/src/utils.rs index a73e3fba..d85b3b96 100644 --- a/atuin-common/src/utils.rs +++ b/atuin-common/src/utils.rs @@ -10,11 +10,19 @@ pub fn uuid_v4() -> String { // TODO: more reliable, more tested // I don't want to use ProjectDirs, it puts config in awkward places on // mac. Data too. Seems to be more intended for GUI apps. + +#[cfg(not(target_os = "windows"))] pub fn home_dir() -> PathBuf { let home = std::env::var("HOME").expect("$HOME not found"); PathBuf::from(home) } +#[cfg(target_os = "windows")] +pub fn home_dir() -> PathBuf { + let home = std::env::var("USERPROFILE").expect("%userprofile% not found"); + PathBuf::from(home) +} + pub fn config_dir() -> PathBuf { let config_dir = std::env::var("XDG_CONFIG_HOME").map_or_else(|_| home_dir().join(".config"), PathBuf::from); diff --git a/src/command/client/import.rs b/src/command/client/import.rs index f14598f2..7d7c2caf 100644 --- a/src/command/client/import.rs +++ b/src/command/client/import.rs @@ -45,6 +45,11 @@ impl Cmd { match self { Self::Auto => { + if cfg!(windows) { + println!("This feature does not work on windows. Please run atuin import <SHELL>. To view a list of shells, run atuin import."); + return Ok(()); + } + let shell = env::var("SHELL").unwrap_or_else(|_| String::from("NO_SHELL")); if shell.ends_with("/zsh") { if ZshHistDb::histpath().is_ok() { diff --git a/src/command/client/search/interactive.rs b/src/command/client/search/interactive.rs index c5c983ac..05ab03e4 100644 --- a/src/command/client/search/interactive.rs +++ b/src/command/client/search/interactive.rs @@ -475,6 +475,13 @@ pub async fn history( let initial_input = app.input.as_str().to_owned(); let initial_filter_mode = app.filter_mode; + { + // We do this because windows does double inputs and captures the `Enter` when running a + // command + #[cfg(target_os = "windows")] + let _ = event::read(); + }; + let event_ready = tokio::task::spawn_blocking(|| event::poll(Duration::from_millis(250))); tokio::select! { @@ -499,7 +506,6 @@ pub async fn history( results = app.query_results(settings.search_mode, db).await?; } }; - if index < results.len() { // index is in bounds so we return that entry Ok(results.swap_remove(index).command) |