diff --git a/src/input.rs b/src/input.rs index 6d4d3ab9..ffa19fa8 100644 --- a/src/input.rs +++ b/src/input.rs @@ -23,6 +23,8 @@ //! APIs //! //! TODO handling xmodmap would be good +use std::io::Write; + use glutin::{ElementState, VirtualKeyCode}; use term::mode::{self, TermMode}; @@ -108,6 +110,15 @@ pub trait Notify { fn notify(&mut self, &str); } +/// A notifier type that simply writes bytes to the provided `Write` type +pub struct WriteNotifier<'a, W: Write + 'a>(pub &'a mut W); + +impl<'a, W: Write> Notify for WriteNotifier<'a, W> { + fn notify(&mut self, message: &str) { + self.0.write(message.as_bytes()).unwrap(); + } +} + /// Describes a key combination that should emit a control sequence /// /// The actual triggering key is omitted here since bindings are grouped by the trigger key. diff --git a/src/main.rs b/src/main.rs index 7bf4d7d3..aae02322 100644 --- a/src/main.rs +++ b/src/main.rs @@ -69,14 +69,6 @@ enum ShouldExit { Yes, No } - -struct WriteNotifier<'a, W: Write + 'a>(&'a mut W); -impl<'a, W: Write> input::Notify for WriteNotifier<'a, W> { - fn notify(&mut self, message: &str) { - self.0.write(message.as_bytes()).unwrap(); - } -} - /// Channel used by resize handling on mac static mut resize_sender: Option> = None; @@ -108,7 +100,7 @@ fn handle_event(event: glutin::Event, render_tx.send((w, h)).expect("render thread active"); }, glutin::Event::KeyboardInput(state, _code, key) => { - input_processor.process(state, key, &mut WriteNotifier(writer), *terminal.mode()) + input_processor.process(state, key, &mut input::WriteNotifier(writer), *terminal.mode()) }, _ => () }