feat: expose Finder API to Lua

This commit is contained in:
sxyazi 2024-06-18 18:19:37 +08:00
parent f35712a768
commit b5b6c9642a
No known key found for this signature in database
5 changed files with 32 additions and 4 deletions

View file

@ -21,8 +21,6 @@ impl Filter {
}
pub(super) fn register(lua: &Lua) -> mlua::Result<()> {
lua.register_userdata_type::<Self>(|_| {})?;
Ok(())
lua.register_userdata_type::<Self>(|_| {})
}
}

View file

@ -0,0 +1,26 @@
use std::ops::Deref;
use mlua::{AnyUserData, Lua};
use super::SCOPE;
pub(super) struct Finder {
inner: *const yazi_core::tab::Finder,
}
impl Deref for Finder {
type Target = yazi_core::tab::Finder;
fn deref(&self) -> &Self::Target { unsafe { &*self.inner } }
}
impl Finder {
#[inline]
pub(super) fn make(inner: &yazi_core::tab::Finder) -> mlua::Result<AnyUserData<'static>> {
SCOPE.create_any_userdata(Self { inner })
}
pub(super) fn register(lua: &Lua) -> mlua::Result<()> {
lua.register_userdata_type::<Self>(|_| {})
}
}

View file

@ -19,6 +19,7 @@ impl Lives {
super::File::register(&LUA)?;
super::Files::register(&LUA)?;
super::Filter::register(&LUA)?;
super::Finder::register(&LUA)?;
super::Folder::register(&LUA)?;
super::Mode::register(&LUA)?;
super::Preview::register(&LUA)?;

View file

@ -4,6 +4,7 @@ mod config;
mod file;
mod files;
mod filter;
mod finder;
mod folder;
mod iter;
mod lives;
@ -19,6 +20,7 @@ use config::*;
use file::*;
use files::*;
use filter::*;
use finder::*;
use folder::*;
use iter::*;
pub(super) use lives::*;

View file

@ -2,7 +2,7 @@ use std::ops::Deref;
use mlua::{AnyUserData, Lua, UserDataFields, UserDataMethods};
use super::{Config, Folder, Mode, Preview, Selected, SCOPE};
use super::{Config, Finder, Folder, Mode, Preview, Selected, SCOPE};
pub(super) struct Tab {
inner: *const yazi_core::tab::Tab,
@ -44,6 +44,7 @@ impl Tab {
reg.add_field_method_get("selected", |_, me| Selected::make(&me.selected));
reg.add_field_method_get("preview", |_, me| Preview::make(me));
reg.add_field_method_get("finder", |_, me| me.finder.as_ref().map(Finder::make).transpose());
})?;
Ok(())