W70: Wire viewer menubar stubs — bookmarks, nav, close
Eliminate the last 6 known stubs in the viewer menubar dispatch. Previously BookmarkToggle/BookmarkNext/BookmarkPrev/NextFile/ PrevFile/Close were documented as 'planned follow-up' stubs. Now fully wired to existing keyboard handlers: - BookmarkToggle: set bookmark at current position - BookmarkNext/Prev: navigate bookmarks - NextFile/PrevFile: file navigation - Close: sets should_close flag consumed by handle_viewer_key Tests: 1427 pass, zero warnings.
This commit is contained in:
@@ -710,7 +710,7 @@ impl FileManager {
|
||||
/// viewer was closed.
|
||||
pub fn handle_viewer_key(&mut self, key: Key) -> bool {
|
||||
if let Some(v) = &mut self.viewer {
|
||||
let closed = v.handle_key(key);
|
||||
let closed = v.handle_key(key) || v.should_close;
|
||||
if closed {
|
||||
v.save_cursor_position();
|
||||
}
|
||||
|
||||
@@ -117,6 +117,8 @@ pub struct Viewer {
|
||||
pub nroff_enabled: bool,
|
||||
/// Whether to show the F1 help overlay.
|
||||
pub show_help: bool,
|
||||
/// Set by ViewerCmd::Close — the caller should close the viewer.
|
||||
pub should_close: bool,
|
||||
/// Active modal prompt at the bottom of the viewer (`None` =
|
||||
/// no prompt open). Drives the prompt's title and Enter
|
||||
/// handler.
|
||||
@@ -198,6 +200,7 @@ impl Viewer {
|
||||
hexview_in_text: false,
|
||||
nroff_enabled: false,
|
||||
show_help: false,
|
||||
should_close: false,
|
||||
prompt: None,
|
||||
prompt_input: String::new(),
|
||||
loading: size >= crate::viewer::source::INLINE_THRESHOLD,
|
||||
@@ -246,6 +249,7 @@ impl Viewer {
|
||||
hexview_in_text: false,
|
||||
nroff_enabled: false,
|
||||
show_help: false,
|
||||
should_close: false,
|
||||
prompt: None,
|
||||
prompt_input: String::new(),
|
||||
loading: size >= crate::viewer::source::INLINE_THRESHOLD,
|
||||
@@ -1250,16 +1254,32 @@ impl Viewer {
|
||||
self.prompt = Some(ViewerPrompt::GotoLine);
|
||||
self.prompt_input.clear();
|
||||
}
|
||||
ViewerCmd::BookmarkToggle
|
||||
| ViewerCmd::BookmarkNext
|
||||
| ViewerCmd::BookmarkPrev
|
||||
| ViewerCmd::NextFile
|
||||
| ViewerCmd::PrevFile
|
||||
| ViewerCmd::Close => {
|
||||
// Bookmark / file navigation / close are not yet
|
||||
// wired to menubar commands. They are still reachable
|
||||
// via their keyboard shortcuts. This is a planned
|
||||
// follow-up.
|
||||
ViewerCmd::BookmarkToggle => {
|
||||
self.marks[self.marker] = Some(self.top);
|
||||
self.marker = (self.marker + 1) % 10;
|
||||
}
|
||||
ViewerCmd::BookmarkNext => {
|
||||
self.marker = (self.marker + 1) % 10;
|
||||
if let Some(pos) = self.marks[self.marker] {
|
||||
self.top = pos;
|
||||
self.sync_cursor_to_top();
|
||||
}
|
||||
}
|
||||
ViewerCmd::BookmarkPrev => {
|
||||
let slot = self.marker.checked_sub(1).unwrap_or(9);
|
||||
if let Some(pos) = self.marks[slot] {
|
||||
self.top = pos;
|
||||
self.sync_cursor_to_top();
|
||||
}
|
||||
}
|
||||
ViewerCmd::NextFile => {
|
||||
let _ = self.open_next();
|
||||
}
|
||||
ViewerCmd::PrevFile => {
|
||||
let _ = self.open_prev();
|
||||
}
|
||||
ViewerCmd::Close => {
|
||||
self.should_close = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user