mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41: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 mlua::{AnyUserData, Lua, UserDataFields};
|
||||||
use yazi_config::LAYOUT;
|
use yazi_config::LAYOUT;
|
||||||
|
|
@ -7,7 +7,8 @@ use yazi_plugin::{bindings::Cast, url::Url};
|
||||||
use super::{File, Files, SCOPE};
|
use super::{File, Files, SCOPE};
|
||||||
|
|
||||||
pub(super) struct Folder {
|
pub(super) struct Folder {
|
||||||
inner: *const yazi_core::folder::Folder,
|
inner: *const yazi_core::folder::Folder,
|
||||||
|
window: Range<usize>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deref for Folder {
|
impl Deref for Folder {
|
||||||
|
|
@ -18,20 +19,26 @@ impl Deref for Folder {
|
||||||
|
|
||||||
impl Folder {
|
impl Folder {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub(super) fn make(inner: &yazi_core::folder::Folder) -> mlua::Result<AnyUserData<'static>> {
|
pub(super) fn make(
|
||||||
SCOPE.create_any_userdata(Self { inner })
|
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<()> {
|
pub(super) fn register(lua: &Lua) -> mlua::Result<()> {
|
||||||
lua.register_userdata_type::<Self>(|reg| {
|
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("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("files", |_, me| Files::make(me, 0..me.files.len()));
|
||||||
reg.add_field_method_get("window", |_, me| {
|
reg.add_field_method_get("window", |_, me| Files::make(me, me.window.clone()));
|
||||||
Files::make(
|
|
||||||
me,
|
|
||||||
me.offset..me.files.len().min(me.offset + LAYOUT.load().preview.height as usize),
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
reg.add_field_method_get("offset", |_, me| Ok(me.offset));
|
reg.add_field_method_get("offset", |_, me| Ok(me.offset));
|
||||||
reg.add_field_method_get("cursor", |_, me| Ok(me.cursor));
|
reg.add_field_method_get("cursor", |_, me| Ok(me.cursor));
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|
||||||
use mlua::{AnyUserData, Lua, UserDataFields};
|
use mlua::{AnyUserData, Lua, UserDataFields};
|
||||||
|
use yazi_config::LAYOUT;
|
||||||
|
|
||||||
use super::{Folder, SCOPE};
|
use super::{Folder, SCOPE};
|
||||||
|
|
||||||
|
|
@ -29,7 +30,10 @@ impl Preview {
|
||||||
.hovered()
|
.hovered()
|
||||||
.filter(|&f| f.is_dir())
|
.filter(|&f| f.is_dir())
|
||||||
.and_then(|f| me.tab().history(&f.url))
|
.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()
|
.transpose()
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,10 @@ impl Tab {
|
||||||
|
|
||||||
reg.add_field_method_get("mode", |_, me| Mode::make(&me.mode));
|
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("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("parent", |_, me| {
|
||||||
reg.add_field_method_get("current", |_, me| Folder::make(&me.current));
|
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));
|
reg.add_field_method_get("preview", |_, me| Preview::make(me));
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue