diff --git a/helix-term/src/commands/engine/steel.rs b/helix-term/src/commands/engine/steel.rs index 1ed9f5251..5f0834efe 100644 --- a/helix-term/src/commands/engine/steel.rs +++ b/helix-term/src/commands/engine/steel.rs @@ -702,7 +702,6 @@ fn load_editor_api(engine: &mut Engine, generate_sources: bool) { // Arity 1 module.register_fn("editor->doc-id", cx_get_document_id); module.register_fn("editor-switch!", cx_switch); - module.register_fn("editor-switch-replace!", cx_switch_replace); module.register_fn("editor-set-focus!", |cx: &mut Context, view_id: ViewId| { cx.editor.focus(view_id) }); @@ -711,6 +710,9 @@ fn load_editor_api(engine: &mut Engine, generate_sources: bool) { module.register_fn("set-scratch-buffer-name!", set_scratch_buffer_name); module.register_fn("editor-doc-exists?", cx_document_exists); + // Arity 2 + module.register_fn("editor-switch-action!", cx_switch_action); + // Arity 1 RegisterFn::< _, @@ -758,7 +760,6 @@ fn load_editor_api(engine: &mut Engine, generate_sources: bool) { template_function_arity_1("editor->doc-id"); template_function_arity_1("editor-switch!"); - template_function_arity_1("editor-switch-replace!"); template_function_arity_1("editor-set-focus!"); template_function_arity_1("editor-set-mode!"); template_function_arity_1("editor-doc-in-view?"); @@ -766,6 +767,19 @@ fn load_editor_api(engine: &mut Engine, generate_sources: bool) { template_function_arity_1("editor-doc-exists?"); template_function_arity_1("editor->get-document"); + let mut template_function_arity_2 = |name: &str| { + builtin_editor_command_module.push_str(&format!( + r#" +(provide {}) +(define ({} arg1 arg2) + (helix.{} *helix.cx* arg1 arg2)) +"#, + name, name, name + )); + }; + + template_function_arity_2("editor-switch-action!"); + let mut target_directory = helix_runtime_search_path(); if !target_directory.exists() { @@ -2268,8 +2282,8 @@ fn cx_switch(cx: &mut Context, doc_id: DocumentId) { cx.editor.switch(doc_id, Action::VerticalSplit) } -fn cx_switch_replace(cx: &mut Context, doc_id: DocumentId) { - cx.editor.switch(doc_id, Action::Replace) +fn cx_switch_action(cx: &mut Context, doc_id: DocumentId, action: Action) { + cx.editor.switch(doc_id, action) } fn cx_get_mode(cx: &mut Context) -> Mode { diff --git a/helix-view/src/extension.rs b/helix-view/src/extension.rs index 50f96e685..db71c3601 100644 --- a/helix-view/src/extension.rs +++ b/helix-view/src/extension.rs @@ -15,9 +15,7 @@ mod steel_implementations { use crate::{ document::Mode, editor::{ - BufferLine, CursorShapeConfig, FilePickerConfig, GutterConfig, IndentGuidesConfig, - LineEndingConfig, LineNumber, LspConfig, SearchConfig, SmartTabConfig, - StatusLineConfig, TerminalConfig, WhitespaceConfig, + Action, BufferLine, CursorShapeConfig, FilePickerConfig, GutterConfig, IndentGuidesConfig, LineEndingConfig, LineNumber, LspConfig, SearchConfig, SmartTabConfig, StatusLineConfig, TerminalConfig, WhitespaceConfig }, graphics::{Color, Rect, Style, UnderlineStyle}, input::Event, @@ -56,6 +54,8 @@ mod steel_implementations { impl Custom for ViewId {} impl CustomReference for Document {} + impl Custom for Action {} + impl Custom for FilePickerConfig {} impl Custom for StatusLineConfig {} impl Custom for SearchConfig {}