diff --git a/local/recipes/tui/tlc/source/src/editor/menubar.rs b/local/recipes/tui/tlc/source/src/editor/menubar.rs index 82a67d2bf7..f7d84b76d2 100644 --- a/local/recipes/tui/tlc/source/src/editor/menubar.rs +++ b/local/recipes/tui/tlc/source/src/editor/menubar.rs @@ -67,6 +67,16 @@ pub enum EditorCmd { GotoBottom, /// Open settings dialog. Settings, + /// Toggle auto-indent (Alt-A). + ToggleAutoIndent, + /// Toggle visible whitespace (Alt-E). + ToggleShowWhitespace, + /// Toggle word wrap (Alt-W). + ToggleWordWrap, + /// Toggle syntax highlighting (Ctrl-S). + ToggleSyntax, + /// Toggle relative line numbers (Alt-N). + ToggleRelativeLines, } /// Outcome of a menu-bar key press. @@ -217,7 +227,15 @@ impl EditorMenuBar { ), Menu::new( "Options", - vec![MenuItem::item("Settings...", 's', EditorCmd::Settings)], + vec![ + MenuItem::item("Settings...", 's', EditorCmd::Settings), + MenuItem::separator(), + MenuItem::item("Auto-indent", 'a', EditorCmd::ToggleAutoIndent), + MenuItem::item("Show whitespace", 'w', EditorCmd::ToggleShowWhitespace), + MenuItem::item("Word wrap", 'p', EditorCmd::ToggleWordWrap), + MenuItem::item("Syntax highlight", 'h', EditorCmd::ToggleSyntax), + MenuItem::item("Relative line numbers", 'r', EditorCmd::ToggleRelativeLines), + ], ), ]; Self { diff --git a/local/recipes/tui/tlc/source/src/editor/mod.rs b/local/recipes/tui/tlc/source/src/editor/mod.rs index c75f00329b..9bc1843749 100644 --- a/local/recipes/tui/tlc/source/src/editor/mod.rs +++ b/local/recipes/tui/tlc/source/src/editor/mod.rs @@ -952,9 +952,51 @@ bracket_flash: None, self.prompt_input.clear(); self.mode = Mode::Prompt(PromptKind::GotoLine); } + EditorCmd::ToggleAutoIndent => { + let on = self.toggle_auto_indent(); + self.message = Some(if on { + "Auto-indent: ON".to_string() + } else { + "Auto-indent: OFF".to_string() + }); + } + EditorCmd::ToggleShowWhitespace => { + let on = self.toggle_show_whitespace(); + self.message = Some(if on { + "Show whitespace: ON".to_string() + } else { + "Show whitespace: OFF".to_string() + }); + } + EditorCmd::ToggleWordWrap => { + let on = self.toggle_word_wrap(); + self.message = Some(if on { + "Word wrap: ON".to_string() + } else { + "Word wrap: OFF".to_string() + }); + } + EditorCmd::ToggleSyntax => { + self.syntax_enabled = !self.syntax_enabled; + self.message = Some(if self.syntax_enabled { + "Syntax: ON".to_string() + } else { + "Syntax: OFF".to_string() + }); + } + EditorCmd::ToggleRelativeLines => { + self.relative_lines = !self.relative_lines; + self.message = Some(if self.relative_lines { + "Relative line numbers: ON".to_string() + } else { + "Relative line numbers: OFF".to_string() + }); + } + EditorCmd::Settings => { + self.message = Some("Settings dialog (TBD)".to_string()); + } // Items not yet wired: New, Open, Save, SaveAs, Quit, - // Find, FindNext, FindPrev, Replace, BookmarkNext/Prev, - // GotoTop/Bottom, Settings. + // Find, FindNext, FindPrev, Replace, BookmarkNext/Prev. _ => { self.message = Some(format!("F9: {:?} (not yet wired)", cmd)); }