summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYummyOreo <bobgim20@gmail.com>2023-03-05 13:00:59 -0600
committerGitHub <noreply@github.com>2023-03-05 19:00:59 +0000
commite9c5e1d85c5c1d3310fb7994c474f9462c0bca97 (patch)
tree22ca21bc9f8a6b6fb860acc89ae69008df90e262
parentdf16a03cb630644b1dd5705ff0a89149b20f3d08 (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.rs8
-rw-r--r--src/command/client/import.rs5
-rw-r--r--src/command/client/search/interactive.rs8
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)