fix: use WAYLAND_DISPLAY and DISPLAY to detect Wayland/X11 when XDG_SESSION_TYPE is not set (#312)

This commit is contained in:
三咲雅 · Misaki Masa 2023-10-24 23:16:19 +08:00 committed by GitHub
parent 8aeef55b6f
commit 24fd587431
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -3,6 +3,7 @@ use std::{env, path::{Path, PathBuf}, sync::atomic::{AtomicBool, Ordering}};
use anyhow::{anyhow, Result};
use ratatui::prelude::Rect;
use tokio::{fs, sync::mpsc::UnboundedSender};
use tracing::warn;
use yazi_config::PREVIEW;
use yazi_shared::RoCell;
@ -36,8 +37,9 @@ impl Adaptor {
("WEZTERM_EXECUTABLE", cfg!(windows).then_some(Self::Iterm2).unwrap_or(Self::Kitty)),
("VSCODE_INJECTION", Self::Sixel),
];
if let Some(var) = vars.iter().find(|v| env::var_os(v.0).is_some()) {
return var.1;
match vars.iter().find(|v| env::var_os(v.0).is_some_and(|s| !s.is_empty())) {
Some(var) => return var.1,
None => warn!("[Adaptor] No special environment variables detected"),
}
let (term, program) = Self::term_program();
@ -48,22 +50,31 @@ impl Adaptor {
"vscode" => return Self::Sixel,
"Hyper" => return Self::Sixel,
"mintty" => return Self::Iterm2,
_ => {}
_ => warn!("[Adaptor] Unknown TERM_PROGRAM: {program}"),
}
match term.as_str() {
"xterm-kitty" => return Self::Kitty,
"foot" => return Self::Sixel,
"foot-extra" => return Self::Sixel,
_ => {}
_ => warn!("[Adaptor] Unknown TERM: {term}"),
}
match env::var("XDG_SESSION_TYPE").unwrap_or_default().as_str() {
"x11" => return Self::X11,
"wayland" => return Self::Wayland,
_ => {}
_ => warn!("[Adaptor] Could not identify XDG_SESSION_TYPE"),
}
if env::var_os("WAYLAND_DISPLAY").is_some_and(|s| !s.is_empty()) {
return Self::Wayland;
}
if env::var_os("DISPLAY").is_some_and(|s| !s.is_empty()) {
return Self::X11;
}
if std::fs::symlink_metadata("/proc/sys/fs/binfmt_misc/WSLInterop").is_ok() {
return Self::Kitty;
}
warn!("[Adaptor] Falling back to chafa");
Self::Chafa
}