5个版本
0.1.4 | 2023年6月18日 |
---|---|
0.1.3 | 2023年6月17日 |
0.1.2 | 2023年6月17日 |
0.1.1 | 2023年6月17日 |
0.1.0 | 2023年6月17日 |
#785 in 异步
每月26次下载
在 shortcutd 中使用
33KB
860 行
evdev-shortcut
使用evdev的全局快捷键
用法
use std::path::PathBuf;
use glob::GlobError;
use evdev_shortcut::{ShortcutListener, Shortcut, Modifier, Key};
use tokio::pin;
use futures::stream::StreamExt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let listener = ShortcutListener::new();
listener.add(Shortcut::new(&[Modifier::Meta], Key::KeyN));
let devices =
glob::glob("/dev/input/by-id/*-kbd")?.collect::<Result<Vec<PathBuf>, GlobError>>()?;
let stream = listener.listen(&devices)?;
pin!(stream);
while let Some(event) = stream.next().await {
println!("{} {}", event.shortcut, event.state);
}
Ok(())
}
请注意,直接对evdev设备进行原始访问是一个特权操作,通常需要以提升的权限运行。有关在单独进程中运行提升输入处理的解决方案,请参阅 shortcutd。
lib.rs
:
使用evdev进行全局键盘快捷键。
通过直接连接到输入设备,无论环境如何,快捷键都可以工作,它们将在X11、wayland和终端中工作。
但这需要以提升的权限运行程序。有关在单独进程中运行提升输入处理的解决方案,请参阅 shortcutd。
示例
let listener = ShortcutListener::new();
listener.add(Shortcut::new(&[Modifier::Meta], Key::KeyN));
let devices =
glob::glob("/dev/input/by-id/*-kbd")?.collect::<Result<Vec<PathBuf>, GlobError>>()?;
let stream = listener.listen(&devices)?;
pin!(stream);
while let Some(event) = stream.next().await {
println!("{} {}", event.shortcut, event.state);
}
依赖项
~3–14MB
~156K SLoC