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
每月93次下载
55KB
1K SLoC
rofi-mode
创建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