summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Hurst <julian.hurst@digdash.com>2025-03-12 10:16:02 +0100
committerJulian Hurst <julian.hurst@digdash.com>2025-03-12 10:16:02 +0100
commit4eeda7244acbc97c2937ecb6768309539e28e35a (patch)
treee3d1fe2f479fd1240597af31ede39c9cf10761cb
parent977f80f4b60983d03d069e11032e9cd15339b6d8 (diff)
downloadhare-tui-4eeda7244acbc97c2937ecb6768309539e28e35a.tar.gz
list: Handle size properly
-rw-r--r--.gitignore1
-rw-r--r--cmd/list.ha1
-rw-r--r--cmd/list_strictsz.ha19
-rw-r--r--tui/widget/list/list.ha13
4 files changed, 33 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index 48d880d..7b990ab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
/text
/list
+/list_strictsz
diff --git a/cmd/list.ha b/cmd/list.ha
index 9a86d23..8729dd9 100644
--- a/cmd/list.ha
+++ b/cmd/list.ha
@@ -2,6 +2,7 @@ use tui;
use tui::layout;
use tui::widget;
use tui::widget::list;
+use unix::tty;
use io;
use fmt;
use time;
diff --git a/cmd/list_strictsz.ha b/cmd/list_strictsz.ha
new file mode 100644
index 0000000..1a7ea1c
--- /dev/null
+++ b/cmd/list_strictsz.ha
@@ -0,0 +1,19 @@
+use tui;
+use tui::layout;
+use tui::widget;
+use tui::widget::list;
+use unix::tty;
+use io;
+use fmt;
+use time;
+
+export fn main() void = {
+ const out = tui::init()!;
+ defer io::close(out)!;
+ let li = list::newlist(out, (1, 1), tty::ttysize {
+ rows = 2,
+ columns = 2,
+ }, "hello", "world")!;
+ let l = layout::newvlayout(&li);
+ l.layout.print(&l);
+};
diff --git a/tui/widget/list/list.ha b/tui/widget/list/list.ha
index a4ec77e..7e60299 100644
--- a/tui/widget/list/list.ha
+++ b/tui/widget/list/list.ha
@@ -52,7 +52,18 @@ export fn printlist(widget: *widget::widget) void = {
const list = widget: *list;
let st = memio::dynamic();
defer io::close(&st)!;
- memio::concat(&st, strings::join("\n", list.items[list.frame.start..list.frame.end]...))!;
+ for (let i = list.frame.start; i < list.frame.end; i += 1) {
+ let item = match (list.widget.sz) {
+ case let sz: tty::ttysize =>
+ yield strings::sub(list.items[i], 0z, sz.columns);
+ case widget::nosize =>
+ yield list.items[i];
+ };
+ memio::concat(&st, item)!;
+ if (i != list.frame.end - 1) {
+ memio::concat(&st, "\n")!;
+ };
+ };
widget::print(list.widget.out, memio::string(&st)!, (1, 1));
};