mirror of https://github.com/k0kubun/xremap
Implement modmap
parent
fe696a8956
commit
aa3dd2efe3
@ -1,48 +1,4 @@
|
||||
modmap:
|
||||
- name: Global
|
||||
remap:
|
||||
# CapsLock/Ctrl_L -> Esc
|
||||
CapsLock: Esc
|
||||
Ctrl_L: Esc
|
||||
|
||||
# HHKB: [Alt_L] [Muhenkan] [Space] [Henkan] [KatakanaHiragana]
|
||||
Alt_L: Ctrl_R # for Ctrl+Click
|
||||
Muhenkan: Ctrl_L
|
||||
Henkan: Shift_L
|
||||
|
||||
- name: Kana -> Windows
|
||||
wm_class:
|
||||
not: jetbrains-idea
|
||||
remap:
|
||||
# Use Windows since Alt is annoying in Electron apps (Slack, Nocturn)
|
||||
KatakanaHiragana: Win_L
|
||||
|
||||
- name: Kana -> Alt
|
||||
wm_class:
|
||||
only: jetbrains-idea
|
||||
remap:
|
||||
# Use Alt since Windows is annoying in IDEA
|
||||
KatakanaHiragana: Alt_L
|
||||
|
||||
keymap:
|
||||
- name: Global
|
||||
remap:
|
||||
# Underscore without Shift
|
||||
RO: Shift-RO
|
||||
|
||||
# SKK hack for Chrome
|
||||
C-j: C-m
|
||||
|
||||
C-m:
|
||||
remap:
|
||||
C-j: a
|
||||
|
||||
- name: Default (Nocturn, etc.)
|
||||
wm_class:
|
||||
not: [Google-chrome, Slack, Gnome-terminal, jetbrains-idea]
|
||||
remap:
|
||||
# Emacs basic
|
||||
C-b: left
|
||||
C-f: right
|
||||
C-p: up
|
||||
C-n: down
|
||||
a: b
|
||||
|
@ -1,17 +1,20 @@
|
||||
use evdev::uinput::VirtualDevice;
|
||||
use evdev::{EventType, InputEvent, InputEventKind};
|
||||
use evdev::{EventType, InputEvent, Key};
|
||||
use std::error::Error;
|
||||
use crate::Config;
|
||||
|
||||
pub fn on_event(event: InputEvent, device: &mut VirtualDevice) -> Result<(), Box<dyn Error>> {
|
||||
println!("event: {:?}", event);
|
||||
if event.kind() == InputEventKind::Key(evdev::Key::KEY_A) {
|
||||
device.emit(&[InputEvent::new(
|
||||
EventType::KEY,
|
||||
evdev::Key::KEY_B.code(),
|
||||
event.value(),
|
||||
)])?;
|
||||
} else {
|
||||
device.emit(&[event])?;
|
||||
// Handle EventType::KEY
|
||||
pub fn on_event(event: InputEvent, device: &mut VirtualDevice, config: &Config) -> Result<(), Box<dyn Error>> {
|
||||
let mut key = &Key::new(event.code());
|
||||
|
||||
// Perform modmap
|
||||
for modmap in &config.modmap {
|
||||
if let Some(modmap_key) = modmap.remap.get(&key) {
|
||||
key = modmap_key;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
device.emit(&[InputEvent::new(EventType::KEY, key.code(), event.value())])?;
|
||||
Ok(())
|
||||
}
|
||||
|
Loading…
Reference in New Issue