This commit is contained in:
Joseph T. Lyons 2024-01-06 14:41:35 -05:00
parent 3d1f522566
commit cdd5cb16ed
14 changed files with 348 additions and 258 deletions

View file

@ -1,4 +1,5 @@
use super::base_keymap_setting::BaseKeymap;
use client::telemetry::Telemetry;
use fuzzy::{match_strings, StringMatch, StringMatchCandidate};
use gpui::{
actions, AppContext, DismissEvent, EventEmitter, FocusableView, Render, Task, View,
@ -27,9 +28,10 @@ pub fn toggle(
cx: &mut ViewContext<Workspace>,
) {
let fs = workspace.app_state().fs.clone();
let telemetry = workspace.client().telemetry().clone();
workspace.toggle_modal(cx, |cx| {
BaseKeymapSelector::new(
BaseKeymapSelectorDelegate::new(cx.view().downgrade(), fs, cx),
BaseKeymapSelectorDelegate::new(cx.view().downgrade(), fs, telemetry, cx),
cx,
)
});
@ -73,6 +75,7 @@ pub struct BaseKeymapSelectorDelegate {
view: WeakView<BaseKeymapSelector>,
matches: Vec<StringMatch>,
selected_index: usize,
telemetry: Arc<Telemetry>,
fs: Arc<dyn Fs>,
}
@ -80,6 +83,7 @@ impl BaseKeymapSelectorDelegate {
fn new(
weak_view: WeakView<BaseKeymapSelector>,
fs: Arc<dyn Fs>,
telemetry: Arc<Telemetry>,
cx: &mut ViewContext<BaseKeymapSelector>,
) -> Self {
let base = BaseKeymap::get(None, cx);
@ -91,6 +95,7 @@ impl BaseKeymapSelectorDelegate {
view: weak_view,
matches: Vec::new(),
selected_index,
telemetry,
fs,
}
}
@ -172,6 +177,10 @@ impl PickerDelegate for BaseKeymapSelectorDelegate {
fn confirm(&mut self, _: bool, cx: &mut ViewContext<Picker<BaseKeymapSelectorDelegate>>) {
if let Some(selection) = self.matches.get(self.selected_index) {
let base_keymap = BaseKeymap::from_names(&selection.string);
self.telemetry
.report_setting_event("keymap", base_keymap.to_string());
update_settings_file::<BaseKeymap>(self.fs.clone(), cx, move |setting| {
*setting = Some(base_keymap)
});