From 026891938f7895fa5b4e45815574797eadc95b93 Mon Sep 17 00:00:00 2001 From: daa Date: Fri, 5 Jan 2018 15:56:55 +0300 Subject: [PATCH] Use async call in some cases --- Cargo.lock | 10 +++++----- Cargo.toml | 7 ++++--- src/shell.rs | 31 ++++++++++++++++++------------- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d04d7c6..0433b78 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -302,10 +302,10 @@ dependencies = [ [[package]] name = "neovim-lib" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.5.1" +source = "git+https://github.com/daa84/neovim-lib?branch=async#d3991cf0c81329baaa78dea905b9845ac1667a45" dependencies = [ - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "rmp 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", "rmpv 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "unix_socket 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -332,7 +332,7 @@ dependencies = [ "gtk-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "htmlescape 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "neovim-lib 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "neovim-lib 0.5.1 (git+https://github.com/daa84/neovim-lib?branch=async)", "pango 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "pango-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "pangocairo 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -643,7 +643,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" "checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" "checksum memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d" -"checksum neovim-lib 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1889b79fccec66b11f3f9d3a266ffd97c0944af82a62843ca2b9529fedd82fec" +"checksum neovim-lib 0.5.1 (git+https://github.com/daa84/neovim-lib?branch=async)" = "" "checksum num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "cacfcab5eb48250ee7d0c7896b51a2c5eec99c1feea5f32025635f5ae4b00070" "checksum pango 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3e81c404ab81ea7ea2fc2431a0a7672507b80e4b8bf4b41eac3fc83cc665104e" "checksum pango-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34f34a1be107fe16abb2744e0e206bee4b3b07460b5fddd3009a6aaf60bd69ab" diff --git a/Cargo.toml b/Cargo.toml index 4efcd54..91e99b3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,7 +26,7 @@ gobject-sys = "0.5" #pango-sys = { git = 'https://github.com/gtk-rs/sys' } #gio = { git = 'https://github.com/gtk-rs/gio' } #pangocairo = { git = 'https://github.com/RazrFalcon/pangocairo-rs' } -neovim-lib = "0.5" +#neovim-lib = "0.5" phf = "0.7" log = "0.4" env_logger = "0.4" @@ -37,8 +37,9 @@ serde_derive = "1.0" toml = "0.4" serde_json = "1.0" -#[dependencies.neovim-lib] -#git = "https://github.com/daa84/neovim-lib" +[dependencies.neovim-lib] +git = "https://github.com/daa84/neovim-lib" +branch = "async" [build-dependencies] phf_codegen = "0.7" diff --git a/src/shell.rs b/src/shell.rs index cb4980e..5864d16 100644 --- a/src/shell.rs +++ b/src/shell.rs @@ -15,7 +15,7 @@ use gtk; use gtk::prelude::*; use pangocairo; -use neovim_lib::{Neovim, NeovimApi, Value}; +use neovim_lib::{Neovim, NeovimApi, NeovimApiAsync, Value}; use neovim_lib::neovim_api::Tabpage; use settings::{Settings, FontSource}; @@ -112,6 +112,7 @@ impl State { /// Return NeovimRef only if vim in non blocking state /// /// Note that this call also do neovim api call get_mode + #[allow(dead_code)] pub fn nvim_non_blocked(&self) -> Option { self.nvim().and_then(NeovimRef::non_blocked) } @@ -268,10 +269,10 @@ impl State { return; } - if let Some(mut nvim) = self.nvim_non_blocked() { - if let Err(err) = nvim.ui_try_resize(columns as u64, rows as u64) { - error!("Error trying resize nvim {}", err); - } + if let Some(mut nvim) = self.nvim() { + nvim.ui_try_resize_async(columns as u64, rows as u64) + .cb(|r| r.report_err()) + .call(); } } @@ -280,10 +281,12 @@ impl State { if let Some(mut nvim) = nvim { if self.mode.is(&mode::NvimMode::Insert) || self.mode.is(&mode::NvimMode::Normal) { let paste_code = format!("normal! \"{}P", clipboard); - nvim.command(&paste_code).report_err(); + nvim.command_async(&paste_code) + .cb(|r| r.report_err()) + .call(); } else { let paste_code = format!("{}", clipboard); - nvim.input(&paste_code).report_err(); + nvim.input_async(&paste_code).cb(|r| r.report_err()).call(); }; } @@ -559,9 +562,10 @@ impl Deref for Shell { } fn gtk_focus_in(state: &mut State) -> Inhibit { - if let Some(mut nvim) = state.nvim_non_blocked() { - nvim.command("if exists('#FocusGained') | doautocmd FocusGained | endif") - .report_err(); + if let Some(mut nvim) = state.nvim() { + nvim.command_async("if exists('#FocusGained') | doautocmd FocusGained | endif") + .cb(|r| r.report_err()) + .call(); } state.im_context.focus_in(); @@ -572,9 +576,10 @@ fn gtk_focus_in(state: &mut State) -> Inhibit { } fn gtk_focus_out(state: &mut State) -> Inhibit { - if let Some(mut nvim) = state.nvim_non_blocked() { - nvim.command("if exists('#FocusLost') | doautocmd FocusLost | endif") - .report_err(); + if let Some(mut nvim) = state.nvim() { + nvim.command_async("if exists('#FocusLost') | doautocmd FocusLost | endif") + .cb(|r| r.report_err()) + .call(); } state.im_context.focus_out();