1use crate::Vim;
2use editor::{EditorBlurred, EditorFocused, EditorReleased};
3use gpui::AppContext;
4
5pub fn init(cx: &mut AppContext) {
6 cx.subscribe_global(focused).detach();
7 cx.subscribe_global(blurred).detach();
8 cx.subscribe_global(released).detach();
9}
10
11fn focused(EditorFocused(editor): &EditorFocused, cx: &mut AppContext) {
12 if let Some(previously_active_editor) = Vim::read(cx).active_editor.clone() {
13 previously_active_editor.window().update(cx, |cx| {
14 Vim::update(cx, |vim, cx| {
15 vim.update_active_editor(cx, |previously_active_editor, cx| {
16 vim.unhook_vim_settings(previously_active_editor, cx)
17 });
18 });
19 });
20 }
21
22 editor.window().update(cx, |cx| {
23 Vim::update(cx, |vim, cx| {
24 vim.set_active_editor(editor.clone(), cx);
25 });
26 });
27}
28
29fn blurred(EditorBlurred(editor): &EditorBlurred, cx: &mut AppContext) {
30 editor.window().update(cx, |cx| {
31 Vim::update(cx, |vim, cx| {
32 if let Some(previous_editor) = vim.active_editor.clone() {
33 if previous_editor == editor.clone() {
34 vim.active_editor = None;
35 }
36 }
37
38 editor.update(cx, |editor, cx| vim.unhook_vim_settings(editor, cx))
39 });
40 });
41}
42
43fn released(EditorReleased(editor): &EditorReleased, cx: &mut AppContext) {
44 editor.window().update(cx, |cx| {
45 cx.update_default_global(|vim: &mut Vim, _| {
46 if let Some(previous_editor) = vim.active_editor.clone() {
47 if previous_editor == editor.clone() {
48 vim.active_editor = None;
49 }
50 }
51 });
52 });
53}