Код: Выделить всё
use std::io::Read;
use crossterm::terminal::enable_raw_mode;
fn main() {
enable_raw_mode().expect("Could not enable raw mode");
let stdin = std::io::stdin();
for data in stdin.bytes() {
let data = data.expect("Could not read char");
print!("Got char: {:#x}\r\n", data);
}
}
- Мне хотелось бы знать, какую кнопку нажал пользователь, несмотря ни на что. текущего назначения клавиатуры.
- Этот метод не сообщает о неработающих клавишах, пока не будет нажата вторая клавиша.
Я читал здесь что вы можете изменить способ сообщения о нажатиях клавиш на терминал с помощью ioctl. Это была моя вторая попытка использовать такой подход:
Код: Выделить всё
use std::io::Read;
use nix::ioctl_write_int_bad;
ioctl_write_int_bad!(setkbdmode, 0x4B45);
fn main() {
unsafe { setkbdmode(0, 0).expect("Here goes") };
let stdin = std::io::stdin();
for data in stdin.bytes() {
let data = data.expect("Could not read char");
println!("Got char: {:#x}", data);
}
}
Код: Выделить всё
thread 'main' panicked at src/main.rs:8:31:
Could not set kbd mode: ENOTTY
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Есть ли способ получить нужные мне данные в консоли Linux приложение, работающее в эмуляторе терминала? В частности:
- Получайте все нажатия клавиш, даже на неработающие клавиши.
Желательно в виде кодов сканирования, а не в виде переведенных клавиш< /li>
Подробнее здесь: https://stackoverflow.com/questions/791 ... pplication
Мобильная версия