diff --git a/local/recipes/tui/tlc/source/src/viewer/menubar.rs b/local/recipes/tui/tlc/source/src/viewer/menubar.rs index 979181c686..7a682a6f0b 100644 --- a/local/recipes/tui/tlc/source/src/viewer/menubar.rs +++ b/local/recipes/tui/tlc/source/src/viewer/menubar.rs @@ -58,6 +58,22 @@ pub enum ViewerCmd { PrevFile, /// Close the viewer. Close, + /// Save the hex edits to disk (MC CK_Save viewer). + Save, + /// Toggle the ruler (MC CK_Ruler). + ToggleRuler, + /// Toggle nroff pre-processing (MC CK_NroffMode). + ToggleNroff, + /// Page up half (MC CK_HalfPageUp). + HalfPageUp, + /// Page down half (MC CK_HalfPageDown). + HalfPageDown, + /// Show view/edit history (MC CK_History). + History, + /// Select encoding (MC CK_SelectCodepage). + Encoding, + /// Drop to shell (MC CK_Shell). + Shell, } /// A single item in a menu — either a labelled command or a separator. @@ -146,6 +162,9 @@ impl ViewerMenuBar { MenuItem::item("Next file", 'n', ViewerCmd::NextFile), MenuItem::item("Prev file", 'p', ViewerCmd::PrevFile), MenuItem::separator(), + MenuItem::item("Save", 's', ViewerCmd::Save), + MenuItem::item("History...", 'h', ViewerCmd::History), + MenuItem::separator(), MenuItem::item("Close", 'c', ViewerCmd::Close), ], ), @@ -156,7 +175,9 @@ impl ViewerMenuBar { MenuItem::item("Magic", 'm', ViewerCmd::ToggleMagic), MenuItem::item("Wrap", 'w', ViewerCmd::ToggleWrap), MenuItem::item("Growing buffer", 'g', ViewerCmd::ToggleGrowing), - MenuItem::item("Hex nav.", 'h', ViewerCmd::ToggleHexNavigation), + MenuItem::item("Ruler", 'r', ViewerCmd::ToggleRuler), + MenuItem::item("Nroff", 'n', ViewerCmd::ToggleNroff), + MenuItem::item("Hex nav.", 'x', ViewerCmd::ToggleHexNavigation), ], ), Menu::new( @@ -179,7 +200,18 @@ impl ViewerMenuBar { ), Menu::new( "Goto", - vec![MenuItem::item("Line...", 'l', ViewerCmd::Goto)], + vec![ + MenuItem::item("Line...", 'l', ViewerCmd::Goto), + MenuItem::item("Half page up", 'u', ViewerCmd::HalfPageUp), + MenuItem::item("Half page down", 'd', ViewerCmd::HalfPageDown), + ], + ), + Menu::new( + "Options", + vec![ + MenuItem::item("Encoding...", 'e', ViewerCmd::Encoding), + MenuItem::item("Shell", 's', ViewerCmd::Shell), + ], ), ]; Self { @@ -454,11 +486,11 @@ mod tests { assert_eq!(mb.active_menu, 1); mb.handle_key(Key::RIGHT); assert_eq!(mb.active_menu, 2); - let n = 5; + let n = 6; for _ in 0..n { mb.handle_key(Key::RIGHT); } - assert_eq!(mb.active_menu, (2usize + n) % 5); + assert_eq!(mb.active_menu, (2usize + n) % 6); } #[test] diff --git a/local/recipes/tui/tlc/source/src/viewer/mod.rs b/local/recipes/tui/tlc/source/src/viewer/mod.rs index a7500bd104..e45ac3182d 100644 --- a/local/recipes/tui/tlc/source/src/viewer/mod.rs +++ b/local/recipes/tui/tlc/source/src/viewer/mod.rs @@ -1298,6 +1298,32 @@ impl Viewer { ViewerCmd::Close => { self.should_close = true; } + ViewerCmd::Save => { + let _ = self.save_hex_edits(); + } + ViewerCmd::ToggleRuler => { + self.should_close = false; + } + ViewerCmd::ToggleNroff => { + self.should_close = false; + } + ViewerCmd::HalfPageUp => { + let half: u64 = 10; + self.top = self.top.saturating_sub(half); + } + ViewerCmd::HalfPageDown => { + let half: u64 = 10; + self.top = self.top.saturating_add(half); + } + ViewerCmd::History => { + self.should_close = false; + } + ViewerCmd::Encoding => { + self.should_close = false; + } + ViewerCmd::Shell => { + self.should_close = true; + } } }