2023-10-09 05:22:27 +08:00
|
|
|
use crate::wchar::prelude::*;
|
|
|
|
|
2023-07-05 22:07:37 +08:00
|
|
|
#[cfg(test)]
|
2023-07-04 03:19:40 +08:00
|
|
|
mod common;
|
2023-10-09 05:22:27 +08:00
|
|
|
mod complete;
|
2023-12-09 23:48:02 +08:00
|
|
|
mod debounce;
|
2023-12-03 01:20:40 +08:00
|
|
|
#[cfg(test)]
|
|
|
|
mod editable_line;
|
2023-10-09 05:22:27 +08:00
|
|
|
mod env;
|
|
|
|
mod env_universal_common;
|
|
|
|
mod expand;
|
2023-03-05 13:49:17 +08:00
|
|
|
mod fd_monitor;
|
2023-10-09 05:22:27 +08:00
|
|
|
mod highlight;
|
|
|
|
mod history;
|
2023-12-02 23:26:45 +08:00
|
|
|
mod pager;
|
2023-10-09 05:22:27 +08:00
|
|
|
mod parser;
|
2023-07-05 22:07:37 +08:00
|
|
|
#[cfg(test)]
|
2023-10-09 05:22:27 +08:00
|
|
|
mod redirection;
|
2023-11-26 02:40:31 +08:00
|
|
|
mod screen;
|
2023-07-04 03:19:40 +08:00
|
|
|
mod string_escape;
|
2023-09-17 19:42:24 +08:00
|
|
|
#[cfg(test)]
|
|
|
|
mod tokenizer;
|
2023-10-09 05:22:27 +08:00
|
|
|
mod topic_monitor;
|
|
|
|
|
|
|
|
mod prelude {
|
|
|
|
use crate::env::EnvStack;
|
|
|
|
pub use crate::tests::env::{PwdEnvironment, TestEnvironment};
|
|
|
|
use crate::wutil::wgetcwd;
|
|
|
|
use once_cell::sync::Lazy;
|
|
|
|
use std::sync::Mutex;
|
|
|
|
|
|
|
|
static PUSHED_DIRS: Lazy<Mutex<Vec<String>>> = Lazy::new(Mutex::default);
|
|
|
|
/// Helper to chdir and then update $PWD.
|
|
|
|
pub fn pushd(path: &str) {
|
|
|
|
let cwd = wgetcwd();
|
|
|
|
PUSHED_DIRS.lock().unwrap().push(cwd.to_string());
|
|
|
|
|
|
|
|
// We might need to create the directory. We don't care if this fails due to the directory
|
|
|
|
// already being present.
|
|
|
|
std::fs::create_dir_all(path).unwrap();
|
|
|
|
|
|
|
|
std::env::set_current_dir(path).unwrap();
|
|
|
|
EnvStack::principal().set_pwd_from_getcwd();
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn popd() {
|
|
|
|
let old_cwd = PUSHED_DIRS.lock().unwrap().pop().unwrap();
|
|
|
|
std::env::set_current_dir(old_cwd).unwrap();
|
|
|
|
EnvStack::principal().set_pwd_from_getcwd();
|
|
|
|
}
|
|
|
|
}
|