diff --git a/helix-term/src/commands/engine/steel.rs b/helix-term/src/commands/engine/steel.rs index cfc1f6094..4cd07b1d7 100644 --- a/helix-term/src/commands/engine/steel.rs +++ b/helix-term/src/commands/engine/steel.rs @@ -1038,6 +1038,7 @@ fn load_editor_api(engine: &mut Engine, generate_sources: bool) { // Arity 1 module.register_fn("editor->text", document_id_to_text); module.register_fn("editor-document->path", document_path); + module.register_fn("register->value", cx_register_value); module.register_fn("set-editor-clip-right!", |cx: &mut Context, right: u16| { cx.editor.editor_clipping.right = Some(right); @@ -1095,31 +1096,57 @@ fn load_editor_api(engine: &mut Engine, generate_sources: bool) { template_function_arity_0("cx->cursor"); template_function_arity_0("editor-focused-buffer-area"); - let mut template_function_arity_1 = |name: &str| { - builtin_editor_command_module.push_str(&format!( - r#" + let mut template_function_arity_1 = |name: &str, doc: &str| { + if generate_sources { + let docstring = format_docstring(doc); + builtin_editor_command_module.push_str(&format!( + r#" (provide {}) +;;@doc +{} (define ({} arg) (helix.{} *helix.cx* arg)) "#, - name, name, name - )); + name, docstring, name, name + )); + } }; - template_function_arity_1("editor->doc-id"); - template_function_arity_1("editor-switch!"); - template_function_arity_1("editor-set-focus!"); - template_function_arity_1("editor-set-mode!"); - template_function_arity_1("editor-doc-in-view?"); - template_function_arity_1("set-scratch-buffer-name!"); - template_function_arity_1("editor-doc-exists?"); - template_function_arity_1("editor->text"); - template_function_arity_1("editor-document->path"); - - template_function_arity_1("set-editor-clip-top!"); - template_function_arity_1("set-editor-clip-right!"); - template_function_arity_1("set-editor-clip-left!"); - template_function_arity_1("set-editor-clip-bottom!"); + template_function_arity_1("editor->doc-id", "Get the document from a given view."); + template_function_arity_1("editor-switch!", "Open the document in a vertical split."); + template_function_arity_1("editor-set-focus!", "Set focus on the view."); + template_function_arity_1("editor-set-mode!", "Set the editor mode."); + template_function_arity_1( + "editor-doc-in-view?", + "Check whether the current view contains a document.", + ); + template_function_arity_1( + "set-scratch-buffer-name!", + "Set the name of a scratch buffer.", + ); + template_function_arity_1("editor-doc-exists?", "Check if a document exists."); + template_function_arity_1("editor->text", "Get the document as a rope."); + template_function_arity_1("editor-document->path", "Get the path to a document."); + template_function_arity_1( + "register->value", + "Get register value as a list of strings.", + ); + template_function_arity_1( + "set-editor-clip-top!", + "Set the editor clipping at the top.", + ); + template_function_arity_1( + "set-editor-clip-right!", + "Set the editor clipping at the right.", + ); + template_function_arity_1( + "set-editor-clip-left!", + "Set the editor clipping at the left.", + ); + template_function_arity_1( + "set-editor-clip-bottom!", + "Set the editor clipping at the bottom.", + ); let mut template_function_arity_2 = |name: &str| { builtin_editor_command_module.push_str(&format!( @@ -3106,6 +3133,16 @@ fn cx_is_document_in_view(cx: &mut Context, doc_id: DocumentId) -> Option Vec { + cx.editor + .registers + .read(name, cx.editor) + .map_or(Vec::new(), |reg| reg.collect()) + .into_iter() + .map(|value| value.to_string()) + .collect() +} + fn cx_document_exists(cx: &mut Context, doc_id: DocumentId) -> bool { cx.editor.documents.get(&doc_id).is_some() }