[Fork] A Text User Interface library for the Rust programming language
Go to file
Alexandre Bury 1656cdd8f6 Add Align property to TextView
Can change its horizontal and vertical alignment for when the allocated
size is bigger than the requirements.
2015-06-01 19:43:15 -07:00
assets Add scrolling to SelectView 2015-05-31 16:38:53 -07:00
doc Add demo image 2015-05-24 14:03:32 -07:00
examples Update examples for focusless draw 2015-06-01 09:20:06 -07:00
src Add Align property to TextView 2015-06-01 19:43:15 -07:00
.gitignore Add tags & ctags to gitignore 2015-05-20 16:21:44 -07:00
Cargo.toml Rename ListView -> SelectView 2015-05-30 21:32:24 -07:00
LICENSE Add license 2015-05-22 00:25:59 -07:00
Readme.md Update readme 2015-05-31 23:06:27 -07:00

Cursive

Cursive is a ncurses-based TUI (Text User Interface) library for rust. It is based on jeaye's ncurses-rs.

It is designed to be safe and easy to use:

[dependencies.cursive]
git = "https://github.com/Gyscos/cursive"
extern crate cursive;

use cursive::Cursive;
use cursive::view::{Dialog,TextView};

fn main() {
	// Creates the cursive root - required for every application.
    let mut siv = Cursive::new();

    // Create a popup window with a button that quits the application
    siv.add_layer(Dialog::new(TextView::new("Hello Dialog!"))
                    .title("Cursive")
                    .button("Quit", |s| s.quit()));

    // Starts the event loop.
    siv.run();
}

Cursive dialog example

(Colors may depend on your terminal configuration.)

The goal is to be flexible enough, so that recreating these kind of tools would be - relatively - easy (at least on the layout front):

A few notes :

  • The main focus point is not performance. This is a simple layout library, guys, not compiz piped into libcaca. Unless you are running it on your microwave's microcontroller, it's not going to be slow.
  • The library is single-threaded. Thus, callback methods are blocking - careful what you're doing in there! Feel free to use threads on your side, though.
  • This goal is not to have an equivalent to every ncurses function. You can access the underlying ncurses window when creating your own custom views, so you can do what you want with that, but the main library will probably only use a subset of the ncurses features.

Contribute

You want to help? Great! Here is a non-exhaustive list of things you could do:

  • Provide example use-case: a good idea of application for existing or new components.
  • Test and reports issues: a bug won't get fixed if we don't know it's there.
  • Hack the code! If you feel confident with rust, pick an issue you like and hack away!