#mode #rofi #plugin #api-bindings #events

rofi-mode

创建Rofi插件和自定义模式的 高级库

10个版本

0.4.0 2024年2月26日
0.3.1 2023年7月10日
0.3.0 2023年5月5日
0.2.4 2022年7月27日
0.1.1 2022年4月11日

#2 in #rofi

Download history 38/week @ 2024-03-13 7/week @ 2024-03-20 16/week @ 2024-03-27 46/week @ 2024-04-03 13/week @ 2024-04-10 14/week @ 2024-04-17 16/week @ 2024-04-24 10/week @ 2024-05-01 22/week @ 2024-05-08 31/week @ 2024-05-15 18/week @ 2024-05-22 23/week @ 2024-05-29 23/week @ 2024-06-05 23/week @ 2024-06-12 26/week @ 2024-06-19 19/week @ 2024-06-26

每月93次下载

MIT许可证

55KB
1K SLoC

rofi-mode

crates.io License

创建Rofi插件和自定义模式的高级Rust库

入门指南

首先,使用 cargo new --lib my_awesome_plugin 创建一个新的库,并在 Cargo.toml 中添加以下行

[lib]
crate-type = ["cdylib"]

这将强制Cargo将您的库生成为一个 .so 文件,这是Rofi从其中加载插件的文件。

然后,使用以下命令将此crate作为依赖项添加

cargo add rofi-mode

现在在您的 lib.rs 中,创建一个结构体并为其实现 Mode 特性。例如,这里是一个没有条目的无操作模式

struct Mode;

impl rofi_mode::Mode<'_> for Mode {
    const NAME: &'static str = "an-example-mode\0";
    fn init(_api: rofi_mode::Api<'_>) -> Result<Self, ()> {
        Ok(Self)
    }
    fn entries(&mut self) -> usize { 0 }
    fn entry_content(&self, _line: usize) -> rofi_mode::String { unreachable!() }
    fn react(
        &mut self,
        _event: rofi_mode::Event,
        _input: &mut rofi_mode::String,
    ) -> rofi_mode::Action {
        rofi_mode::Action::Exit
    }
    fn matches(&self, _line: usize, _matcher: rofi_mode::Matcher<'_>) -> bool {
        unreachable!()
    }
}

然后,您需要使用 export_mode! 宏将您的模式导出到Rofi

rofi_mode::export_mode!(Mode);

使用 cargo build 构建您的库,然后将生成的dylib文件(例如,/target/debug/libmy_awesome_plugin.so)复制到 /lib/rofi,以便Rofi在启动时能够检测到它(或者,您可以设置 ROFI_PLUGIN_PATH 环境变量为您的 .so 文件所在的目录)。然后您可以从Rofi的命令行运行您的模式

rofi -modi an-example-mode -show an-example-mode

使用 RUSTFLAGS="--cfg rofi_next" 构建,以支持未发布的Rofi版本,并放弃对已发布版本的支援。这将启用semver豁免功能,因此请谨慎使用。

示例

  • 查看 examples/basic 以了解一个非平凡Rofi模式的示例,该模式允许用户在Rofi框中写入以添加条目列表。
  • 查看 examples/file-browser 以了解实现简单文件浏览器的Rofi模式。

许可证:MIT

依赖项

~8–16MB
~244K SLoC