From de43a4e5b78d2d2cdade8957a63fe30505cbbde0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20L=C3=BCbbemeier?= Date: Wed, 21 Mar 2018 18:01:17 +0100 Subject: [PATCH 1/8] Fix inconsistent ordering in the file tree --- src/file_browser.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/file_browser.rs b/src/file_browser.rs index 9865296..ad59d81 100644 --- a/src/file_browser.rs +++ b/src/file_browser.rs @@ -337,8 +337,11 @@ impl FileBrowserWidget { fn cmp_dirs_first(lhs: &DirEntry, rhs: &DirEntry) -> io::Result { let lhs_metadata = fs::metadata(lhs.path())?; let rhs_metadata = fs::metadata(rhs.path())?; - if lhs_metadata.file_type() == rhs_metadata.file_type() { - Ok(lhs.path().cmp(&rhs.path())) + if lhs_metadata.is_dir() == rhs_metadata.is_dir() { + Ok(lhs.path() + .to_string_lossy() + .to_lowercase() + .cmp(&rhs.path().to_string_lossy().to_lowercase())) } else { if lhs_metadata.is_dir() { Ok(Ordering::Less) From 65c266291568c9320b0b15e1ec24397b1a0d57be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20L=C3=BCbbemeier?= Date: Sat, 24 Mar 2018 13:53:54 +0100 Subject: [PATCH 2/8] Fix bug where rapid `cd`s cause infinite loop --- src/file_browser.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/file_browser.rs b/src/file_browser.rs index ad59d81..2d01070 100644 --- a/src/file_browser.rs +++ b/src/file_browser.rs @@ -201,11 +201,10 @@ impl FileBrowserWidget { &["getcwd()"], clone!(store, state_ref, dir_list_model, dir_list => move |args| { let dir = args.into_iter().next().unwrap(); - let mut state = state_ref.borrow_mut(); - if dir != *state.current_dir { + if dir != state_ref.borrow().current_dir { + state_ref.borrow_mut().current_dir = dir.to_owned(); update_dir_list(&dir, &dir_list_model, &dir_list); - state.current_dir = dir; - tree_reload(&store, &state); + tree_reload(&store, &state_ref.borrow()); } }), ); @@ -277,18 +276,18 @@ impl FileBrowserWidget { // Connect directory list. let nvim_ref = self.nvim.as_ref().unwrap(); - self.comps.dir_list.connect_changed(clone!(nvim_ref => move |dir_list| { + self.comps.dir_list.connect_changed(clone!(nvim_ref, state_ref => move |dir_list| { if let Some(iter) = dir_list.get_active_iter() { let model = dir_list.get_model().unwrap(); if let Some(dir) = model.get_value(&iter, 2).get::<&str>() { - let mut nvim = nvim_ref.nvim().unwrap(); - nvim.set_current_dir(dir).report_err(); + if dir != state_ref.borrow().current_dir { + let mut nvim = nvim_ref.nvim().unwrap(); + nvim.set_current_dir(dir).report_err(); + } } } })); - let store = &self.store; - let state_ref = &self.state; let context_menu = &self.comps.context_menu; let cd_action = &self.comps.cd_action; self.tree.connect_button_press_event( From 18583abae7078519d51167fe36de0ee3927ae8c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20L=C3=BCbbemeier?= Date: Sat, 24 Mar 2018 13:59:19 +0100 Subject: [PATCH 3/8] Use set_current_dir_async --- src/file_browser.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/file_browser.rs b/src/file_browser.rs index 2d01070..cab0fc1 100644 --- a/src/file_browser.rs +++ b/src/file_browser.rs @@ -180,7 +180,9 @@ impl FileBrowserWidget { cd_action.connect_activate(clone!(state_ref, nvim_ref => move |_, _| { let mut nvim = nvim_ref.nvim().unwrap(); if let Some(ref path) = state_ref.borrow().selected_path { - nvim.set_current_dir(&path).report_err(); + nvim.set_current_dir_async(&path) + .cb(|r| r.report_err()) + .call(); } })); actions.add_action(cd_action); @@ -282,7 +284,9 @@ impl FileBrowserWidget { if let Some(dir) = model.get_value(&iter, 2).get::<&str>() { if dir != state_ref.borrow().current_dir { let mut nvim = nvim_ref.nvim().unwrap(); - nvim.set_current_dir(dir).report_err(); + nvim.set_current_dir_async(dir) + .cb(|r| r.report_err()) + .call(); } } } From a853083de210c87bb8d7824596760bd649aa2e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20L=C3=BCbbemeier?= Date: Mon, 26 Feb 2018 13:29:36 +0100 Subject: [PATCH 4/8] Single click activation on projects popover Plus some padding and font size changes --- src/project.rs | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/project.rs b/src/project.rs index 6423fa8..a442e11 100644 --- a/src/project.rs +++ b/src/project.rs @@ -73,6 +73,9 @@ impl Projects { projects.setup_tree(); + projects.tree.set_activate_on_single_click(true); + projects.tree.set_hover_selection(true); + projects.tree.set_grid_lines(gtk::TreeViewGridLines::Horizontal); let vbox = gtk::Box::new(Orientation::Vertical, 5); vbox.set_border_width(5); @@ -89,11 +92,12 @@ impl Projects { ); projects.scroll.add(&projects.tree); + projects.scroll.set_shadow_type(gtk::ShadowType::In); vbox.pack_start(&projects.scroll, true, true, 0); let open_btn = gtk::Button::new_with_label("Other Documents…"); - vbox.pack_start(&open_btn, true, true, 0); + vbox.pack_start(&open_btn, true, true, 5); vbox.show_all(); projects.popup.add(&vbox); @@ -129,7 +133,12 @@ impl Projects { let prj_ref = projects.clone(); projects.borrow().tree.connect_row_activated( - move |tree, _, _| { + move |tree, _, column| { + // Don't activate if the user clicked the checkbox. + let toggle_column = tree.get_column(2).unwrap(); + if *column == toggle_column { + return; + } let selection = tree.get_selection(); if let Some((model, iter)) = selection.get_selected() { prj_ref.borrow().open_uri(&model, &iter); @@ -281,6 +290,7 @@ impl Projects { let image_column = TreeViewColumn::new(); let icon_renderer = CellRendererPixbuf::new(); + icon_renderer.set_padding(5, 0); image_column.pack_start(&icon_renderer, true); image_column.add_attribute( @@ -293,18 +303,23 @@ impl Projects { let text_column = TreeViewColumn::new(); - self.name_renderer.set_property_width_chars(60); - self.path_renderer.set_property_width_chars(60); + self.name_renderer.set_property_width_chars(45); + self.path_renderer.set_property_width_chars(45); + self.name_renderer.set_property_ellipsize( + pango::EllipsizeMode::Middle, + ); self.path_renderer.set_property_ellipsize( pango::EllipsizeMode::Start, ); + self.name_renderer.set_padding(0, 5); + self.path_renderer.set_padding(0, 5); text_column.pack_start(&self.name_renderer, true); text_column.pack_start(&self.path_renderer, true); text_column.add_attribute( &self.name_renderer, - "markup", + "text", ProjectViewColumns::Name as i32, ); text_column.add_attribute( @@ -492,7 +507,7 @@ impl Entry { format!("{}", encode_minimal(&s.to_string_lossy())) }) .unwrap_or_else(|| "".to_owned()), - file_name: format!("{}", encode_minimal(name)), + file_name: encode_minimal(name), name: name.to_owned(), pixbuf: BOOKMARKED_PIXBUF, project: true, @@ -513,7 +528,7 @@ impl Entry { format!("{}", encode_minimal(&s.to_string_lossy())) }) .unwrap_or_else(|| "".to_owned()), - file_name: format!("{}", encode_minimal(&name)), + file_name: encode_minimal(&name), name, pixbuf: CURRENT_DIR_PIXBUF, project: true, @@ -534,7 +549,7 @@ impl Entry { format!("{}", encode_minimal(&s.to_string_lossy())) }) .unwrap_or_else(|| "".to_owned()), - file_name: format!("{}", encode_minimal(&name)), + file_name: encode_minimal(&name), name, pixbuf: PLAIN_FILE_PIXBUF, project: false, From 5b6afc6804148895275aa60ca690395c7a57f624 Mon Sep 17 00:00:00 2001 From: daa84 Date: Mon, 26 Mar 2018 11:24:36 +0300 Subject: [PATCH 5/8] Fix #81 --- src/main.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main.rs b/src/main.rs index c269fbc..f53a39b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,5 @@ +#![windows_subsystem = "windows"] + extern crate cairo; extern crate env_logger; extern crate gdk; From a1f122d19c09d6a783a5886cf42d7c95e9b5d8c0 Mon Sep 17 00:00:00 2001 From: daa84 Date: Tue, 27 Mar 2018 17:47:42 +0300 Subject: [PATCH 6/8] Hide nvim.exe window (fix #81) --- src/nvim/mod.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/nvim/mod.rs b/src/nvim/mod.rs index 01100a8..a30cb81 100644 --- a/src/nvim/mod.rs +++ b/src/nvim/mod.rs @@ -100,6 +100,11 @@ pub fn start( .arg("let g:GtkGuiLoaded = 1") .stderr(Stdio::inherit()); + if cfg!(windows) { + use std::os::windows::process::CommandExt; + cmd.creation_flags(0x08000000); // CREATE_NO_WINDOW + } + if let Ok(runtime_path) = env::var("NVIM_GTK_RUNTIME_PATH") { cmd.arg("--cmd").arg( format!("let &rtp.=',{}'", runtime_path), From 53958171c21a378234d6587a13964230cd58e742 Mon Sep 17 00:00:00 2001 From: daa Date: Fri, 30 Mar 2018 00:13:39 +0300 Subject: [PATCH 7/8] Fix non-windows builds #83 --- src/nvim/mod.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/nvim/mod.rs b/src/nvim/mod.rs index a30cb81..8374895 100644 --- a/src/nvim/mod.rs +++ b/src/nvim/mod.rs @@ -79,6 +79,13 @@ impl error::Error for NvimInitError { } } +#[cfg(target_os = "windows")] +fn set_windows_creation_flags() { + use std::os::windows::process::CommandExt; + cmd.creation_flags(0x08000000); // CREATE_NO_WINDOW +} + + pub fn start( shell: Arc>, nvim_bin_path: Option<&String>, @@ -100,10 +107,8 @@ pub fn start( .arg("let g:GtkGuiLoaded = 1") .stderr(Stdio::inherit()); - if cfg!(windows) { - use std::os::windows::process::CommandExt; - cmd.creation_flags(0x08000000); // CREATE_NO_WINDOW - } + #[cfg(target_os = "windows")] + set_windows_creation_flags(); if let Ok(runtime_path) = env::var("NVIM_GTK_RUNTIME_PATH") { cmd.arg("--cmd").arg( From 5b706f01b5ee2b938497044434cffc875169c79d Mon Sep 17 00:00:00 2001 From: daa Date: Fri, 30 Mar 2018 00:23:25 +0300 Subject: [PATCH 8/8] Fix windows build --- src/nvim/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nvim/mod.rs b/src/nvim/mod.rs index 8374895..76b350d 100644 --- a/src/nvim/mod.rs +++ b/src/nvim/mod.rs @@ -80,7 +80,7 @@ impl error::Error for NvimInitError { } #[cfg(target_os = "windows")] -fn set_windows_creation_flags() { +fn set_windows_creation_flags(cmd: &mut Command) { use std::os::windows::process::CommandExt; cmd.creation_flags(0x08000000); // CREATE_NO_WINDOW } @@ -108,7 +108,7 @@ pub fn start( .stderr(Stdio::inherit()); #[cfg(target_os = "windows")] - set_windows_creation_flags(); + set_windows_creation_flags(&mut cmd); if let Ok(runtime_path) = env::var("NVIM_GTK_RUNTIME_PATH") { cmd.arg("--cmd").arg(