diff options
Diffstat (limited to 'src/ed.rs')
-rw-r--r-- | src/ed.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/ed.rs b/src/ed.rs new file mode 100644 index 0000000..17b73fa --- /dev/null +++ b/src/ed.rs @@ -0,0 +1,51 @@ +use std::env; +use std::fs; +use std::process; + +use chrono::prelude::*; +use log; + +use crate::error; +use crate::user; + +lazy_static! { + static ref VAR: String = match env::var("EDITOR") { + Ok(ed) => { + if &ed == "" { + "nano".into() + } else { + ed + } + } + Err(err) => { + log::warn!("{:?}", err); + "nano".into() + } + }; +} + +fn create_tmp_file<'a>() -> Result<String, &'a str> { + let the_time = Utc::now().to_rfc2822(); + let file_name = format!("/tmp/clinte_ed_{}_{}", *user::NAME, the_time); + match fs::write(&file_name, "") { + Ok(_) => Ok(file_name), + Err(err) => { + log::warn!("{:?}", err); + Err("Unable to create temp file") + } + } +} + +pub fn call() -> String { + let tmp_loc = error::helper(create_tmp_file()); + + error::helper( + process::Command::new(VAR.clone()) + .arg(tmp_loc.clone()) + .stdin(process::Stdio::inherit()) + .stdout(process::Stdio::inherit()) + .output(), + ); + + error::helper(fs::read_to_string(tmp_loc)) +} |