yazi/yazi-core/src/mgr/mgr.rs

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() }
}