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
This commit is contained in:
YummyOreo 2023-03-05 13:00:59 -06:00 committed by GitHub
parent df16a03cb6
commit e9c5e1d85c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 1 deletions

View file

@ -10,11 +10,19 @@ pub fn uuid_v4() -> String {
// TODO: more reliable, more tested // TODO: more reliable, more tested
// I don't want to use ProjectDirs, it puts config in awkward places on // 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. // mac. Data too. Seems to be more intended for GUI apps.
#[cfg(not(target_os = "windows"))]
pub fn home_dir() -> PathBuf { pub fn home_dir() -> PathBuf {
let home = std::env::var("HOME").expect("$HOME not found"); let home = std::env::var("HOME").expect("$HOME not found");
PathBuf::from(home) 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 { pub fn config_dir() -> PathBuf {
let config_dir = let config_dir =
std::env::var("XDG_CONFIG_HOME").map_or_else(|_| home_dir().join(".config"), PathBuf::from); std::env::var("XDG_CONFIG_HOME").map_or_else(|_| home_dir().join(".config"), PathBuf::from);

View file

@ -45,6 +45,11 @@ impl Cmd {
match self { match self {
Self::Auto => { 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")); let shell = env::var("SHELL").unwrap_or_else(|_| String::from("NO_SHELL"));
if shell.ends_with("/zsh") { if shell.ends_with("/zsh") {
if ZshHistDb::histpath().is_ok() { if ZshHistDb::histpath().is_ok() {

View file

@ -475,6 +475,13 @@ pub async fn history(
let initial_input = app.input.as_str().to_owned(); let initial_input = app.input.as_str().to_owned();
let initial_filter_mode = app.filter_mode; 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))); let event_ready = tokio::task::spawn_blocking(|| event::poll(Duration::from_millis(250)));
tokio::select! { tokio::select! {
@ -499,7 +506,6 @@ pub async fn history(
results = app.query_results(settings.search_mode, db).await?; results = app.query_results(settings.search_mode, db).await?;
} }
}; };
if index < results.len() { if index < results.len() {
// index is in bounds so we return that entry // index is in bounds so we return that entry
Ok(results.swap_remove(index).command) Ok(results.swap_remove(index).command)