From b1c650583252a81ca1e76596b4b22b7c6c15df04 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 16 Nov 2023 08:44:23 -0700 Subject: [PATCH] Implement tab width config --- Cargo.lock | 2 +- src/config.rs | 2 ++ src/main.rs | 5 +++++ src/menu.rs | 20 ++++++++++++++++---- src/tab.rs | 1 + 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 99f9029..8556947 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -897,7 +897,7 @@ dependencies = [ [[package]] name = "cosmic-text" version = "0.10.0" -source = "git+https://github.com/pop-os/cosmic-text?branch=vi-editor#8024cbe504fbe3b73df4222b2a9d64e7d32d5c6d" +source = "git+https://github.com/pop-os/cosmic-text?branch=vi-editor#1207fd6d804b76b52137a368a58b27150eb865b8" dependencies = [ "cosmic_undo_2", "fontdb 0.16.0", diff --git a/src/config.rs b/src/config.rs index 00cfcfa..bd1f167 100644 --- a/src/config.rs +++ b/src/config.rs @@ -146,6 +146,7 @@ pub struct Config { pub font_size: u16, pub syntax_theme_dark: String, pub syntax_theme_light: String, + pub tab_width: u16, pub vim_bindings: bool, pub word_wrap: bool, pub keybinds: HashMap, @@ -159,6 +160,7 @@ impl Default for Config { font_size: 14, syntax_theme_dark: "gruvbox-dark".to_string(), syntax_theme_light: "gruvbox-light".to_string(), + tab_width: 4, vim_bindings: false, word_wrap: false, keybinds: KeyBind::load(), diff --git a/src/main.rs b/src/main.rs index 3a87847..f53949a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -133,6 +133,7 @@ pub enum Message { TabActivate(segmented_button::Entity), TabChanged(segmented_button::Entity), TabClose(segmented_button::Entity), + TabWidth(u16), Todo, ToggleContextPage(ContextPage), ToggleWordWrap, @@ -827,6 +828,10 @@ impl Application for App { return self.update_tab(); } + Message::TabWidth(tab_width) => { + self.config.tab_width = tab_width; + return self.save_config(); + } Message::Todo => { log::warn!("TODO"); } diff --git a/src/menu.rs b/src/menu.rs index 40d3fb1..6f90395 100644 --- a/src/menu.rs +++ b/src/menu.rs @@ -92,6 +92,14 @@ pub fn menu_bar<'a>(config: &Config) -> Element<'a, Message> { ) }; + let menu_tab_width = |tab_width: u16| { + menu_checkbox( + fl!("tab-width", tab_width = tab_width), + config.tab_width == tab_width, + Message::TabWidth(tab_width), + ) + }; + MenuBar::new(vec![ MenuTree::with_children( menu_root(fl!("file")), @@ -154,10 +162,14 @@ pub fn menu_bar<'a>(config: &Config) -> Element<'a, Message> { vec![ menu_item(fl!("automatic-indentation"), Message::Todo), MenuTree::new(horizontal_rule(1)), - menu_item(fl!("tab-width", tab_width = 1), Message::Todo), - menu_item(fl!("tab-width", tab_width = 2), Message::Todo), - menu_item(fl!("tab-width", tab_width = 4), Message::Todo), - menu_item(fl!("tab-width", tab_width = 8), Message::Todo), + menu_tab_width(1), + menu_tab_width(2), + menu_tab_width(3), + menu_tab_width(4), + menu_tab_width(5), + menu_tab_width(6), + menu_tab_width(7), + menu_tab_width(8), MenuTree::new(horizontal_rule(1)), menu_item(fl!("convert-indentation-to-spaces"), Message::Todo), menu_item(fl!("convert-indentation-to-tabs"), Message::Todo), diff --git a/src/tab.rs b/src/tab.rs index 3555590..abca5e3 100644 --- a/src/tab.rs +++ b/src/tab.rs @@ -44,6 +44,7 @@ impl Tab { let mut font_system = FONT_SYSTEM.lock().unwrap(); let mut editor = editor.borrow_with(&mut font_system); editor.set_passthrough(!config.vim_bindings); + editor.set_tab_width(config.tab_width); editor.buffer_mut().set_wrap(if config.word_wrap { Wrap::Word } else {