From eb5b428fa434cab48e35a99f29527a4efed70904 Mon Sep 17 00:00:00 2001 From: vasilito Date: Tue, 7 Jul 2026 13:05:28 +0300 Subject: [PATCH] W54: ToggleOverwrite editor F9 command (MC CK_InsertOverwrite) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add ToggleOverwrite EditorCmd variant, wire it into the Options menu, and add a dispatch handler that toggles the overwrite flag and shows [OVR]/[INS] in the status message (mirrors the existing INS key behavior now accessible from the F9 menu). Added 1 unit test verifying [OVR]→[INS] cycle. Tests: 1416 pass (was 1415), zero warnings. --- .../tui/tlc/source/src/editor/menubar.rs | 4 ++++ .../recipes/tui/tlc/source/src/editor/mod.rs | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/local/recipes/tui/tlc/source/src/editor/menubar.rs b/local/recipes/tui/tlc/source/src/editor/menubar.rs index bd6b6744a2..db491f10b9 100644 --- a/local/recipes/tui/tlc/source/src/editor/menubar.rs +++ b/local/recipes/tui/tlc/source/src/editor/menubar.rs @@ -89,6 +89,8 @@ pub enum EditorCmd { BlockSave, /// Close the current buffer (keep editor open). Close, + /// Toggle insert/overwrite mode (INS key, MC CK_InsertOverwrite). + ToggleOverwrite, } /// Outcome of a menu-bar key press. @@ -261,6 +263,8 @@ impl EditorMenuBar { MenuItem::item("Word wrap", 'p', EditorCmd::ToggleWordWrap), MenuItem::item("Syntax highlight", 'h', EditorCmd::ToggleSyntax), MenuItem::item("Relative line numbers", 'r', EditorCmd::ToggleRelativeLines), + MenuItem::separator(), + MenuItem::item("Insert/Overwrite", 'i', EditorCmd::ToggleOverwrite), ], ), ]; diff --git a/local/recipes/tui/tlc/source/src/editor/mod.rs b/local/recipes/tui/tlc/source/src/editor/mod.rs index 126e2136d3..84d22015d2 100644 --- a/local/recipes/tui/tlc/source/src/editor/mod.rs +++ b/local/recipes/tui/tlc/source/src/editor/mod.rs @@ -1545,6 +1545,14 @@ impl Editor { self.message = Some("No selection".to_string()); } } + EditorCmd::ToggleOverwrite => { + self.overwrite = !self.overwrite; + self.message = Some(if self.overwrite { + "[OVR]".to_string() + } else { + "[INS]".to_string() + }); + } EditorCmd::Close => { if self.modified { self.mode = Mode::Prompt(PromptKind::SaveBeforeClose); @@ -3913,5 +3921,17 @@ mod tests { let _ = e.dispatch_editor_cmd(crate::editor::menubar::EditorCmd::InsertFile); assert!(e.mode.is_prompt()); } + + #[test] + fn toggle_overwrite_cycles_ovr_ins() { + let mut e = make_empty(); + // Default is Insert mode (not overwrite). + // Toggle once → overwrite on. + let _ = e.dispatch_editor_cmd(crate::editor::menubar::EditorCmd::ToggleOverwrite); + assert_eq!(e.message, Some("[OVR]".to_string())); + // Toggle again → overwrite off. + let _ = e.dispatch_editor_cmd(crate::editor::menubar::EditorCmd::ToggleOverwrite); + assert_eq!(e.message, Some("[INS]".to_string())); + } }