summaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-11-17 22:29:05 -0500
committerJesse Luehrs <doy@tozt.net>2021-11-17 22:29:05 -0500
commit70f48c3ef7dde34546b6d646818333505d0e4777 (patch)
treedb5d3fd7a2f4cfd168a73e03c8c8272ac375ecc1 /src/main.rs
parent96f335c58f9b9b9035a43f106f2dfddbe62777e7 (diff)
downloadnbsh-70f48c3ef7dde34546b6d646818333505d0e4777.tar.gz
nbsh-70f48c3ef7dde34546b6d646818333505d0e4777.zip
refactor
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs29
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;
}