mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
60 lines
1.3 KiB
Rust
60 lines
1.3 KiB
Rust
use ratatui_core::layout::Rect;
|
|
use yazi_binding::position::{Origin, Position};
|
|
use yazi_shared::url::UrlBuf;
|
|
use yazi_term::TERM;
|
|
use yazi_watcher::Watcher;
|
|
|
|
use super::{Batcher, Mimetype, Tabs, Yanked};
|
|
use crate::tab::{Folder, Tab};
|
|
|
|
pub struct Mgr {
|
|
pub tabs: Tabs,
|
|
pub yanked: Yanked,
|
|
|
|
pub batcher: Batcher,
|
|
pub watcher: Watcher,
|
|
pub mimetype: Mimetype,
|
|
}
|
|
|
|
impl Mgr {
|
|
pub fn make() -> Self {
|
|
Self {
|
|
tabs: Default::default(),
|
|
yanked: Default::default(),
|
|
|
|
batcher: Default::default(),
|
|
watcher: Watcher::serve(),
|
|
mimetype: Default::default(),
|
|
}
|
|
}
|
|
|
|
pub fn area(&self, pos: Position) -> Rect {
|
|
if pos.origin == Origin::Hovered {
|
|
self.active().hovered_rect_based(pos)
|
|
} else {
|
|
pos.rect(TERM.dimension().area())
|
|
}
|
|
}
|
|
|
|
pub fn shutdown(&mut self) { self.tabs.iter_mut().for_each(|t| t.shutdown()); }
|
|
}
|
|
|
|
impl Mgr {
|
|
#[inline]
|
|
pub fn cwd(&self) -> &UrlBuf { self.active().cwd() }
|
|
|
|
#[inline]
|
|
pub fn active(&self) -> &Tab { self.tabs.active() }
|
|
|
|
#[inline]
|
|
pub fn active_mut(&mut self) -> &mut Tab { self.tabs.active_mut() }
|
|
|
|
#[inline]
|
|
pub fn current(&self) -> &Folder { &self.active().current }
|
|
|
|
#[inline]
|
|
pub fn current_mut(&mut self) -> &mut Folder { &mut self.active_mut().current }
|
|
|
|
#[inline]
|
|
pub fn parent_mut(&mut self) -> Option<&mut Folder> { self.active_mut().parent.as_mut() }
|
|
}
|