some small step to implement events listener

This commit is contained in:
daa84 2016-03-23 18:22:28 +03:00
parent b5265c41f6
commit edaa867103
3 changed files with 9 additions and 7 deletions

View File

@ -12,7 +12,10 @@ use nvim::Nvim;
fn main() { fn main() {
let ui = Ui::new(); let ui = Ui::new();
let nvim = Nvim::start(ui).expect("Can't start nvim instance");
ui.show(); ui.show();
Nvim::start(ui).expect("Can't start nvim instance");
gtk::main();
} }

View File

@ -1,6 +1,7 @@
use neovim_lib::{Neovim, NeovimApi, Session}; use neovim_lib::{Neovim, NeovimApi, Session};
use std::io::{Result, Error, ErrorKind}; use std::io::{Result, Error, ErrorKind};
use rmp::Value; use rmp::Value;
use ui::Ui;
pub struct Nvim { pub struct Nvim {
nvim: Neovim, nvim: Neovim,
@ -10,13 +11,12 @@ pub trait RedrawEvents {
} }
impl Nvim { impl Nvim {
pub fn start<F: RedrawEvents + Send + 'static> (redraw_cb: F) -> Result<Nvim> { pub fn start(mut ui: Ui) -> Result<Nvim> {
// let mut session = try!(Session::new_tcp("127.0.0.1:6666")); // let mut session = try!(Session::new_tcp("127.0.0.1:6666"));
let mut session = try!(Session::new_child()); let mut session = try!(Session::new_child());
session.start_event_loop_cb(move |m, p| Nvim::cb(&redraw_cb, m, p));
let mut nvim = Neovim::new(session); let mut nvim = Neovim::new(session);
nvim.session.start_event_loop_cb(move |m, p| Nvim::cb(&mut ui, m, p));
// fix neovim --embed bug to start embed mode // fix neovim --embed bug to start embed mode
nvim.input("i").unwrap(); nvim.input("i").unwrap();
try!(nvim.ui_attach(80, 24, true).map_err(|e| Error::new(ErrorKind::Other, e))); try!(nvim.ui_attach(80, 24, true).map_err(|e| Error::new(ErrorKind::Other, e)));
@ -24,7 +24,7 @@ impl Nvim {
Ok(Nvim { nvim: nvim }) Ok(Nvim { nvim: nvim })
} }
fn cb<F: RedrawEvents>(readraw_cb: &F, method: &str, params: Vec<Value>) { fn cb(ui: &mut Ui, method: &str, params: Vec<Value>) {
if method == "redraw" { if method == "redraw" {
for ev in params { for ev in params {
if let Value::Array(ev_args) = ev { if let Value::Array(ev_args) = ev {

View File

@ -53,7 +53,6 @@ impl Ui {
Inhibit(false) Inhibit(false)
}); });
gtk::main();
} }
fn gtk_draw(drawing_area: &DrawingArea, ctx: &cairo::Context) -> Inhibit { fn gtk_draw(drawing_area: &DrawingArea, ctx: &cairo::Context) -> Inhibit {