mirror of
https://github.com/sxyazi/yazi.git
synced 2026-05-13 08:16:40 +00:00
feat: add YAZI_ID environment variable (#895)
This commit is contained in:
parent
38813413ec
commit
23c38ebae0
19 changed files with 43 additions and 43 deletions
3
Cargo.lock
generated
3
Cargo.lock
generated
|
|
@ -2747,6 +2747,7 @@ dependencies = [
|
|||
"parking_lot",
|
||||
"ratatui",
|
||||
"regex",
|
||||
"scopeguard",
|
||||
"serde",
|
||||
"tokio",
|
||||
"tokio-stream",
|
||||
|
|
@ -2793,6 +2794,7 @@ dependencies = [
|
|||
"libc",
|
||||
"mlua",
|
||||
"ratatui",
|
||||
"scopeguard",
|
||||
"signal-hook-tokio",
|
||||
"syntect",
|
||||
"tikv-jemallocator",
|
||||
|
|
@ -2874,6 +2876,7 @@ dependencies = [
|
|||
"libc",
|
||||
"parking_lot",
|
||||
"regex",
|
||||
"scopeguard",
|
||||
"tokio",
|
||||
"tokio-stream",
|
||||
"tracing",
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{"version":"0.2","words":["Punct","KEYMAP","splitn","crossterm","YAZI","unar","peekable","ratatui","syntect","pbpaste","pbcopy","ffmpegthumbnailer","oneshot","Posix","Lsar","XADDOS","zoxide","cands","Deque","precache","imageops","IFBLK","IFCHR","IFDIR","IFIFO","IFLNK","IFMT","IFSOCK","IRGRP","IROTH","IRUSR","ISGID","ISUID","ISVTX","IWGRP","IWOTH","IWUSR","IXGRP","IXOTH","IXUSR","libc","winsize","TIOCGWINSZ","xpixel","ypixel","ioerr","appender","Catppuccin","macchiato","gitmodules","Dotfiles","bashprofile","vimrc","flac","webp","exiftool","mediainfo","ripgrep","nvim","indexmap","indexmap","unwatch","canonicalize","serde","fsevent","Ueberzug","iterm","wezterm","sixel","chafa","ueberzugpp","️ Überzug","️ Überzug","Konsole","Alacritty","Überzug","pkgs","paru","unarchiver","pdftoppm","poppler","prebuild","singlefile","jpegopt","EXIF","rustfmt","mktemp","nanos","xclip","xsel","natord","Mintty","nixos","nixpkgs","SIGTSTP","SIGCONT","SIGCONT","mlua","nonstatic","userdata","metatable","natsort","backstack","luajit","Succ","Succ","cand","fileencoding","foldmethod","lightgreen","darkgray","lightred","lightyellow","lightcyan","nushell","msvc","aarch","linemode","sxyazi","rsplit","ZELLIJ","bitflags","bitflags","USERPROFILE","Neovim","vergen","gitcl","Renderable","preloaders","prec","imagesize","Upserting","prio","Ghostty","Catmull","Lanczos","cmds","unyank","scrolloff","headsup","unsub","uzers"],"language":"en","flagWords":[]}
|
||||
{"language":"en","flagWords":[],"words":["Punct","KEYMAP","splitn","crossterm","YAZI","unar","peekable","ratatui","syntect","pbpaste","pbcopy","ffmpegthumbnailer","oneshot","Posix","Lsar","XADDOS","zoxide","cands","Deque","precache","imageops","IFBLK","IFCHR","IFDIR","IFIFO","IFLNK","IFMT","IFSOCK","IRGRP","IROTH","IRUSR","ISGID","ISUID","ISVTX","IWGRP","IWOTH","IWUSR","IXGRP","IXOTH","IXUSR","libc","winsize","TIOCGWINSZ","xpixel","ypixel","ioerr","appender","Catppuccin","macchiato","gitmodules","Dotfiles","bashprofile","vimrc","flac","webp","exiftool","mediainfo","ripgrep","nvim","indexmap","indexmap","unwatch","canonicalize","serde","fsevent","Ueberzug","iterm","wezterm","sixel","chafa","ueberzugpp","️ Überzug","️ Überzug","Konsole","Alacritty","Überzug","pkgs","paru","unarchiver","pdftoppm","poppler","prebuild","singlefile","jpegopt","EXIF","rustfmt","mktemp","nanos","xclip","xsel","natord","Mintty","nixos","nixpkgs","SIGTSTP","SIGCONT","SIGCONT","mlua","nonstatic","userdata","metatable","natsort","backstack","luajit","Succ","Succ","cand","fileencoding","foldmethod","lightgreen","darkgray","lightred","lightyellow","lightcyan","nushell","msvc","aarch","linemode","sxyazi","rsplit","ZELLIJ","bitflags","bitflags","USERPROFILE","Neovim","vergen","gitcl","Renderable","preloaders","prec","imagesize","Upserting","prio","Ghostty","Catmull","Lanczos","cmds","unyank","scrolloff","headsup","unsub","uzers","scopeguard","SPDLOG"],"version":"0.2"}
|
||||
|
|
@ -74,6 +74,7 @@ impl Ueberzug {
|
|||
// TODO: demon
|
||||
let result = Command::new("ueberzugpp")
|
||||
.args(["layer", "-so", &adaptor.to_string()])
|
||||
.env("SPDLOG_LEVEL", if cfg!(debug_assertions) { "debug" } else { "" })
|
||||
.kill_on_drop(true)
|
||||
.stdin(Stdio::piped())
|
||||
.stderr(Stdio::null())
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ notify = { version = "6.1.1", default-features = false, features = [ "mac
|
|||
parking_lot = "0.12.1"
|
||||
ratatui = "0.26.1"
|
||||
regex = "1.10.4"
|
||||
scopeguard = "1.2.0"
|
||||
serde = "1.0.197"
|
||||
tokio = { version = "1.37.0", features = [ "full" ] }
|
||||
tokio-stream = "0.1.15"
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
use std::{borrow::Cow, collections::HashMap, ffi::{OsStr, OsString}, io::{stderr, BufWriter, Write}, path::PathBuf};
|
||||
|
||||
use anyhow::{anyhow, Result};
|
||||
use scopeguard::defer;
|
||||
use tokio::{fs::{self, OpenOptions}, io::{stdin, AsyncReadExt, AsyncWriteExt}};
|
||||
use yazi_config::{OPEN, PREVIEW};
|
||||
use yazi_proxy::{AppProxy, TasksProxy, HIDER, WATCHER};
|
||||
use yazi_shared::{fs::{accessible, max_common_root, File, FilesOp, Url}, term::Term, Defer};
|
||||
use yazi_shared::{fs::{accessible, max_common_root, File, FilesOp, Url}, term::Term};
|
||||
|
||||
use crate::manager::Manager;
|
||||
|
||||
|
|
@ -31,12 +32,12 @@ impl Manager {
|
|||
.write_all(s.as_encoded_bytes())
|
||||
.await?;
|
||||
|
||||
let _defer1 = Defer::new(|| tokio::spawn(fs::remove_file(tmp.clone())));
|
||||
defer! { tokio::spawn(fs::remove_file(tmp.clone())); }
|
||||
TasksProxy::process_exec(vec![OsString::new(), tmp.to_owned().into()], Cow::Borrowed(opener))
|
||||
.await;
|
||||
|
||||
let _permit = HIDER.acquire().await.unwrap();
|
||||
let _defer2 = Defer::new(AppProxy::resume);
|
||||
defer!(AppProxy::resume());
|
||||
AppProxy::stop().await;
|
||||
|
||||
let new: Vec<_> = fs::read_to_string(&tmp).await?.lines().map(PathBuf::from).collect();
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
use std::{io::{stderr, BufWriter, LineWriter, Write}, mem};
|
||||
|
||||
use crossterm::terminal::{disable_raw_mode, enable_raw_mode};
|
||||
use scopeguard::defer;
|
||||
use tokio::{io::{stdin, AsyncReadExt}, select, sync::mpsc, time};
|
||||
use yazi_proxy::{AppProxy, HIDER};
|
||||
use yazi_shared::{event::Cmd, term::Term, Defer};
|
||||
use yazi_shared::{event::Cmd, term::Term};
|
||||
|
||||
use crate::tasks::Tasks;
|
||||
|
||||
|
|
@ -26,14 +27,13 @@ impl Tasks {
|
|||
task.logs.clone()
|
||||
};
|
||||
|
||||
defer!(AppProxy::resume());
|
||||
AppProxy::stop().await;
|
||||
let _defer = Defer::new(|| {
|
||||
disable_raw_mode().ok();
|
||||
AppProxy::resume();
|
||||
});
|
||||
|
||||
Term::clear(&mut stderr()).ok();
|
||||
BufWriter::new(stderr().lock()).write_all(mem::take(&mut buffered).as_bytes()).ok();
|
||||
|
||||
defer! { disable_raw_mode().ok(); }
|
||||
enable_raw_mode().ok();
|
||||
|
||||
let mut stdin = stdin();
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ impl<'a> Body<'a> {
|
|||
|
||||
pub fn from_lua(kind: &str, value: Value) -> Result<Self> {
|
||||
Ok(match kind {
|
||||
"hi" | "hey" | "cd" | "hover" | "rename" | "bulk" | "yank" => {
|
||||
"hi" | "hey" | "cd" | "hover" | "rename" | "bulk" | "yank" | "move" | "trash" | "delete" => {
|
||||
Err("Cannot construct system event from Lua").into_lua_err()?
|
||||
}
|
||||
_ if !kind.bytes().all(|b| b.is_ascii_alphanumeric() || b == b'-') => {
|
||||
|
|
|
|||
|
|
@ -27,10 +27,10 @@ impl<'a> From<BodyDelete<'a>> for Body<'a> {
|
|||
|
||||
impl IntoLua<'_> for BodyDelete<'static> {
|
||||
fn into_lua(self, lua: &Lua) -> mlua::Result<Value<'_>> {
|
||||
let t = lua.create_table_with_capacity(self.urls.len(), 0)?;
|
||||
let urls = lua.create_table_with_capacity(self.urls.len(), 0)?;
|
||||
for (i, url) in self.urls.into_owned().into_iter().enumerate() {
|
||||
t.raw_set(i + 1, lua.create_any_userdata(url)?)?;
|
||||
urls.raw_set(i + 1, lua.create_any_userdata(url)?)?;
|
||||
}
|
||||
t.into_lua(lua)
|
||||
lua.create_table_from([("urls", urls)])?.into_lua(lua)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,9 @@ impl<'a> From<BodyMove<'a>> for Body<'a> {
|
|||
}
|
||||
|
||||
impl IntoLua<'_> for BodyMove<'static> {
|
||||
fn into_lua(self, lua: &Lua) -> mlua::Result<Value> { self.items.into_owned().into_lua(lua) }
|
||||
fn into_lua(self, lua: &Lua) -> mlua::Result<Value> {
|
||||
lua.create_table_from([("items", self.items.into_owned())])?.into_lua(lua)
|
||||
}
|
||||
}
|
||||
|
||||
// --- Item
|
||||
|
|
|
|||
|
|
@ -27,10 +27,10 @@ impl<'a> From<BodyTrash<'a>> for Body<'a> {
|
|||
|
||||
impl IntoLua<'_> for BodyTrash<'static> {
|
||||
fn into_lua(self, lua: &Lua) -> mlua::Result<Value<'_>> {
|
||||
let t = lua.create_table_with_capacity(self.urls.len(), 0)?;
|
||||
let urls = lua.create_table_with_capacity(self.urls.len(), 0)?;
|
||||
for (i, url) in self.urls.into_owned().into_iter().enumerate() {
|
||||
t.raw_set(i + 1, lua.create_any_userdata(url)?)?;
|
||||
urls.raw_set(i + 1, lua.create_any_userdata(url)?)?;
|
||||
}
|
||||
t.into_lua(lua)
|
||||
lua.create_table_from([("urls", urls)])?.into_lua(lua)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,13 @@ pub fn serve() {
|
|||
LOCAL.with(Default::default);
|
||||
REMOTE.with(Default::default);
|
||||
|
||||
// Env
|
||||
std::env::set_var("YAZI_ID", ID.to_string());
|
||||
std::env::set_var(
|
||||
"YAZI_LEVEL",
|
||||
(std::env::var("YAZI_LEVEL").unwrap_or_default().parse().unwrap_or(0u16) + 1).to_string(),
|
||||
);
|
||||
|
||||
Pump::serve();
|
||||
Client::serve(rx);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ fdlimit = "0.3.0"
|
|||
futures = "0.3.30"
|
||||
mlua = { version = "0.9.6", features = [ "lua54", "vendored" ] }
|
||||
ratatui = "0.26.1"
|
||||
scopeguard = "1.2.0"
|
||||
syntect = { version = "5.2.0", default-features = false, features = [ "parsing", "plist-load", "regex-onig" ] }
|
||||
tokio = { version = "1.37.0", features = [ "full" ] }
|
||||
tokio-util = "0.7.10"
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
use std::fmt::Display;
|
||||
|
||||
use mlua::TableExt;
|
||||
use scopeguard::defer;
|
||||
use tracing::warn;
|
||||
use yazi_plugin::{loader::LOADER, OptData, RtRef, LUA};
|
||||
use yazi_shared::{emit, event::Cmd, Defer, Layer};
|
||||
use yazi_shared::{emit, event::Cmd, Layer};
|
||||
|
||||
use crate::{app::App, lives::Lives};
|
||||
|
||||
|
|
@ -45,7 +46,7 @@ impl App {
|
|||
Err(e) => return warn!("{e}"),
|
||||
}
|
||||
|
||||
let _defer = Defer::new(|| LUA.named_registry_value::<RtRef>("rt").map(|mut r| r.reset()));
|
||||
defer! { LUA.named_registry_value::<RtRef>("rt").map(|mut r| r.reset()).ok(); };
|
||||
let plugin = match LOADER.load(&opt.name) {
|
||||
Ok(plugin) => plugin,
|
||||
Err(e) => return warn!("{e}"),
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
use std::{mem, sync::Arc};
|
||||
|
||||
use mlua::{Scope, Table};
|
||||
use scopeguard::defer;
|
||||
use tracing::error;
|
||||
use yazi_config::LAYOUT;
|
||||
use yazi_plugin::{elements::RectRef, LUA};
|
||||
use yazi_shared::{Defer, RoCell};
|
||||
use yazi_shared::RoCell;
|
||||
|
||||
use crate::Ctx;
|
||||
|
||||
|
|
@ -34,7 +35,7 @@ impl Lives {
|
|||
f: impl FnOnce(&Scope<'a, 'a>) -> mlua::Result<T>,
|
||||
) -> mlua::Result<T> {
|
||||
let result = LUA.scope(|scope| {
|
||||
let _defer = Defer::new(|| SCOPE.drop());
|
||||
defer! { SCOPE.drop(); };
|
||||
SCOPE.init(unsafe { mem::transmute(scope) });
|
||||
LUA.set_named_registry_value("cx", scope.create_any_userdata_ref(cx)?)?;
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ crossterm = "0.27.0"
|
|||
futures = "0.3.30"
|
||||
parking_lot = "0.12.1"
|
||||
regex = "1.10.4"
|
||||
scopeguard = "1.2.0"
|
||||
tokio = { version = "1.37.0", features = [ "full" ] }
|
||||
tokio-stream = "0.1.15"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
use anyhow::Result;
|
||||
use scopeguard::defer;
|
||||
use tokio::{io::{AsyncBufReadExt, BufReader}, select, sync::mpsc};
|
||||
use yazi_proxy::{AppProxy, HIDER};
|
||||
use yazi_shared::Defer;
|
||||
|
||||
use super::{ProcessOpBg, ProcessOpBlock, ProcessOpOrphan, ShellOpt};
|
||||
use crate::TaskProg;
|
||||
|
|
@ -15,7 +15,7 @@ impl Process {
|
|||
|
||||
pub async fn block(&self, task: ProcessOpBlock) -> Result<()> {
|
||||
let _permit = HIDER.acquire().await.unwrap();
|
||||
let _defer = Defer::new(AppProxy::resume);
|
||||
defer!(AppProxy::resume());
|
||||
AppProxy::stop().await;
|
||||
|
||||
let (id, cmd) = (task.id, task.cmd.clone());
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
use std::{env, ffi::OsString, process::Stdio};
|
||||
use std::{ffi::OsString, process::Stdio};
|
||||
|
||||
use anyhow::Result;
|
||||
use tokio::process::{Child, Command};
|
||||
|
|
@ -25,12 +25,9 @@ impl ShellOpt {
|
|||
}
|
||||
|
||||
pub fn shell(opt: ShellOpt) -> Result<Child> {
|
||||
let level = env::var("YAZI_LEVEL").ok().and_then(|s| s.parse::<u32>().ok()).unwrap_or(0);
|
||||
|
||||
#[cfg(unix)]
|
||||
return Ok(unsafe {
|
||||
Command::new("sh")
|
||||
.env("YAZI_LEVEL", (level + 1).to_string())
|
||||
.arg("-c")
|
||||
.stdin(opt.stdio())
|
||||
.stdout(opt.stdio())
|
||||
|
|
@ -54,7 +51,6 @@ pub fn shell(opt: ShellOpt) -> Result<Child> {
|
|||
let expanded = parser::parse(opt.cmd.to_string_lossy().as_ref(), &args_);
|
||||
Ok(
|
||||
Command::new("cmd")
|
||||
.env("YAZI_LEVEL", (level + 1).to_string())
|
||||
.arg("/C")
|
||||
.args(&expanded)
|
||||
.stdin(opt.stdio())
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
pub struct Defer<F: FnOnce() -> T, T>(Option<F>);
|
||||
|
||||
impl<F: FnOnce() -> T, T> Defer<F, T> {
|
||||
pub fn new(f: F) -> Self { Defer(Some(f)) }
|
||||
}
|
||||
|
||||
impl<F: FnOnce() -> T, T> Drop for Defer<F, T> {
|
||||
fn drop(&mut self) {
|
||||
if let Some(f) = self.0.take() {
|
||||
_ = f();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,6 @@
|
|||
mod chars;
|
||||
mod condition;
|
||||
mod debounce;
|
||||
mod defer;
|
||||
mod env;
|
||||
mod errors;
|
||||
pub mod event;
|
||||
|
|
@ -21,7 +20,6 @@ mod xdg;
|
|||
pub use chars::*;
|
||||
pub use condition::*;
|
||||
pub use debounce::*;
|
||||
pub use defer::*;
|
||||
pub use env::*;
|
||||
pub use errors::*;
|
||||
pub use layer::*;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue