#文件浏览器 #终端文件 #浏览器 #ratatui #文件 #tui #终端

ratatui-explorer

ratatui-explorer 是为 ratatui 设计的一个小型但高度可定制的文件浏览器小部件

2 个版本

0.1.1 2024 年 2 月 20 日
0.1.0 2024 年 2 月 19 日

#390 in 命令行界面

39 每月下载量
用于 2 crates

MIT 许可证

1.5MB
457 行代码

ratatui-explorer

ratatui-explorer 是为 ratatui 创建文件浏览器的一个简单库。

特性

  • 文件浏览器功能。
  • 输入处理(来自 crosstermtermiontermwiz 和您自己的后端)。
  • 可定制的控件主题。

示例

运行 cargo run --example 以尝试不同的示例。

基本用法

使用 ratatui-explorercrossterm 后端的最简单用法。

cargo run --example basic

basic usage demonstration


浅色和深色主题

运行时切换自定义主题。

cargo run --example light_and_dark_theme

theme switching demonstration


文件预览

根据所选文件调整界面。

cargo run --example file_preview

file preview demonstration

基本用法

在您的 Cargo.toml 文件中安装库

cargo add ratatui ratatui-explorer crossterm

然后在您的 main.rs 文件中

use std::io::{self, stdout};

use crossterm::{
    event::{read, Event, KeyCode},
    terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
    ExecutableCommand,
};
use ratatui::prelude::*;

use ratatui_explorer::{FileExplorer, Theme};

fn main() -> io::Result<()> {
    enable_raw_mode()?;
    stdout().execute(EnterAlternateScreen)?;

    let mut terminal = Terminal::new(CrosstermBackend::new(stdout()))?;

    // Create a new file explorer with the default theme and title.
    let theme = Theme::default().add_default_title();
    let mut file_explorer = FileExplorer::with_theme(theme)?;

    loop {
        // Render the file explorer widget.
        terminal.draw(|f| {
            f.render_widget(&file_explorer.widget(), f.size());
        })?;

        // Read the next event from the terminal.
        let event = read()?;
        if let Event::Key(key) = event {
            if key.code == KeyCode::Char('q') {
                break;
            }
        }
        // Handle the event in the file explorer.
        file_explorer.handle(&event)?;
    }

    disable_raw_mode()?;
    stdout().execute(LeaveAlternateScreen)?;
    Ok(())
}

自定义主题

您可以使用 Theme 结构体来自定义文件浏览器小部件的主题。

use ratatui::{prelude::*, widgets::*};
use ratatui_explorer::Theme;

let theme = Theme::default()
    .add_default_title()
    .with_title_bottom(|fe| format!("[{} files]", fe.files().len()).into())
    .with_block(Block::default().borders(Borders::ALL).border_type(BorderType::Rounded))
    .with_highlight_item_style(Style::default().fg(Color::Yellow).add_modifier(Modifier::BOLD))
    .with_highlight_dir_style(Style::default().fg(Color::Red).add_modifier(Modifier::BOLD))
    .with_highlight_symbol("> ".into());

绑定

以下绑定默认用于 crosstermtermiontermwiz

绑定 动作
j<DownArrow> 向下移动选择
k<UpArrow> 向上移动选择
h<向左箭头><退格> 转到父目录
l<向右箭头><回车> 转到子目录*

*如果选中的项目是目录

依赖项

~6-19MB
~267K SLoC