#vim #read-line #emacs #modal #user-input

scansion

一个具有 Vim 和 Emacs 键绑定的 readline 风格库

1 个不稳定版本

0.0.1 2024年2月1日

#14 in #readline

Apache-2.0

1MB
27K SLoC

scansion

Build Status License: Apache 2.0 Latest Version Docs Status

关于

这是一个 readline 风格的 crate,包括对 Vim 和 Emacs 键绑定的支持。

用法

此 crate 在 crates.io 上,可以通过在项目的 Cargo.toml 中的依赖项中添加 scansion 来使用。

[dependencies]
scansion = "0.0.1"

许可证

scansionApache 许可证,版本 2.0 下发布。


lib.rs:

Readline 风格编辑器

概述

此模块提供了一个 readline 风格的编辑器,用于获取用户输入。它旨在与任何 [BindingMachine] 实现者协同工作,该实现者将输入映射到 [Action]。

示例

use modalkit::{
    env::vim::keybindings::{VimBindings, VimMachine},
    keybindings::InputBindings,
    key::TerminalKey,
};
use scansion::{ReadLine, ReadLineInfo};

fn main() -> Result<(), std::io::Error> {
    let mut vi = VimMachine::<TerminalKey, ReadLineInfo>::empty();
    VimBindings::default().submit_on_enter().setup(&mut vi);

    let mut rl = ReadLine::new(vi)?;

    loop {
        match rl.readline(Some("> ".to_string())) {
            Ok(s) => match s.trim() {
                "q" | "quit" => {
                    return Ok(());
                },
                _ => {
                    println!("User typed: {:?}", s);
                }
            },
            Err(e) => {
                // Print out editor error messages.
                println!("{}", e);
            },
        }
    }
}

依赖项

~6–21MB
~254K SLoC