mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-21 23:01:05 +00:00
fix: initialize window in Folder::make for folder preview
This commit is contained in:
parent
8851269585
commit
20b6f26247
3 changed files with 26 additions and 13 deletions
|
|
@ -1,4 +1,4 @@
|
|||
use std::ops::Deref;
|
||||
use std::ops::{Deref, Range};
|
||||
|
||||
use mlua::{AnyUserData, Lua, UserDataFields};
|
||||
use yazi_config::LAYOUT;
|
||||
|
|
@ -7,7 +7,8 @@ use yazi_plugin::{bindings::Cast, url::Url};
|
|||
use super::{File, Files, SCOPE};
|
||||
|
||||
pub(super) struct Folder {
|
||||
inner: *const yazi_core::folder::Folder,
|
||||
inner: *const yazi_core::folder::Folder,
|
||||
window: Range<usize>,
|
||||
}
|
||||
|
||||
impl Deref for Folder {
|
||||
|
|
@ -18,20 +19,26 @@ impl Deref for Folder {
|
|||
|
||||
impl Folder {
|
||||
#[inline]
|
||||
pub(super) fn make(inner: &yazi_core::folder::Folder) -> mlua::Result<AnyUserData<'static>> {
|
||||
SCOPE.create_any_userdata(Self { inner })
|
||||
pub(super) fn make(
|
||||
inner: &yazi_core::folder::Folder,
|
||||
window: Option<Range<usize>>,
|
||||
) -> mlua::Result<AnyUserData<'static>> {
|
||||
let window = match window {
|
||||
Some(w) => w,
|
||||
None => {
|
||||
let limit = LAYOUT.load().preview.height as usize;
|
||||
inner.offset..inner.files.len().min(inner.offset + limit)
|
||||
}
|
||||
};
|
||||
|
||||
SCOPE.create_any_userdata(Self { inner, window })
|
||||
}
|
||||
|
||||
pub(super) fn register(lua: &Lua) -> mlua::Result<()> {
|
||||
lua.register_userdata_type::<Self>(|reg| {
|
||||
reg.add_field_method_get("cwd", |lua, me| Url::cast(lua, me.cwd.clone()));
|
||||
reg.add_field_method_get("files", |_, me| Files::make(me, 0..me.files.len()));
|
||||
reg.add_field_method_get("window", |_, me| {
|
||||
Files::make(
|
||||
me,
|
||||
me.offset..me.files.len().min(me.offset + LAYOUT.load().preview.height as usize),
|
||||
)
|
||||
});
|
||||
reg.add_field_method_get("window", |_, me| Files::make(me, me.window.clone()));
|
||||
|
||||
reg.add_field_method_get("offset", |_, me| Ok(me.offset));
|
||||
reg.add_field_method_get("cursor", |_, me| Ok(me.cursor));
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
use std::ops::Deref;
|
||||
|
||||
use mlua::{AnyUserData, Lua, UserDataFields};
|
||||
use yazi_config::LAYOUT;
|
||||
|
||||
use super::{Folder, SCOPE};
|
||||
|
||||
|
|
@ -29,7 +30,10 @@ impl Preview {
|
|||
.hovered()
|
||||
.filter(|&f| f.is_dir())
|
||||
.and_then(|f| me.tab().history(&f.url))
|
||||
.map(Folder::make)
|
||||
.map(|f| {
|
||||
let limit = LAYOUT.load().preview.height as usize;
|
||||
Folder::make(f, Some(me.skip..f.files.len().min(me.skip + limit)))
|
||||
})
|
||||
.transpose()
|
||||
});
|
||||
})
|
||||
|
|
|
|||
|
|
@ -36,8 +36,10 @@ impl Tab {
|
|||
|
||||
reg.add_field_method_get("mode", |_, me| Mode::make(&me.mode));
|
||||
reg.add_field_method_get("conf", |_, me| Config::make(&me.conf));
|
||||
reg.add_field_method_get("parent", |_, me| me.parent.as_ref().map(Folder::make).transpose());
|
||||
reg.add_field_method_get("current", |_, me| Folder::make(&me.current));
|
||||
reg.add_field_method_get("parent", |_, me| {
|
||||
me.parent.as_ref().map(|f| Folder::make(f, None)).transpose()
|
||||
});
|
||||
reg.add_field_method_get("current", |_, me| Folder::make(&me.current, None));
|
||||
reg.add_field_method_get("preview", |_, me| Preview::make(me));
|
||||
})?;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue