From c0ce5eff2797dd7e5652fd15594f170cd90d8ac9 Mon Sep 17 00:00:00 2001 From: Ben Morrison Date: Wed, 4 Sep 2019 13:52:44 -0400 Subject: now opens $EDITOR to write post body --- src/ed.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 1 + src/posts.rs | 6 ++---- 3 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 src/ed.rs (limited to 'src') 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 { + 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 = std::result::Result>; @@ -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 { -- cgit 1.4.1-2-gfad0