Something went wrong. Try again.
Measure the width of text in the terminal and build simple layouts!
Something went wrong. Try again.
2.0 kB · 75 lines
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576import gleam/ioimport gleam/listimport string_width.{Left, Size, Top}
const max_width = 49
const tab_width = 2
const left_width = 7
pub fn main() { [ #( "\u{1b}[34mabcde\u{1b}[m", "Nobis sit vel \u{1b}[31mpraesentium\u{1b}[m quod provident hic.\t\tAliquid harum perferendis qui aut occaecati. Itaque veritatis repellat dolor qui. Ullam cum esse ad eos beatae qui suscipit sint. Nam eum similique culpa consectetur vel vel.", ), #("xyz", "12345"), ] |> list.map(with: fn(pair) { let left = pair.0 |> string_width.position(Size(0, left_width), Left, Top, " ")
let right = pair.1 |> string_width.limit( to: Size(500, max_width - tab_width - left_width), ellipsis: "...", ) |> string_width.inline_styles
[left, right] |> string_width.stack_horizontal(place: Top, gap: tab_width, with: " ") }) |> string_width.stack_vertical(align: Left, gap: 1, with: " ") |> io.println // loop(10_000)}
pub fn loop(i) { case i { 0 -> Nil _ -> { [ #( "\u{1b}[34mabcde\u{1b}[m", "Nobis sit vel \u{1b}[31mpraesentium\u{1b}[m quod provident hic.\t\tAliquid harum perferendis qui aut occaecati. Itaque veritatis repellat dolor qui. Ullam cum esse ad eos beatae qui suscipit sint. Nam eum similique culpa consectetur vel vel.", ), #("xyz", "12345"), ] |> list.map(with: fn(pair) { let left = pair.0 |> string_width.position(Size(0, left_width), Left, Top, " ")
let right = pair.1 |> string_width.limit( to: Size(500, max_width - tab_width - left_width), ellipsis: "...", ) |> string_width.inline_styles
string_width.stack_horizontal( [left, right], place: Top, gap: tab_width, with: " ", ) }) |> string_width.stack_vertical(align: Left, gap: 0, with: " ") loop(i - 1) } }}