ratatui_ruby 1.4.1-arm64-darwin-24 → 1.4.2-arm64-darwin-24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/ratatui_ruby/Cargo.lock +6 -13
- data/ext/ratatui_ruby/Cargo.toml +1 -2
- data/ext/ratatui_ruby/src/color.rs +1 -1
- data/ext/ratatui_ruby/src/errors.rs +1 -1
- data/ext/ratatui_ruby/src/events.rs +1 -1
- data/ext/ratatui_ruby/src/frame.rs +1 -1
- data/ext/ratatui_ruby/src/lib.rs +1 -1
- data/ext/ratatui_ruby/src/lib_header.rs +1 -1
- data/ext/ratatui_ruby/src/rendering.rs +1 -1
- data/ext/ratatui_ruby/src/string_width.rs +7 -82
- data/ext/ratatui_ruby/src/style.rs +1 -1
- data/ext/ratatui_ruby/src/terminal/capabilities.rs +1 -1
- data/ext/ratatui_ruby/src/terminal/init.rs +1 -1
- data/ext/ratatui_ruby/src/terminal/mod.rs +1 -1
- data/ext/ratatui_ruby/src/terminal/mutations.rs +1 -1
- data/ext/ratatui_ruby/src/terminal/queries.rs +20 -2
- data/ext/ratatui_ruby/src/terminal/query.rs +1 -1
- data/ext/ratatui_ruby/src/terminal/storage.rs +1 -1
- data/ext/ratatui_ruby/src/terminal/wrapper.rs +1 -1
- data/ext/ratatui_ruby/src/text.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/barchart.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/block.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/calendar.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/canvas.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/center.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/chart.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/clear.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/cursor.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/gauge.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/layout.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/line_gauge.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/list.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/list_state.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/mod.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/overlay.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/paragraph.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/ratatui_logo.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/ratatui_mascot.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/scrollbar.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/scrollbar_state.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/sparkline.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/table.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/table_state.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/tabs.rs +1 -1
- data/lib/ratatui_ruby/3.2/ratatui_ruby.bundle +0 -0
- data/lib/ratatui_ruby/3.3/ratatui_ruby.bundle +0 -0
- data/lib/ratatui_ruby/3.4/ratatui_ruby.bundle +0 -0
- data/lib/ratatui_ruby/4.0/ratatui_ruby.bundle +0 -0
- data/lib/ratatui_ruby/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a452fa16dc591f2aaad8f2a52b387f7b2dd3b13b5a5296b0f3e0f35a1a93ed3f
|
|
4
|
+
data.tar.gz: 8e1411a2f0aee0158317e94c7ff8eefe91773cc3c00273f8285f71ba93764c69
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 582e7c111172d1f6cb0fcae59a363f4f8644e4d3213a897b6a960f5091b61973ee2650670a19e7522a7b2969d328b8b61b319b11e6afd12b802d3867e26d4d3c
|
|
7
|
+
data.tar.gz: 3a5c4e4aacb56531401a5dd6f28afac5e395570fc1f0cdd9c320f970d4f7ee81150318ae82e959a2b69f3319e8144ac7af51748fed61032f02d49499caf18835
|
data/ext/ratatui_ruby/Cargo.lock
CHANGED
|
@@ -1003,7 +1003,7 @@ dependencies = [
|
|
|
1003
1003
|
"thiserror 2.0.17",
|
|
1004
1004
|
"unicode-segmentation",
|
|
1005
1005
|
"unicode-truncate",
|
|
1006
|
-
"unicode-width
|
|
1006
|
+
"unicode-width",
|
|
1007
1007
|
]
|
|
1008
1008
|
|
|
1009
1009
|
[[package]]
|
|
@@ -1054,12 +1054,12 @@ dependencies = [
|
|
|
1054
1054
|
"strum",
|
|
1055
1055
|
"time",
|
|
1056
1056
|
"unicode-segmentation",
|
|
1057
|
-
"unicode-width
|
|
1057
|
+
"unicode-width",
|
|
1058
1058
|
]
|
|
1059
1059
|
|
|
1060
1060
|
[[package]]
|
|
1061
1061
|
name = "ratatui_ruby"
|
|
1062
|
-
version = "1.4.
|
|
1062
|
+
version = "1.4.2"
|
|
1063
1063
|
dependencies = [
|
|
1064
1064
|
"bumpalo",
|
|
1065
1065
|
"lazy_static",
|
|
@@ -1067,7 +1067,6 @@ dependencies = [
|
|
|
1067
1067
|
"ratatui",
|
|
1068
1068
|
"rb-sys",
|
|
1069
1069
|
"time",
|
|
1070
|
-
"unicode-width 0.1.14",
|
|
1071
1070
|
]
|
|
1072
1071
|
|
|
1073
1072
|
[[package]]
|
|
@@ -1513,20 +1512,14 @@ checksum = "8fbf03860ff438702f3910ca5f28f8dac63c1c11e7efb5012b8b175493606330"
|
|
|
1513
1512
|
dependencies = [
|
|
1514
1513
|
"itertools 0.13.0",
|
|
1515
1514
|
"unicode-segmentation",
|
|
1516
|
-
"unicode-width
|
|
1515
|
+
"unicode-width",
|
|
1517
1516
|
]
|
|
1518
1517
|
|
|
1519
1518
|
[[package]]
|
|
1520
1519
|
name = "unicode-width"
|
|
1521
|
-
version = "0.
|
|
1522
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1523
|
-
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
|
|
1524
|
-
|
|
1525
|
-
[[package]]
|
|
1526
|
-
name = "unicode-width"
|
|
1527
|
-
version = "0.2.0"
|
|
1520
|
+
version = "0.2.2"
|
|
1528
1521
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1529
|
-
checksum = "
|
|
1522
|
+
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
|
|
1530
1523
|
|
|
1531
1524
|
[[package]]
|
|
1532
1525
|
name = "utf8parse"
|
data/ext/ratatui_ruby/Cargo.toml
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
[package]
|
|
5
5
|
name = "ratatui_ruby"
|
|
6
|
-
version = "1.4.
|
|
6
|
+
version = "1.4.2"
|
|
7
7
|
edition = "2021"
|
|
8
8
|
|
|
9
9
|
[lib]
|
|
@@ -13,7 +13,6 @@ crate-type = ["cdylib", "staticlib"]
|
|
|
13
13
|
magnus = "0.8.2"
|
|
14
14
|
rb-sys = "*"
|
|
15
15
|
ratatui = { version = "0.30", features = ["widget-calendar", "layout-cache", "unstable-rendered-line-info", "palette"] }
|
|
16
|
-
unicode-width = "0.1"
|
|
17
16
|
|
|
18
17
|
bumpalo = "3.16"
|
|
19
18
|
lazy_static = "1.4"
|
data/ext/ratatui_ruby/src/lib.rs
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
-
// SPDX-License-Identifier:
|
|
2
|
+
// SPDX-License-Identifier: LGPL-3.0-or-later
|
|
3
3
|
|
|
4
4
|
use magnus::{prelude::*, Error, Value};
|
|
5
|
+
use ratatui::text::Text;
|
|
5
6
|
|
|
6
7
|
/// Calculate the display width of a string in terminal cells.
|
|
7
8
|
///
|
|
8
|
-
///
|
|
9
|
-
///
|
|
10
|
-
///
|
|
11
|
-
/// - Emoji: typically 2 cells each (varies by terminal)
|
|
12
|
-
/// - Combining marks and zero-width characters: 0 cells
|
|
13
|
-
///
|
|
14
|
-
/// This uses the same `unicode-width` crate that Ratatui uses internally.
|
|
9
|
+
/// Delegates to Ratatui's own `Text::width()`, which uses `unicode-width`
|
|
10
|
+
/// internally. This guarantees the width we report to Ruby matches the
|
|
11
|
+
/// width Ratatui uses when laying out widgets like Table highlight symbols.
|
|
15
12
|
///
|
|
16
13
|
/// Returns the total display width in cells (not bytes or characters).
|
|
17
14
|
pub fn text_width(string: Value) -> Result<usize, Error> {
|
|
@@ -24,78 +21,6 @@ pub fn text_width(string: Value) -> Result<usize, Error> {
|
|
|
24
21
|
)
|
|
25
22
|
})?;
|
|
26
23
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
let width = s
|
|
30
|
-
.chars()
|
|
31
|
-
.map(|c| unicode_width::UnicodeWidthChar::width(c).unwrap_or(0))
|
|
32
|
-
.sum();
|
|
33
|
-
|
|
34
|
-
Ok(width)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
#[cfg(test)]
|
|
38
|
-
mod tests {
|
|
39
|
-
use unicode_width::UnicodeWidthChar;
|
|
40
|
-
|
|
41
|
-
fn measure_width(s: &str) -> usize {
|
|
42
|
-
s.chars()
|
|
43
|
-
.map(|c| UnicodeWidthChar::width(c).unwrap_or(0))
|
|
44
|
-
.sum()
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
#[test]
|
|
48
|
-
fn test_ascii_width() {
|
|
49
|
-
// ASCII is 1 cell per character
|
|
50
|
-
assert_eq!(measure_width("hello"), 5);
|
|
51
|
-
assert_eq!(measure_width("Hello, World!"), 13);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
#[test]
|
|
55
|
-
fn test_emoji_width() {
|
|
56
|
-
// Emoji typically take 2 cells
|
|
57
|
-
// 👍 is U+1F44D THUMBS UP SIGN, width 2
|
|
58
|
-
assert_eq!(measure_width("👍"), 2);
|
|
59
|
-
// 🌍 is U+1F30D EARTH GLOBE EUROPE-AFRICA, width 2
|
|
60
|
-
assert_eq!(measure_width("🌍"), 2);
|
|
61
|
-
// "Hello 👍" = 5 + 1 + 2 = 8
|
|
62
|
-
assert_eq!(measure_width("Hello 👍"), 8);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
#[test]
|
|
66
|
-
fn test_cjk_width() {
|
|
67
|
-
// CJK characters are full-width, 2 cells each
|
|
68
|
-
// 你 (U+4F60) is width 2
|
|
69
|
-
assert_eq!(measure_width("你"), 2);
|
|
70
|
-
// 好 (U+597D) is width 2
|
|
71
|
-
assert_eq!(measure_width("好"), 2);
|
|
72
|
-
// "你好" should be 4
|
|
73
|
-
assert_eq!(measure_width("你好"), 4);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
#[test]
|
|
77
|
-
fn test_mixed_width() {
|
|
78
|
-
// "a你b好" = 1 + 2 + 1 + 2 = 6
|
|
79
|
-
assert_eq!(measure_width("a你b好"), 6);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
#[test]
|
|
83
|
-
fn test_empty_string() {
|
|
84
|
-
assert_eq!(measure_width(""), 0);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
#[test]
|
|
88
|
-
fn test_spaces_and_punctuation() {
|
|
89
|
-
// Regular ASCII space and punctuation are 1 cell each
|
|
90
|
-
assert_eq!(measure_width("a b c"), 5);
|
|
91
|
-
assert_eq!(measure_width("!!!"), 3);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
#[test]
|
|
95
|
-
fn test_combining_marks() {
|
|
96
|
-
// Zero-width marks don't add to width
|
|
97
|
-
// "a" + combining acute accent (U+0301)
|
|
98
|
-
let combining = "a\u{0301}";
|
|
99
|
-
assert_eq!(measure_width(combining), 1);
|
|
100
|
-
}
|
|
24
|
+
let text = Text::raw(&s);
|
|
25
|
+
Ok(text.width())
|
|
101
26
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
-
// SPDX-License-Identifier:
|
|
2
|
+
// SPDX-License-Identifier: LGPL-3.0-or-later
|
|
3
3
|
|
|
4
4
|
//! Terminal query functions (read-only access to terminal state).
|
|
5
5
|
|
|
@@ -18,10 +18,28 @@ pub fn get_buffer_content() -> Result<String, Error> {
|
|
|
18
18
|
let area = buffer.area;
|
|
19
19
|
let mut result = String::new();
|
|
20
20
|
for y in 0..area.height {
|
|
21
|
+
// SPDX-SnippetBegin
|
|
22
|
+
// SPDX-License-Identifier: MIT
|
|
23
|
+
// SPDX-SnippetCopyrightText: The Ratatui Developers
|
|
24
|
+
// Derived from ratatui-core/src/buffer/buffer.rs (Buffer Debug impl)
|
|
25
|
+
let mut skip: usize = 0;
|
|
21
26
|
for x in 0..area.width {
|
|
27
|
+
if skip > 0 {
|
|
28
|
+
skip -= 1;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
22
31
|
let cell = buffer.cell((x, y)).unwrap();
|
|
23
|
-
|
|
32
|
+
let symbol = cell.symbol();
|
|
33
|
+
result.push_str(symbol);
|
|
34
|
+
// Skip continuation cells after wide characters (e.g. emoji, CJK).
|
|
35
|
+
// Ratatui's set_stringn resets these to " ", but they don't represent
|
|
36
|
+
// an additional display column — the preceding wide symbol covers them.
|
|
37
|
+
let width = ratatui::text::Text::raw(symbol).width();
|
|
38
|
+
if width > 1 {
|
|
39
|
+
skip = width - 1;
|
|
40
|
+
}
|
|
24
41
|
}
|
|
42
|
+
// SPDX-SnippetEnd
|
|
25
43
|
result.push('\n');
|
|
26
44
|
}
|
|
27
45
|
Ok(result)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
2
|
-
// SPDX-License-Identifier:
|
|
2
|
+
// SPDX-License-Identifier: LGPL-3.0-or-later
|
|
3
3
|
|
|
4
4
|
use crate::style::{parse_bar_set, parse_block, parse_style};
|
|
5
5
|
use crate::text::{parse_line, parse_span};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/lib/ratatui_ruby/version.rb
CHANGED