mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
feat: reuse the code previewer seeking behavior for json, archive, and empty (#1721)
This commit is contained in:
parent
a96c60ce6a
commit
034c28bacb
6 changed files with 13 additions and 43 deletions
|
|
@ -105,10 +105,10 @@ impl Manager {
|
||||||
|
|
||||||
let ext = url.extension();
|
let ext = url.extension();
|
||||||
match by {
|
match by {
|
||||||
"stem" => ext.map_or_else(String::new, |s| format!(".{}", s.to_string_lossy().into_owned())),
|
"stem" => ext.map_or_else(String::new, |s| format!(".{}", s.to_string_lossy())),
|
||||||
"ext" if ext.is_some() => format!("{}.", url.file_stem().unwrap().to_string_lossy()),
|
"ext" if ext.is_some() => format!("{}.", url.file_stem().unwrap().to_string_lossy()),
|
||||||
"dot_ext" if ext.is_some() => url.file_stem().unwrap().to_string_lossy().into_owned(),
|
"dot_ext" if ext.is_some() => url.file_stem().unwrap().to_string_lossy().into_owned(),
|
||||||
_ => url.file_name().map_or_else(String::new, |s| s.to_string_lossy().into_owned()),
|
_ => url.name().to_string_lossy().into_owned(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ impl Tab {
|
||||||
s.push(match opt.type_.as_str() {
|
s.push(match opt.type_.as_str() {
|
||||||
"path" => u.as_os_str(),
|
"path" => u.as_os_str(),
|
||||||
"dirname" => u.parent().map_or(OsStr::new(""), |p| p.as_os_str()),
|
"dirname" => u.parent().map_or(OsStr::new(""), |p| p.as_os_str()),
|
||||||
"filename" => u.file_name().unwrap_or(OsStr::new("")),
|
"filename" => u.name(),
|
||||||
"name_without_ext" => u.file_stem().unwrap_or(OsStr::new("")),
|
"name_without_ext" => u.file_stem().unwrap_or(OsStr::new("")),
|
||||||
_ => return,
|
_ => return,
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -42,16 +42,7 @@ function M:peek()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function M:seek(units)
|
function M:seek(units) require("code").seek(self, units) end
|
||||||
local h = cx.active.current.hovered
|
|
||||||
if h and h.url == self.file.url then
|
|
||||||
local step = math.floor(units * self.area.h / 10)
|
|
||||||
ya.manager_emit("peek", {
|
|
||||||
math.max(0, cx.active.preview.skip + step),
|
|
||||||
only_if = self.file.url,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.spawn_7z(args)
|
function M.spawn_7z(args)
|
||||||
local last_error = nil
|
local last_error = nil
|
||||||
|
|
|
||||||
|
|
@ -35,15 +35,6 @@ function M:peek()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function M:seek(units)
|
function M:seek(units) require("code").seek(self, units) end
|
||||||
local h = cx.active.current.hovered
|
|
||||||
if h and h.url == self.file.url then
|
|
||||||
local step = math.floor(units * self.area.h / 10)
|
|
||||||
ya.manager_emit("peek", {
|
|
||||||
math.max(0, cx.active.preview.skip + step),
|
|
||||||
only_if = self.file.url,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
||||||
|
|
@ -41,15 +41,6 @@ function M:peek()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function M:seek(units)
|
function M:seek(units) require("code").seek(self, units) end
|
||||||
local h = cx.active.current.hovered
|
|
||||||
if h and h.url == self.file.url then
|
|
||||||
local step = math.floor(units * self.area.h / 10)
|
|
||||||
ya.manager_emit("peek", {
|
|
||||||
math.max(0, cx.active.preview.skip + step),
|
|
||||||
only_if = self.file.url,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
||||||
|
|
@ -104,8 +104,7 @@ impl Scheduler {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn file_copy(&self, from: Url, mut to: Url, force: bool, follow: bool) {
|
pub fn file_copy(&self, from: Url, mut to: Url, force: bool, follow: bool) {
|
||||||
let name = format!("Copy {:?} to {:?}", from, to);
|
let id = self.ongoing.lock().add(TaskKind::User, format!("Copy {from} to {to}"));
|
||||||
let id = self.ongoing.lock().add(TaskKind::User, name);
|
|
||||||
|
|
||||||
if to.starts_with(&from) && to != from {
|
if to.starts_with(&from) && to != from {
|
||||||
self.new_and_fail(id, "Cannot copy directory into itself").ok();
|
self.new_and_fail(id, "Cannot copy directory into itself").ok();
|
||||||
|
|
@ -122,8 +121,7 @@ impl Scheduler {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn file_link(&self, from: Url, mut to: Url, relative: bool, force: bool) {
|
pub fn file_link(&self, from: Url, mut to: Url, relative: bool, force: bool) {
|
||||||
let name = format!("Link {from:?} to {to:?}");
|
let id = self.ongoing.lock().add(TaskKind::User, format!("Link {from} to {to}"));
|
||||||
let id = self.ongoing.lock().add(TaskKind::User, name);
|
|
||||||
|
|
||||||
let file = self.file.clone();
|
let file = self.file.clone();
|
||||||
self.send_micro(id, LOW, async move {
|
self.send_micro(id, LOW, async move {
|
||||||
|
|
@ -137,8 +135,7 @@ impl Scheduler {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn file_hardlink(&self, from: Url, mut to: Url, force: bool, follow: bool) {
|
pub fn file_hardlink(&self, from: Url, mut to: Url, force: bool, follow: bool) {
|
||||||
let name = format!("Hardlink {:?} to {:?}", from, to);
|
let id = self.ongoing.lock().add(TaskKind::User, format!("Hardlink {from} to {to}"));
|
||||||
let id = self.ongoing.lock().add(TaskKind::User, name);
|
|
||||||
|
|
||||||
if to.starts_with(&from) && to != from {
|
if to.starts_with(&from) && to != from {
|
||||||
self.new_and_fail(id, "Cannot hardlink directory into itself").ok();
|
self.new_and_fail(id, "Cannot hardlink directory into itself").ok();
|
||||||
|
|
@ -156,7 +153,7 @@ impl Scheduler {
|
||||||
|
|
||||||
pub fn file_delete(&self, target: Url) {
|
pub fn file_delete(&self, target: Url) {
|
||||||
let mut ongoing = self.ongoing.lock();
|
let mut ongoing = self.ongoing.lock();
|
||||||
let id = ongoing.add(TaskKind::User, format!("Delete {:?}", target));
|
let id = ongoing.add(TaskKind::User, format!("Delete {target}"));
|
||||||
|
|
||||||
ongoing.hooks.insert(id, {
|
ongoing.hooks.insert(id, {
|
||||||
let target = target.clone();
|
let target = target.clone();
|
||||||
|
|
@ -185,7 +182,7 @@ impl Scheduler {
|
||||||
|
|
||||||
pub fn file_trash(&self, target: Url) {
|
pub fn file_trash(&self, target: Url) {
|
||||||
let mut ongoing = self.ongoing.lock();
|
let mut ongoing = self.ongoing.lock();
|
||||||
let id = ongoing.add(TaskKind::User, format!("Trash {:?}", target));
|
let id = ongoing.add(TaskKind::User, format!("Trash {target}"));
|
||||||
|
|
||||||
ongoing.hooks.insert(id, {
|
ongoing.hooks.insert(id, {
|
||||||
let target = target.clone();
|
let target = target.clone();
|
||||||
|
|
@ -258,7 +255,7 @@ impl Scheduler {
|
||||||
let mut ongoing = self.ongoing.lock();
|
let mut ongoing = self.ongoing.lock();
|
||||||
|
|
||||||
for target in targets {
|
for target in targets {
|
||||||
let id = ongoing.add(TaskKind::Preload, format!("Calculate the size of {:?}", target));
|
let id = ongoing.add(TaskKind::Preload, format!("Calculate the size of {target}"));
|
||||||
let target = target.clone();
|
let target = target.clone();
|
||||||
let throttle = throttle.clone();
|
let throttle = throttle.clone();
|
||||||
|
|
||||||
|
|
@ -435,7 +432,7 @@ impl Scheduler {
|
||||||
async move {
|
async move {
|
||||||
if let Err(e) = f.await {
|
if let Err(e) = f.await {
|
||||||
prog.send(TaskProg::New(id, 0)).ok();
|
prog.send(TaskProg::New(id, 0)).ok();
|
||||||
prog.send(TaskProg::Fail(id, format!("Task initialization failed:\n{e}"))).ok();
|
prog.send(TaskProg::Fail(id, format!("Task initialization failed:\n{e:?}"))).ok();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.boxed(),
|
.boxed(),
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue