@@ -260,6 +260,8 @@ actions!(
[
/// Toggles Vim mode on or off.
ToggleVimMode,
+ /// Toggles Helix mode on or off.
+ ToggleHelixMode,
]
);
@@ -274,9 +276,23 @@ pub fn init(cx: &mut App) {
cx.observe_new(|workspace: &mut Workspace, _, _| {
workspace.register_action(|workspace, _: &ToggleVimMode, _, cx| {
let fs = workspace.app_state().fs.clone();
- let currently_enabled = Vim::enabled(cx);
+ let currently_enabled = VimModeSetting::get_global(cx).0;
update_settings_file(fs, cx, move |setting, _| {
- setting.vim_mode = Some(!currently_enabled)
+ setting.vim_mode = Some(!currently_enabled);
+ if let Some(helix_mode) = &mut setting.helix_mode {
+ *helix_mode = false;
+ }
+ })
+ });
+
+ workspace.register_action(|workspace, _: &ToggleHelixMode, _, cx| {
+ let fs = workspace.app_state().fs.clone();
+ let currently_enabled = HelixModeSetting::get_global(cx).0;
+ update_settings_file(fs, cx, move |setting, _| {
+ setting.helix_mode = Some(!currently_enabled);
+ if let Some(vim_mode) = &mut setting.vim_mode {
+ *vim_mode = false;
+ }
})
});
@@ -22,7 +22,7 @@ use ui::{
ButtonStyle, ContextMenu, ContextMenuEntry, DocumentationEdge, DocumentationSide, IconButton,
IconName, IconSize, PopoverMenu, PopoverMenuHandle, Tooltip, prelude::*,
};
-use vim_mode_setting::VimModeSetting;
+use vim_mode_setting::{HelixModeSetting, VimModeSetting};
use workspace::item::ItemBufferKind;
use workspace::{
ToolbarItemEvent, ToolbarItemLocation, ToolbarItemView, Workspace, item::ItemHandle,
@@ -307,6 +307,7 @@ impl Render for QuickActionBar {
let editor = editor.downgrade();
let editor_settings_dropdown = {
let vim_mode_enabled = VimModeSetting::get_global(cx).0;
+ let helix_mode_enabled = HelixModeSetting::get_global(cx).0;
PopoverMenu::new("editor-settings")
.trigger_with_tooltip(
@@ -583,10 +584,25 @@ impl Render for QuickActionBar {
move |window, cx| {
let new_value = !vim_mode_enabled;
VimModeSetting::override_global(VimModeSetting(new_value), cx);
+ HelixModeSetting::override_global(HelixModeSetting(false), cx);
window.refresh();
}
},
);
+ menu = menu.toggleable_entry(
+ "Helix Mode",
+ helix_mode_enabled,
+ IconPosition::Start,
+ None,
+ {
+ move |window, cx| {
+ let new_value = !helix_mode_enabled;
+ HelixModeSetting::override_global(HelixModeSetting(new_value), cx);
+ VimModeSetting::override_global(VimModeSetting(false), cx);
+ window.refresh();
+ }
+ }
+ );
menu
}