diff options
author | Jesse Luehrs <doy@tozt.net> | 2021-11-17 22:29:05 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2021-11-17 22:29:05 -0500 |
commit | 70f48c3ef7dde34546b6d646818333505d0e4777 (patch) | |
tree | db5d3fd7a2f4cfd168a73e03c8c8272ac375ecc1 /src/main.rs | |
parent | 96f335c58f9b9b9035a43f106f2dfddbe62777e7 (diff) | |
download | nbsh-70f48c3ef7dde34546b6d646818333505d0e4777.tar.gz nbsh-70f48c3ef7dde34546b6d646818333505d0e4777.zip |
refactor
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/src/main.rs b/src/main.rs index ba8fa8a..73a05ee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,6 +14,19 @@ mod util; use async_std::stream::StreamExt as _; +async fn resize( + action_w: &async_std::channel::Sender<crate::action::Action>, +) { + let size = terminal_size::terminal_size().map_or( + (24, 80), + |(terminal_size::Width(w), terminal_size::Height(h))| (h, w), + ); + action_w + .send(crate::action::Action::Resize(size)) + .await + .unwrap(); +} + async fn async_main() -> anyhow::Result<()> { let mut input = textmode::Input::new().await?; let mut output = textmode::Output::new().await?; @@ -25,30 +38,34 @@ async fn async_main() -> anyhow::Result<()> { let (action_w, action_r) = async_std::channel::unbounded(); - let mut state = state::State::new(action_w); + let state = state::State::new(); state.render(&mut output, true).await.unwrap(); let state = util::mutex(state); { - let state = async_std::sync::Arc::clone(&state); let mut signals = signal_hook_async_std::Signals::new(&[ signal_hook::consts::signal::SIGWINCH, ])?; + let action_w = action_w.clone(); async_std::task::spawn(async move { while signals.next().await.is_some() { - state.lock_arc().await.resize().await; + resize(&action_w).await; } }); } - state.lock_arc().await.resize().await; + resize(&action_w).await; { let state = async_std::sync::Arc::clone(&state); + let action_w = action_w.clone(); async_std::task::spawn(async move { while let Some(key) = input.read_key().await.unwrap() { - state.lock_arc().await.handle_input(key).await; + let action = state.lock_arc().await.handle_key(key).await; + if let Some(action) = action { + action_w.send(action).await.unwrap(); + } } }); } @@ -58,7 +75,7 @@ async fn async_main() -> anyhow::Result<()> { state .lock_arc() .await - .handle_action(action, &mut output) + .handle_action(action, &mut output, &action_w) .await; } |