diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index cb5cfea81a06fd27cb19d7f2e2cd845e9236ae2c..91ec021c44babb126cc33fad65131f100e285443 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -1317,15 +1317,31 @@ pub fn handle_keymap_file_changes( }) .detach(); - let mut current_layout_id = cx.keyboard_layout().id().to_string(); - cx.on_keyboard_layout_change(move |cx| { - let next_layout_id = cx.keyboard_layout().id(); - if next_layout_id != current_layout_id { - current_layout_id = next_layout_id.to_string(); - keyboard_layout_tx.unbounded_send(()).ok(); - } - }) - .detach(); + #[cfg(target_os = "windows")] + { + let mut current_layout_id = cx.keyboard_layout().id().to_string(); + cx.on_keyboard_layout_change(move |cx| { + let next_layout_id = cx.keyboard_layout().id(); + if next_layout_id != current_layout_id { + current_layout_id = next_layout_id.to_string(); + keyboard_layout_tx.unbounded_send(()).ok(); + } + }) + .detach(); + } + + #[cfg(not(target_os = "windows"))] + { + let mut current_mapping = cx.keyboard_mapper().get_key_equivalents().cloned(); + cx.on_keyboard_layout_change(move |cx| { + let next_mapping = cx.keyboard_mapper().get_key_equivalents(); + if current_mapping.as_ref() != next_mapping { + current_mapping = next_mapping.cloned(); + keyboard_layout_tx.unbounded_send(()).ok(); + } + }) + .detach(); + } load_default_keymap(cx);