mirror of
https://github.com/sxyazi/yazi.git
synced 2026-05-13 08:16:40 +00:00
feat: new ui.Text:scroll() API for setting text to scroll horizontally or vertically (#2589)
This commit is contained in:
parent
2e1156f267
commit
86f465902e
5 changed files with 36 additions and 24 deletions
32
Cargo.lock
generated
32
Cargo.lock
generated
|
|
@ -328,9 +328,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.2.17"
|
||||
version = "1.2.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a"
|
||||
checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c"
|
||||
dependencies = [
|
||||
"jobserver",
|
||||
"libc",
|
||||
|
|
@ -620,9 +620,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "deranged"
|
||||
version = "0.4.1"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "28cfac68e08048ae1883171632c2aef3ebc555621ae56fbccce1cbf22dd7f058"
|
||||
checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
|
||||
dependencies = [
|
||||
"powerfmt",
|
||||
]
|
||||
|
|
@ -991,9 +991,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "half"
|
||||
version = "2.5.0"
|
||||
version = "2.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7db2ff139bba50379da6aa0766b52fdcb62cb5b263009b09ed58ba604e14bbd1"
|
||||
checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"crunchy",
|
||||
|
|
@ -1085,9 +1085,9 @@ checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408"
|
|||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.8.0"
|
||||
version = "2.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058"
|
||||
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown",
|
||||
|
|
@ -1964,9 +1964,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.5.10"
|
||||
version = "0.5.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
|
||||
checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3"
|
||||
dependencies = [
|
||||
"bitflags 2.9.0",
|
||||
]
|
||||
|
|
@ -2239,9 +2239,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.14.0"
|
||||
version = "1.15.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
|
||||
checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
|
||||
|
||||
[[package]]
|
||||
name = "smawk"
|
||||
|
|
@ -2460,9 +2460,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.44.1"
|
||||
version = "1.44.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a"
|
||||
checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"bytes",
|
||||
|
|
@ -3116,9 +3116,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
|||
|
||||
[[package]]
|
||||
name = "winnow"
|
||||
version = "0.7.4"
|
||||
version = "0.7.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36"
|
||||
checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ dirs = "6.0.0"
|
|||
foldhash = "0.1.5"
|
||||
futures = "0.3.31"
|
||||
globset = "0.4.16"
|
||||
indexmap = { version = "2.8.0", features = [ "serde" ] }
|
||||
indexmap = { version = "2.9.0", features = [ "serde" ] }
|
||||
libc = "0.2.171"
|
||||
lru = "0.13.0"
|
||||
md-5 = "0.10.6"
|
||||
|
|
@ -39,7 +39,7 @@ scopeguard = "1.2.0"
|
|||
serde = { version = "1.0.219", features = [ "derive" ] }
|
||||
serde_json = "1.0.140"
|
||||
syntect = { version = "5.2.0", default-features = false, features = [ "parsing", "plist-load", "regex-onig" ] }
|
||||
tokio = { version = "1.44.1", features = [ "full" ] }
|
||||
tokio = { version = "1.44.2", features = [ "full" ] }
|
||||
tokio-stream = "0.1.17"
|
||||
tokio-util = "0.7.14"
|
||||
toml = { version = "0.8.20" }
|
||||
|
|
|
|||
|
|
@ -2,7 +2,14 @@ use std::{env, error::Error};
|
|||
|
||||
fn main() -> Result<(), Box<dyn Error>> {
|
||||
let dir = env::var("OUT_DIR").unwrap();
|
||||
if dir.contains("\\target\\release\\build\\yazi-fm-") {
|
||||
|
||||
// cargo build
|
||||
// C:\Users\Ika\Desktop\yazi\target\release\build\yazi-fm-cfc94820f71daa30\out
|
||||
// cargo install
|
||||
// C:\Users\Ika\AppData\Local\Temp\cargo-installTFU8cj\release\build\
|
||||
// yazi-fm-45dffef2500eecd0\out
|
||||
|
||||
if dir.contains("\\release\\build\\yazi-fm-") {
|
||||
panic!(
|
||||
"Unwinding must be enabled for Windows. Please use `cargo build --profile release-windows --locked` instead to build Yazi."
|
||||
);
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@ pub struct Text {
|
|||
pub area: Area,
|
||||
|
||||
// TODO: block
|
||||
pub inner: ratatui::text::Text<'static>,
|
||||
pub wrap: u8,
|
||||
// TODO: scroll
|
||||
pub inner: ratatui::text::Text<'static>,
|
||||
pub wrap: u8,
|
||||
pub scroll: ratatui::layout::Position,
|
||||
}
|
||||
|
||||
impl Text {
|
||||
|
|
@ -58,7 +58,7 @@ impl Text {
|
|||
trans: impl Fn(yazi_config::popup::Position) -> ratatui::layout::Rect,
|
||||
) {
|
||||
let rect = self.area.transform(trans);
|
||||
if self.wrap == WRAP_NO {
|
||||
if self.wrap == WRAP_NO && self.scroll == Default::default() {
|
||||
self.inner.render(rect, buf);
|
||||
} else {
|
||||
ratatui::widgets::Paragraph::from(self).render(rect, buf);
|
||||
|
|
@ -130,7 +130,7 @@ impl From<Text> for ratatui::widgets::Paragraph<'static> {
|
|||
if value.wrap != WRAP_NO {
|
||||
p = p.wrap(ratatui::widgets::Wrap { trim: value.wrap == WRAP_TRIM });
|
||||
}
|
||||
p
|
||||
p.scroll((value.scroll.y, value.scroll.x))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -155,6 +155,10 @@ impl UserData for Text {
|
|||
};
|
||||
Ok(ud)
|
||||
});
|
||||
methods.add_function_mut("scroll", |_, (ud, x, y): (AnyUserData, u16, u16)| {
|
||||
ud.borrow_mut::<Self>()?.scroll = ratatui::layout::Position { x, y };
|
||||
Ok(ud)
|
||||
});
|
||||
methods.add_method("max_width", |_, me, ()| {
|
||||
Ok(me.inner.lines.iter().take(me.area.size().height as usize).map(|l| l.width()).max())
|
||||
});
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ impl Utils {
|
|||
area,
|
||||
inner,
|
||||
wrap: if YAZI.preview.wrap == PreviewWrap::Yes { WRAP } else { WRAP_NO },
|
||||
scroll: Default::default(),
|
||||
})];
|
||||
|
||||
emit!(Call(Cmd::new("mgr:update_peeked").with_any("lock", lock)));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue