Skip to content

Commit a9c693e

Browse files
committed
feat: new ui.Text:scroll() API for setting text to scroll horizontally or vertically (#2589)
1 parent 2e1156f commit a9c693e

File tree

5 files changed

+38
-24
lines changed

5 files changed

+38
-24
lines changed

Diff for: Cargo.lock

+16-16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ dirs = "6.0.0"
2525
foldhash = "0.1.5"
2626
futures = "0.3.31"
2727
globset = "0.4.16"
28-
indexmap = { version = "2.8.0", features = [ "serde" ] }
28+
indexmap = { version = "2.9.0", features = [ "serde" ] }
2929
libc = "0.2.171"
3030
lru = "0.13.0"
3131
md-5 = "0.10.6"
@@ -39,7 +39,7 @@ scopeguard = "1.2.0"
3939
serde = { version = "1.0.219", features = [ "derive" ] }
4040
serde_json = "1.0.140"
4141
syntect = { version = "5.2.0", default-features = false, features = [ "parsing", "plist-load", "regex-onig" ] }
42-
tokio = { version = "1.44.1", features = [ "full" ] }
42+
tokio = { version = "1.44.2", features = [ "full" ] }
4343
tokio-stream = "0.1.17"
4444
tokio-util = "0.7.14"
4545
toml = { version = "0.8.20" }

Diff for: yazi-fm/build.rs

+10-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,16 @@ use std::{env, error::Error};
22

33
fn main() -> Result<(), Box<dyn Error>> {
44
let dir = env::var("OUT_DIR").unwrap();
5-
if dir.contains("\\target\\release\\build\\yazi-fm-") {
5+
6+
#[rustfmt::skip]
7+
{
8+
// cargo build
9+
// C:\Users\Ika\Desktop\yazi\target\release\build\yazi-fm-cfc94820f71daa30\out
10+
// cargo install
11+
// C:\Users\Ika\AppData\Local\Temp\cargo-installTFU8cj\release\build\yazi-fm-45dffef2500eecd0\out
12+
}
13+
14+
if dir.contains("\\release\\build\\yazi-fm-") {
615
panic!(
716
"Unwinding must be enabled for Windows. Please use `cargo build --profile release-windows --locked` instead to build Yazi."
817
);

Diff for: yazi-plugin/src/elements/text.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ pub struct Text {
2323
pub area: Area,
2424

2525
// TODO: block
26-
pub inner: ratatui::text::Text<'static>,
27-
pub wrap: u8,
28-
// TODO: scroll
26+
pub inner: ratatui::text::Text<'static>,
27+
pub wrap: u8,
28+
pub scroll: ratatui::layout::Position,
2929
}
3030

3131
impl Text {
@@ -58,7 +58,7 @@ impl Text {
5858
trans: impl Fn(yazi_config::popup::Position) -> ratatui::layout::Rect,
5959
) {
6060
let rect = self.area.transform(trans);
61-
if self.wrap == WRAP_NO {
61+
if self.wrap == WRAP_NO && self.scroll == Default::default() {
6262
self.inner.render(rect, buf);
6363
} else {
6464
ratatui::widgets::Paragraph::from(self).render(rect, buf);
@@ -130,7 +130,7 @@ impl From<Text> for ratatui::widgets::Paragraph<'static> {
130130
if value.wrap != WRAP_NO {
131131
p = p.wrap(ratatui::widgets::Wrap { trim: value.wrap == WRAP_TRIM });
132132
}
133-
p
133+
p.scroll((value.scroll.y, value.scroll.x))
134134
}
135135
}
136136

@@ -155,6 +155,10 @@ impl UserData for Text {
155155
};
156156
Ok(ud)
157157
});
158+
methods.add_function_mut("scroll", |_, (ud, x, y): (AnyUserData, u16, u16)| {
159+
ud.borrow_mut::<Self>()?.scroll = ratatui::layout::Position { x, y };
160+
Ok(ud)
161+
});
158162
methods.add_method("max_width", |_, me, ()| {
159163
Ok(me.inner.lines.iter().take(me.area.size().height as usize).map(|l| l.width()).max())
160164
});

Diff for: yazi-plugin/src/utils/preview.rs

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ impl Utils {
5252
area,
5353
inner,
5454
wrap: if YAZI.preview.wrap == PreviewWrap::Yes { WRAP } else { WRAP_NO },
55+
scroll: Default::default(),
5556
})];
5657

5758
emit!(Call(Cmd::new("mgr:update_peeked").with_any("lock", lock)));

0 commit comments

Comments
 (0)