diff options
author | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2019-09-09 12:53:39 +0300 |
---|---|---|
committer | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2019-09-15 13:21:14 +0300 |
commit | 81a55abc7c106ce3dfbef8ab98b7532a722edb00 (patch) | |
tree | 320182d76bcd3da0407b8cc3c8809f606e5dfbe4 /src | |
parent | ecb3fd7f3d5bab2a6f0f7592d2f45928d90fdf56 (diff) |
Update crossbeam to 0.7.2 and remove chan
Diffstat (limited to 'src')
-rw-r--r-- | src/bin.rs | 53 |
1 files changed, 35 insertions, 18 deletions
@@ -39,15 +39,23 @@ use ui; pub use melib::*; pub use ui::*; -#[macro_use] -extern crate chan; -use chan_signal; - -use chan_signal::Signal; - use nix; +use std::os::raw::c_int; use xdg; +fn notify( + signals: &[c_int], +) -> std::result::Result<crossbeam::channel::Receiver<c_int>, std::io::Error> { + let (s, r) = crossbeam::channel::bounded(100); + let signals = signal_hook::iterator::Signals::new(signals)?; + std::thread::spawn(move || { + for signal in signals.forever() { + s.send(signal).unwrap(); + } + }); + Ok(r) +} + macro_rules! error_and_exit { ($($err:expr),*) => {{ eprintln!($($err),*); @@ -63,7 +71,7 @@ struct CommandLineArguments { version: bool, } -fn main() { +fn main() -> std::result::Result<(), std::io::Error> { enum CommandLineFlags { CreateConfig, Config, @@ -168,7 +176,12 @@ fn main() { } /* Catch SIGWINCH to handle terminal resizing */ - let signal = chan_signal::notify(&[Signal::WINCH]); + let signals = &[ + /* Catch SIGWINCH to handle terminal resizing */ + signal_hook::SIGWINCH, + ]; + + let signal_recvr = notify(signals)?; /* Create the application State. This is the 'System' part of an ECS architecture */ let mut state = State::new(); @@ -206,8 +219,8 @@ fn main() { state.redraw(); /* Poll on all channels. Currently we have the input channel for stdin, watching events and the signal watcher. */ - chan_select! { - receiver.recv() -> r => { + crossbeam::select! { + recv(receiver) -> r => { match debug!(r.unwrap()) { ThreadEvent::Input(Key::Ctrl('z')) => { state.switch_to_main_screen(); @@ -290,16 +303,19 @@ fn main() { }, } }, - signal.recv() -> signal => { - if state.mode != UIMode::Fork { - if let Some(Signal::WINCH) = signal { - state.update_size(); - state.render(); - state.redraw(); - } + recv(signal_recvr) -> sig => { + match sig.unwrap() { + signal_hook::SIGWINCH => { + if state.mode != UIMode::Fork { + state.update_size(); + state.render(); + state.redraw(); + } + }, + _ => {} } }, - worker_receiver.recv() -> _ => { + recv(worker_receiver) -> _ => { /* Some worker thread finished their job, acknowledge * it and move on*/ }, @@ -327,4 +343,5 @@ fn main() { } } } + Ok(()) } |