14 releases (7 breaking)
0.8.2 | Jan 31, 2023 |
---|---|
0.7.1 | Dec 11, 2021 |
0.7.0 | Sep 30, 2021 |
0.6.0 | Jul 5, 2021 |
0.2.0 | Jun 7, 2017 |
#101 in GUI
2,339 downloads per month
Used in 15 crates
(9 directly)
8MB
166K
SLoC
Rust libinput bindings
These bindings closely follow libinput's concepts and it's original API. Please refer to the libinput documentation to understand the general structure and concepts.
Note: Due to a bug within libinput, these bindings are not compatible with libinput 1.19.0. Please use the fixed 1.19.1 version.
Usage
Add to your Cargo.toml
:
input = "0.8"
Install the libinput dev dependencies:
Ubuntu:
apt-get install libinput-dev
Fedora
dnf install libinput-devel
Configure and run event loop:
use input::{Libinput, LibinputInterface};
use std::fs::{File, OpenOptions};
use std::os::unix::{fs::OpenOptionsExt, io::OwnedFd};
use std::path::Path;
extern crate libc;
use libc::{O_RDONLY, O_RDWR, O_WRONLY};
struct Interface;
impl LibinputInterface for Interface {
fn open_restricted(&mut self, path: &Path, flags: i32) -> Result<OwnedFd, i32> {
OpenOptions::new()
.custom_flags(flags)
.read((flags & O_RDONLY != 0) | (flags & O_RDWR != 0))
.write((flags & O_WRONLY != 0) | (flags & O_RDWR != 0))
.open(path)
.map(|file| file.into())
.map_err(|err| err.raw_os_error().unwrap())
}
fn close_restricted(&mut self, fd: OwnedFd) {
unsafe {
File::from(fd);
}
}
}
fn main() {
let mut input = Libinput::new_with_udev(Interface);
input.udev_assign_seat("seat0").unwrap();
loop {
input.dispatch().unwrap();
for event in &mut input {
println!("Got event: {:?}", event);
}
}
}