diff --git a/Cargo.lock b/Cargo.lock index 8f62dd3..eb5377f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -464,7 +464,7 @@ dependencies = [ [[package]] name = "picterm" -version = "0.0.9" +version = "0.0.10" dependencies = [ "ansi_rgb", "byte-unit", diff --git a/Cargo.toml b/Cargo.toml index 87a76d7..f436559 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "picterm" -version = "0.0.9" +version = "0.0.10" authors = ["Keisuke Toyota "] edition = "2018" repository = "https://github.com/ksk001100/picterm" diff --git a/src/app/mod.rs b/src/app/mod.rs index 6244b1a..40faad1 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -89,9 +89,7 @@ impl<'a> App<'a> { self.is_loading } - pub fn initialized(&mut self, mode: ImageMode) { - let args: Vec = std::env::args().collect(); - let path = if args[1..].is_empty() { "./" } else { &args[1] }; + pub fn initialized(&mut self, path: &str, mode: ImageMode) { self.actions = vec![ Action::Quit, Action::Increment, diff --git a/src/io/handler.rs b/src/io/handler.rs index 28db452..9b3a69f 100644 --- a/src/io/handler.rs +++ b/src/io/handler.rs @@ -22,7 +22,7 @@ impl<'a> IoAsyncHandler<'a> { pub async fn handle_io_event(&mut self, io_event: IoEvent) { let _ = match io_event { - IoEvent::Initialize(mode) => self.do_initialize(mode).await, + IoEvent::Initialize(path, mode) => self.do_initialize(&path, mode).await, IoEvent::LoadImage => self.do_load_image().await, }; @@ -30,9 +30,9 @@ impl<'a> IoAsyncHandler<'a> { app.loaded(); } - async fn do_initialize(&mut self, mode: ImageMode) -> Result<()> { + async fn do_initialize(&mut self, path: &str, mode: ImageMode) -> Result<()> { let mut app = self.app.lock().await; - app.initialized(mode); + app.initialized(path, mode); Ok(()) } diff --git a/src/io/mod.rs b/src/io/mod.rs index 174151f..64a3f80 100644 --- a/src/io/mod.rs +++ b/src/io/mod.rs @@ -4,6 +4,6 @@ use crate::image::ImageMode; #[derive(Debug, Clone)] pub enum IoEvent { - Initialize(ImageMode), + Initialize(String, ImageMode), LoadImage, } diff --git a/src/lib.rs b/src/lib.rs index 2b1313f..7fd6d02 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,7 +19,11 @@ use inputs::{events::Events, InputEvent}; use std::{io::stdout, sync::Arc, time::Duration}; use tui::{backend::CrosstermBackend, Terminal}; -pub async fn start_ui<'a>(app: &Arc>>, mode: ImageMode) -> Result<()> { +pub async fn start_ui<'a>( + app: &Arc>>, + path: String, + mode: ImageMode, +) -> Result<()> { let mut stdout = stdout(); enable_raw_mode()?; execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?; @@ -33,7 +37,7 @@ pub async fn start_ui<'a>(app: &Arc>>, mode: ImageMod { let mut app = app.lock().await; - app.dispatch(IoEvent::Initialize(mode)).await; + app.dispatch(IoEvent::Initialize(path, mode)).await; } loop { diff --git a/src/main.rs b/src/main.rs index b71de90..eaf2d4d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -57,6 +57,11 @@ fn tui_main(c: &Context) { let app = Arc::new(tokio::sync::Mutex::new(App::new(sync_io_tx.clone()))); let app_ui = Arc::clone(&app); + let path = match c.args.len() { + 1 => c.args[0].clone(), + _ => "./".to_string(), + }; + let mode = if c.bool_flag("gray") { ImageMode::GrayScale } else { @@ -70,6 +75,6 @@ fn tui_main(c: &Context) { } }); - start_ui(&app_ui, mode).await.unwrap(); + start_ui(&app_ui, path, mode).await.unwrap(); }); }