From 3fc2c3322d6fc6617f6351debc176f24d7300da3 Mon Sep 17 00:00:00 2001 From: daa Date: Wed, 23 Mar 2016 14:59:18 +0300 Subject: [PATCH] Add events callback --- Cargo.lock | 3 ++- src/main.rs | 5 +++-- src/nvim.rs | 23 +++++++++++------------ src/ui.rs | 5 +++++ 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d5c44c0..385cee3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,7 +5,7 @@ dependencies = [ "cairo-rs 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)", "glib 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)", "gtk 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "neovim-lib 0.1.0", + "neovim-lib 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "rmp 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -195,6 +195,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "neovim-lib" version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rmp 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "rmp-serialize 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/src/main.rs b/src/main.rs index 1b17022..9013f45 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,7 +11,8 @@ use ui::Ui; use nvim::Nvim; fn main() { - let nvim = Nvim::start().expect("Can't start nvim instance"); - Ui::new().show(); + let ui = Ui::new(); + let nvim = Nvim::start(ui).expect("Can't start nvim instance"); + ui.show(); } diff --git a/src/nvim.rs b/src/nvim.rs index 016b4ed..d2f7018 100644 --- a/src/nvim.rs +++ b/src/nvim.rs @@ -3,38 +3,37 @@ use std::io::{Result, Error, ErrorKind}; use rmp::Value; pub struct Nvim { - nvim: Neovim + nvim: Neovim, +} + +pub trait RedrawEvents { } impl Nvim { - pub fn start() -> Result { - //let mut session = try!(Session::new_tcp("127.0.0.1:6666")); + pub fn start (redraw_cb: F) -> Result { + // let mut session = try!(Session::new_tcp("127.0.0.1:6666")); let mut session = try!(Session::new_child()); - session.start_event_loop_cb(Nvim::cb); + session.start_event_loop_cb(move |m, p| Nvim::cb(&redraw_cb, m, p)); let mut nvim = Neovim::new(session); // fix neovim --embed bug to start embed mode nvim.input("i").unwrap(); try!(nvim.ui_attach(80, 24, true).map_err(|e| Error::new(ErrorKind::Other, e))); - Ok(Nvim { - nvim: nvim, - }) + Ok(Nvim { nvim: nvim }) } - fn cb(method: &str, params: Vec) { + fn cb(readraw_cb: &F, method: &str, params: Vec) { if method == "redraw" { for ev in params { if let Value::Array(ev_args) = ev { if let Value::String(ref ev_name) = ev_args[0] { println!("Event {}", ev_name); - } - else { + } else { println!("Unsupported event {:?}", ev_args); } - } - else { + } else { println!("Unsupported event type {:?}", ev); } } diff --git a/src/ui.rs b/src/ui.rs index ceb0e49..997b4cb 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -4,6 +4,7 @@ use gtk::prelude::*; use gtk::{Window, WindowType, DrawingArea, Grid, Button, ButtonBox, Orientation}; use ui_model::UiModel; +use nvim::RedrawEvents; pub struct Ui { model: UiModel, @@ -53,3 +54,7 @@ impl Ui { Inhibit(true) } } + +impl RedrawEvents for Ui { +} +