Crate tui_file_dialog

Source
Expand description

This is a tui-rs extension for a file dialog popup.

§Usage

See the examples directory on how to use this extension. Run

cargo run --example demo

to see it in action.

First, add a file dialog to the TUI app:

use tui_file_dialog::FileDialog;

struct App {
    // Other fields of the App...

    file_dialog: FileDialog
}

If you want to use the default key bindings provided by this crate, just wrap the event handler of your app in the bind_keys! macro.

use tui_file_dialog::bind_keys;

fn run_app<B: Backend>(terminal: &mut Terminal<B>, mut app: App) -> io::Result<()> {
    loop {
        terminal.draw(|f| ui(f, &mut app))?;

        bind_keys!(
            // Expression to use to access the file dialog.
            app.file_dialog,
            // Event handler of the app, when the file dialog is closed.
            if let Event::Key(key) = event::read()? {
                match key.code {
                    KeyCode::Char('q') => {
                        return Ok(());
                    }
                    _ => {}
                }
            }
        )
    }
}

Finally, draw the file dialog:

fn ui<B: Backend>(f: &mut Frame<B>, app: &mut App) {
    // Other UI drawing code...

    app.file_dialog.draw(f);
}

§Limitations

I’ve started this crate with a minimalistic approach and new functionality will be added on a use-case basis. For example, it is currently not possible to add styling to the file dialog and just a boring, minimalist block with a list is used to render it.

Macros§

bind_keys
Macro to automatically overwrite the default key bindings of the app, when the file dialog is open.

Structs§

FileDialog
The file dialog.

Enums§

FilePattern
A pattern that can be used to filter the displayed files.