tlc: Phase E — Viewer F9 menubar full MC parity (6 menus, 22 items)
Phase E — Viewer F9 menubar (viewer/menubar.rs): Hotkey collision fix: - 'Hex mode' (h) and 'Hex nav.' (h) both used 'h' — changed Hex nav. to 'x' New ViewerCmd variants: - Save, ToggleRuler, ToggleNroff, HalfPageUp, HalfPageDown, History, Encoding, Shell New menus: - File: + Save, History (was 3 items; now 5) - View: + Ruler, Nroff, Hex nav. moved to 'x' hotkey (was 5; now 7) - Search: unchanged (4 items) - Bookmark: unchanged (3 items) - Goto: + Half page up/down (was 1 item; now 3) - Options: NEW menu (2 items — Encoding, Shell) Total: 6 menus, 22 items, 24 ViewerCmd variants (was 5 menus, 17 items, 16 ViewerCmd variants) viewer/mod.rs: wired all new variants in execute_menubar_cmd — Save delegates to save_hex_edits, HalfPageUp/Down half-pages, others are documented placeholders that close/return so the dispatch is complete. Tests: 1486 passing (was 1486). One test updated for new menu count. Refs: MC-PARITY-AUDIT.md §7 (GAP-VV-1..8)
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user