#dmenu #menu #ui

nightly dm_x

一个用于将dmenu用作选项选择器的库

4个版本

0.2.3 2022年6月21日
0.2.1 2022年6月15日
0.2.0 2022年6月15日
0.1.1 2022年6月14日
0.1.0 2022年6月13日

GUI中排名第598

MIT许可证

19KB
308

dm_x

dm_x是一个Rust crate,用于使用dmenu,这是一个键盘驱动的菜单,最初是为与平铺窗口管理器一起使用而编写的。

使用此crate需要为您自己的类型实现Item trait,然后将这些项的切片传递给Dmx::select()方法。

Item已经为&str实现,所以以下应该可以工作

let choices: &[&str] = &[
    "Choice A",
    "Choice B",
    "Choice C",
    "Both A and B",
    "Both B and C",
    "All Three",
    "None of the Above",
];

let dmx = Dmx::default();

match dmx.select("Pick One:", choices).unwrap() {
    None => {
        println!("You declined to select an option.");
    },
    Some(n) => match choices.get(n) {
        None => {
            println!("You somehow chose an invalid choice.");
        },
        Some(choice) => {
            println!("You chose \"{}\".", choice);
        }
    }
}

请参阅examples/中的Item的非平凡实现。


lib.rs:

dm_x是一个库,用于方便地使用dmenu让用户从选项列表中选择。

dmenu是一个非常好的键盘驱动环境工具,因为它允许用户以比点击列表中的项目或从下拉菜单中选择更快、更方便的方式选择选项。这个小型库在使用此工具时提供了以下三个功能

  • dmenu交互的方便方式——无论是提供选项还是报告哪个被选中。
  • dmenu提供的选项的文本与其程序功能分开。
  • 向用户提供易于输入的助记符以及更详细的选项文本(这两者都与特定选项的功能不同)。

显然,您需要安装dmenu(以及一个可以运行它的系统)。

static REGRESSION_TYPES: &[(&str, &str)] = &[
("linear", "Linear Regression"),
("p2", "Quadratic Regression"),
("p3", "Cubic Regression"),
("log", "Logistic Regression"),
("ln", "Logarithmic Regression"),
("sin", "Sinusoidal Regression")
];

let dmx = Dmx::default();

match dmx.select("method:", REGRESSION_TYPES).unwrap() {
Some(n) => {
println!("{}", REGRESSION_TYPES[n].1);
},
None => {
println!("No regression type chosen.");
},
}

特性

dm_x有一个可选功能config,它提供从某些.toml文件反序列化Dmx配置的能力。这涉及到了serde(以及toml),这对于其他依赖项(除了dmenu二进制文件)来说是一个相当大的依赖项(因此有功能门)。

#[cfg(feature = "config")]
{
const CHOICES: &[(&str, &str)] = &[
("frog", "a Fire-Breathing, Blue-Winged Frog"),
("toad", "a Acid-Blooded, Orange-Eyed Toad"),
("cat", "a Psychic Cat (Can Kill You With Its Mind)"),
("rat", "a Venom-Fanged Skaven Warlock"),
("dog", "Just a Regular Border Collie")
];

let dmx = Dmx::from_file("test/dmx_conf.toml").unwrap();

match dmx.select("->", CHOICES).unwrap() {
None => {
println!("You have chosen to adventure alone.");
},
Some(n) => {
println!("You will be accompanied by {}", CHOICES[n].1);
}
}
}

查看包含的"test/dmx_conf.toml"文件应该会使所需的格式相当明显;所有值都是可选的(默认为Dmx::default()提供的值),并且应该与dmenu作为参数期望它们一样。

文件 "test/dmx_conf.toml"

dmenu     = "/usr/bin/dmenu"
font      = "Terminus-12"
normal_bg = "#88cccc"
normal_fg = "#422"
select_bg = "#422"
select_fg = "#88cccc"

依赖项

~205KB