Giter VIP home page Giter VIP logo

Comments (4)

RazrFalcon avatar RazrFalcon commented on May 29, 2024 1

Also, it would be great if a table can be fit to the terminal window by specifying columns that can be shrunk.

from prettytable-rs.

phsym avatar phsym commented on May 29, 2024

That would be great. I'll try to find some time to implement this, unless someone wants to do it.

from prettytable-rs.

h4llow3En avatar h4llow3En commented on May 29, 2024

Optional there could be inserted a \n to make a multiline entry if the length is exceeded. This could be default for the terminal width

from prettytable-rs.

AlexanderThaller avatar AlexanderThaller commented on May 29, 2024

I kinda worked around it with the help of textwrap and unicode_width:

[package]
name = "textwrap_prettytable"
version = "0.1.0"
authors = ["Alexander Thaller <[email protected]>"]

[dependencies]
prettytable-rs = "0.7"
unicode-width = "0.1"

[dependencies.textwrap]
version = "0.10"
features = ["term_size"]
#[macro_use]
extern crate prettytable;
extern crate textwrap;
extern crate unicode_width;

use prettytable::{
    format,
    Table,
};
use unicode_width::UnicodeWidthStr;

fn main() {
    let entries = vec![
        ("first", "first description"),
        ("second", "second description"),
        (
            "third",
            "third description which is a bit longer than usual and probably has to be wrapped. \
             if not it should also be fine.",
        ),
        (
            "fourth",
            "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam felis risus, faucibus \
             a accumsan a, blandit in sem. Ut venenatis vulputate ante, in volutpat mi pharetra \
             non.",
        ),
    ];

    // We are gonna get the width the description should be wrapped with by getting
    // the largest name and substracting that from the terminal width.
    let description_width = {
        let mut max_realm_width = 0;
        for (name, _) in &entries {
            // Width of the string largest string + surrounding formatting
            // Something like this
            // this is a name | The description of the name.
            let width = UnicodeWidthStr::width(format!(" {} |  ", name).as_str());

            if max_realm_width < width {
                max_realm_width = width
            }
        }

        let termwidth = textwrap::termwidth();
        termwidth - max_realm_width
    };

    let mut table = Table::new();
    table.set_format(*format::consts::FORMAT_NO_BORDER_LINE_SEPARATOR);
    table.add_row(row![b -> "Name", b -> "Description"]);

    for (name, description) in &entries {
        table.add_row(row![name, textwrap::fill(description, description_width),]);
    }

    table.printstd();
}

from prettytable-rs.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.