mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-21 23:01:05 +00:00
fix: unable to scroll back after scrolling beyond the maximum boundary
This commit is contained in:
parent
3544578a12
commit
c40058ebfa
7 changed files with 34 additions and 25 deletions
16
Cargo.lock
generated
16
Cargo.lock
generated
|
|
@ -237,9 +237,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
|
|||
|
||||
[[package]]
|
||||
name = "bytes"
|
||||
version = "1.4.0"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
|
||||
checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
|
||||
|
||||
[[package]]
|
||||
name = "cassowary"
|
||||
|
|
@ -264,9 +264,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|||
|
||||
[[package]]
|
||||
name = "chrono"
|
||||
version = "0.4.29"
|
||||
version = "0.4.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d87d9d13be47a5b7c3907137f1290b0459a7f80efb26be8c52afb11963bccb02"
|
||||
checksum = "defd4e7873dbddba6c7c91e199c7fcb946abc4a6a4ac3195400bcfb01b5de877"
|
||||
dependencies = [
|
||||
"android-tzdata",
|
||||
"iana-time-zone",
|
||||
|
|
@ -1880,9 +1880,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.7.6"
|
||||
version = "0.7.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
|
||||
checksum = "de0a3ab2091e52d7299a39d098e200114a972df0a7724add02a273aa9aada592"
|
||||
dependencies = [
|
||||
"indexmap 2.0.0",
|
||||
"serde",
|
||||
|
|
@ -1902,9 +1902,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "toml_edit"
|
||||
version = "0.19.14"
|
||||
version = "0.19.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
|
||||
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
|
||||
dependencies = [
|
||||
"indexmap 2.0.0",
|
||||
"serde",
|
||||
|
|
|
|||
|
|
@ -160,10 +160,13 @@ impl App {
|
|||
}
|
||||
emit!(Peek);
|
||||
}
|
||||
Event::Peek(skip, sequent) => {
|
||||
let b = sequent.is_some();
|
||||
manager.active_mut().update_peek(skip as isize, sequent);
|
||||
self.cx.manager.peek(b, self.cx.image_layer());
|
||||
Event::Peek(sequent) => {
|
||||
if let Some((max, url)) = sequent {
|
||||
manager.active_mut().update_peek(max, url);
|
||||
self.cx.manager.peek(true, self.cx.image_layer());
|
||||
} else {
|
||||
self.cx.manager.peek(false, self.cx.image_layer());
|
||||
}
|
||||
}
|
||||
Event::Preview(lock) => {
|
||||
if manager.active_mut().update_preview(lock) {
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ impl Executor {
|
|||
}
|
||||
"peek" => {
|
||||
let step = exec.args.get(0).and_then(|s| s.parse().ok()).unwrap_or(0);
|
||||
cx.manager.active_mut().update_peek(step, None);
|
||||
cx.manager.active_mut().preview_arrow(step);
|
||||
cx.manager.peek(true, cx.image_layer())
|
||||
}
|
||||
"leave" => cx.manager.active_mut().leave(),
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ pub enum Event {
|
|||
Pages(usize),
|
||||
Mimetype(BTreeMap<Url, String>),
|
||||
Hover(Option<File>),
|
||||
Peek(usize, Option<Url>),
|
||||
Peek(Option<(usize, Url)>),
|
||||
Preview(PreviewLock),
|
||||
|
||||
// Input
|
||||
|
|
@ -90,10 +90,10 @@ macro_rules! emit {
|
|||
$crate::Event::Hover(Some($file)).emit();
|
||||
};
|
||||
(Peek) => {
|
||||
$crate::Event::Peek(0, None).emit();
|
||||
$crate::Event::Peek(None).emit();
|
||||
};
|
||||
(Peek($skip:expr, $url:expr)) => {
|
||||
$crate::Event::Peek($skip, Some($url)).emit();
|
||||
$crate::Event::Peek(Some(($skip, $url))).emit();
|
||||
};
|
||||
(Preview($lock:expr)) => {
|
||||
$crate::Event::Preview($lock).emit();
|
||||
|
|
|
|||
|
|
@ -71,11 +71,6 @@ impl Manager {
|
|||
}
|
||||
|
||||
let Some(mime) = self.mimetype.get(url).cloned() else {
|
||||
tokio::spawn(async move {
|
||||
if let Ok(mimes) = external::file(&[hovered.url()]).await {
|
||||
emit!(Mimetype(mimes));
|
||||
}
|
||||
});
|
||||
return false;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -129,7 +129,6 @@ impl Preview {
|
|||
}));
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn arrow(&mut self, step: isize) -> bool {
|
||||
let Some(kind) = self.lock.as_ref().map(|l| MimeKind::new(&l.mime)) else {
|
||||
return false;
|
||||
|
|
@ -142,6 +141,15 @@ impl Preview {
|
|||
self.skip != old
|
||||
}
|
||||
|
||||
pub fn arrow_max(&mut self, max: usize) -> bool {
|
||||
if self.skip > max {
|
||||
self.skip = max;
|
||||
return true;
|
||||
}
|
||||
|
||||
false
|
||||
}
|
||||
|
||||
pub fn reset<F: FnOnce(&PreviewLock) -> bool>(&mut self, f: F) -> bool {
|
||||
self.handle.take().map(|h| h.abort());
|
||||
INCR.fetch_add(1, Ordering::Relaxed);
|
||||
|
|
|
|||
|
|
@ -325,16 +325,16 @@ impl Tab {
|
|||
false
|
||||
}
|
||||
|
||||
pub fn update_peek(&mut self, step: isize, url: Option<Url>) -> bool {
|
||||
pub fn update_peek(&mut self, max: usize, url: Url) -> bool {
|
||||
let Some(ref hovered) = self.current.hovered else {
|
||||
return false;
|
||||
};
|
||||
|
||||
if url.as_ref().map(|p| p != hovered.url()) == Some(true) {
|
||||
if &url != hovered.url() {
|
||||
return false;
|
||||
}
|
||||
|
||||
self.preview.arrow(step)
|
||||
self.preview.arrow_max(max)
|
||||
}
|
||||
|
||||
pub fn update_preview(&mut self, lock: PreviewLock) -> bool {
|
||||
|
|
@ -404,6 +404,9 @@ impl Tab {
|
|||
#[inline]
|
||||
pub fn preview_reset_image(&mut self) -> bool { self.preview.reset(|l| l.is_image()) }
|
||||
|
||||
#[inline]
|
||||
pub fn preview_arrow(&mut self, step: isize) -> bool { self.preview.arrow(step) }
|
||||
|
||||
// --- Sorter
|
||||
pub fn set_sorter(&mut self, sorter: FilesSorter) -> bool {
|
||||
if !self.current.files.set_sorter(sorter) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue