keyboard: use fallback layout if failing to load

This commit is contained in:
galister
2024-06-09 09:53:46 +09:00
parent 4abfa3c3ac
commit 59c0bc870c
3 changed files with 58 additions and 27 deletions

View File

@@ -68,10 +68,14 @@ where
app.screens.clear(); app.screens.clear();
let data = if let Some(wl) = wl.as_mut() { let data = if let Some(wl) = wl.as_mut() {
keymap = get_keymap_wl().ok(); keymap = get_keymap_wl()
.map_err(|f| log::warn!("Could not load keyboard layout: {}", f))
.ok();
crate::overlays::screen::create_screens_wayland(wl, app)? crate::overlays::screen::create_screens_wayland(wl, app)?
} else { } else {
keymap = get_keymap_x11().ok(); keymap = get_keymap_x11()
.map_err(|f| log::warn!("Could not load keyboard layout: {}", f))
.ok();
match crate::overlays::screen::create_screens_x11pw(app) { match crate::overlays::screen::create_screens_x11pw(app) {
Ok(data) => data, Ok(data) => data,
Err(e) => { Err(e) => {

View File

@@ -10,6 +10,11 @@ pub fn get_keymap_x11() -> anyhow::Result<XkbKeymap> {
let (conn, _) = xcb::Connection::connect(None)?; let (conn, _) = xcb::Connection::connect(None)?;
let device_id = get_core_keyboard_device_id(&conn); let device_id = get_core_keyboard_device_id(&conn);
if device_id == -1 {
return Err(anyhow::anyhow!(
"get_core_keyboard_device_id returned -1. Check your XKB installation."
));
}
let keymap = keymap_new_from_device(&context, &conn, device_id, xkb::KEYMAP_COMPILE_NO_FLAGS); let keymap = keymap_new_from_device(&context, &conn, device_id, xkb::KEYMAP_COMPILE_NO_FLAGS);
Ok(XkbKeymap { context, keymap }) Ok(XkbKeymap { context, keymap })

View File

@@ -62,29 +62,51 @@ macros:
# Value: Array of strings. 0th element is the upper row, 1st element is lower row. # Value: Array of strings. 0th element is the upper row, 1st element is lower row.
# For empty labels, use [] (do not use ~) # For empty labels, use [] (do not use ~)
labels: labels:
"Escape": ["Esc"] "Escape": ["Esc"]
"Prior": ["PgUp"] "Prior": ["PgUp"]
"Next": ["PgDn"] "Next": ["PgDn"]
"NumLock": ["Num"] "NumLock": ["Num"]
"Space": [] "Space": []
"LAlt": ["Alt"] "LAlt": ["Alt"]
"LCtrl": ["Ctrl"] "LCtrl": ["Ctrl"]
"RCtrl": ["Ctrl"] "RCtrl": ["Ctrl"]
"LSuper": ["Super"] "LSuper": ["Super"]
"RSuper": ["Super"] "RSuper": ["Super"]
"LShift": ["Shift"] "LShift": ["Shift"]
"RShift": ["Shift"] "RShift": ["Shift"]
"Insert": ["Ins"] "Insert": ["Ins"]
"Delete": ["Del"] "Delete": ["Del"]
"BackSpace": ["<<"] "BackSpace": ["<<"]
"KP_Divide": [" /"] "KP_Divide": [" /"]
"KP_Add": [" +"] "KP_Add": [" +"]
"KP_Multiply": [" *"] "KP_Multiply": [" *"]
"KP_Decimal": [" ."] "KP_Decimal": [" ."]
"KP_Subtract": [" -"] "KP_Subtract": [" -"]
"KP_Enter": ["Ent"] "KP_Enter": ["Ent"]
"Print": ["Prn"] "Print": ["Prn"]
"Scroll": ["Scr"] "Scroll": ["Scr"]
"Pause": ["Brk"] "Pause": ["Brk"]
"XF86Favorites": ["Rofi"] "XF86Favorites": ["Menu"] # fallback labels below
"N1": ["1", "!"]
"N2": ["2", "@"]
"N3": ["3", "#"]
"N4": ["4", "$"]
"N5": ["5", "%"]
"N6": ["6", "^"]
"N7": ["7", "&"]
"N8": ["8", "*"]
"N9": ["9", "("]
"N0": ["0", ")"]
"Minus": ["-", "_"]
"Plus": ["=", "+"]
"Comma": [" ,", "<"]
"Period": [" .", ">"]
"Oem1": [" ;", ":"]
"Oem2": [" /", "?"]
"Oem3": ["`", "~"]
"Oem4": [" [", "{"]
"Oem5": [" \\", "|"]
"Oem6": [" ]", "}"]
"Oem7": [" '", "\""]
"Oem102": [" \\", "|"]