diff options
author | Ben Morrison <ben@gbmor.dev> | 2019-09-04 13:52:44 -0400 |
---|---|---|
committer | Ben Morrison <ben@gbmor.dev> | 2019-09-04 13:52:44 -0400 |
commit | c0ce5eff2797dd7e5652fd15594f170cd90d8ac9 (patch) | |
tree | 9996f3db059672a704f9b9942c4e67d7867bbb30 /src | |
parent | 8e3e31ee2b6721ed4ccb958fefec1431372e39ba (diff) | |
download | clinte-c0ce5eff2797dd7e5652fd15594f170cd90d8ac9.tar.gz |
now opens $EDITOR to write post body
Diffstat (limited to 'src')
-rw-r--r-- | src/ed.rs | 51 | ||||
-rw-r--r-- | src/main.rs | 1 | ||||
-rw-r--r-- | src/posts.rs | 6 |
3 files changed, 54 insertions, 4 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)) +} diff --git a/src/main.rs b/src/main.rs index fcb7535..35df02f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,7 @@ use log::info; mod db; mod ed; +mod error; mod logging; mod posts; mod user; diff --git a/src/posts.rs b/src/posts.rs index 27327ff..cb546ef 100644 --- a/src/posts.rs +++ b/src/posts.rs @@ -4,6 +4,7 @@ use std::io; use rusqlite; use crate::db; +use crate::ed; use crate::user; type Result<T> = std::result::Result<T, Box<dyn Error>>; @@ -50,10 +51,7 @@ pub fn create(db: &db::Conn) { }; println!(); - println!("Body of the new post: "); - let mut body = String::new(); - io::stdin().read_line(&mut body).unwrap(); - let body = str_to_utf8(body.trim()); + let body = str_to_utf8(&ed::call()); let body = if body.len() > 500 { &body[..500] } else { |