# /Users/matt/.steel/cogs/helix/ext.scm ### **eval-buffer** Eval the current buffer, morally equivalent to load-buffer! ### **evalp** Eval prompt ### **running-on-main-thread?** Check what the main thread id is, compare to the main thread ### **hx.with-context** If running on the main thread already, just do nothing. Check the ID of the engine, and if we're already on the main thread, just continue as is - i.e. just block. This does not block on the function if this is running on another thread. ```scheme (hx.with-context thunk) ``` thunk : (-> any?) ;; Function that has no arguments # Examples ```scheme (spawn-native-thread (lambda () (hx.with-context (lambda () (theme "nord"))))) ``` ### **hx.block-on-task** Block on the given function. ```scheme (hx.block-on-task thunk) ``` thunk : (-> any?) ;; Function that has no arguments # Examples ```scheme (define thread (spawn-native-thread (lambda () (hx.block-on-task (lambda () (theme "nord") 10))))) ;; Some time later, in a different context - if done at the same time, ;; this will deadline, since the join depends on the callback previously ;; executing. (equal? (thread-join! thread) 10) ;; => #true ``` # /Users/matt/.steel/cogs/helix/commands.scm ### **quit** Close the current view. ### **quit!** Force close the current view, ignoring unsaved changes. ### **open** Open a file from disk into the current view. ### **buffer-close** Close the current buffer. ### **buffer-close!** Close the current buffer forcefully, ignoring unsaved changes. ### **buffer-close-others** Close all buffers but the currently focused one. ### **buffer-close-others!** Force close all buffers but the currently focused one. ### **buffer-close-all** Close all buffers without quitting. ### **buffer-close-all!** Force close all buffers ignoring unsaved changes without quitting. ### **buffer-next** Goto next buffer. ### **buffer-previous** Goto previous buffer. ### **write** Write changes to disk. Accepts an optional path (:write some/path.txt) ### **write!** Force write changes to disk creating necessary subdirectories. Accepts an optional path (:write! some/path.txt) ### **write-buffer-close** Write changes to disk and closes the buffer. Accepts an optional path (:write-buffer-close some/path.txt) ### **write-buffer-close!** Force write changes to disk creating necessary subdirectories and closes the buffer. Accepts an optional path (:write-buffer-close! some/path.txt) ### **new** Create a new scratch buffer. ### **format** Format the file using an external formatter or language server. ### **indent-style** Set the indentation style for editing. ('t' for tabs or 1-16 for number of spaces.) ### **line-ending** Set the document's default line ending. Options: crlf, lf. ### **earlier** Jump back to an earlier point in edit history. Accepts a number of steps or a time span. ### **later** Jump to a later point in edit history. Accepts a number of steps or a time span. ### **write-quit** Write changes to disk and close the current view. Accepts an optional path (:wq some/path.txt) ### **write-quit!** Write changes to disk and close the current view forcefully. Accepts an optional path (:wq! some/path.txt) ### **write-all** Write changes from all buffers to disk. ### **write-all!** Forcefully write changes from all buffers to disk creating necessary subdirectories. ### **write-quit-all** Write changes from all buffers to disk and close all views. ### **write-quit-all!** Write changes from all buffers to disk and close all views forcefully (ignoring unsaved changes). ### **quit-all** Close all views. ### **quit-all!** Force close all views ignoring unsaved changes. ### **cquit** Quit with exit code (default 1). Accepts an optional integer exit code (:cq 2). ### **cquit!** Force quit with exit code (default 1) ignoring unsaved changes. Accepts an optional integer exit code (:cq! 2). ### **theme** Change the editor theme (show current theme if no name specified). ### **yank-join** Yank joined selections. A separator can be provided as first argument. Default value is newline. ### **clipboard-yank** Yank main selection into system clipboard. ### **clipboard-yank-join** Yank joined selections into system clipboard. A separator can be provided as first argument. Default value is newline. ### **primary-clipboard-yank** Yank main selection into system primary clipboard. ### **primary-clipboard-yank-join** Yank joined selections into system primary clipboard. A separator can be provided as first argument. Default value is newline. ### **clipboard-paste-after** Paste system clipboard after selections. ### **clipboard-paste-before** Paste system clipboard before selections. ### **clipboard-paste-replace** Replace selections with content of system clipboard. ### **primary-clipboard-paste-after** Paste primary clipboard after selections. ### **primary-clipboard-paste-before** Paste primary clipboard before selections. ### **primary-clipboard-paste-replace** Replace selections with content of system primary clipboard. ### **show-clipboard-provider** Show clipboard provider name in status bar. ### **change-current-directory** Change the current working directory. ### **show-directory** Show the current working directory. ### **encoding** Set encoding. Based on `https://encoding.spec.whatwg.org`. ### **character-info** Get info about the character under the primary cursor. ### **reload** Discard changes and reload from the source file. ### **reload-all** Discard changes and reload all documents from the source files. ### **update** Write changes only if the file has been modified. ### **lsp-workspace-command** Open workspace command picker ### **lsp-restart** Restarts the given language servers, or all language servers that are used by the current file if no arguments are supplied ### **lsp-stop** Stops the given language servers, or all language servers that are used by the current file if no arguments are supplied ### **tree-sitter-scopes** Display tree sitter scopes, primarily for theming and development. ### **tree-sitter-highlight-name** Display name of tree-sitter highlight scope under the cursor. ### **debug-start** Start a debug session from a given template with given parameters. ### **debug-remote** Connect to a debug adapter by TCP address and start a debugging session from a given template with given parameters. ### **debug-eval** Evaluate expression in current debug context. ### **vsplit** Open the file in a vertical split. ### **vsplit-new** Open a scratch buffer in a vertical split. ### **hsplit** Open the file in a horizontal split. ### **hsplit-new** Open a scratch buffer in a horizontal split. ### **tutor** Open the tutorial. ### **goto** Goto line number. ### **set-language** Set the language of current buffer (show current language if no value specified). ### **set-option** Set a config option at runtime. For example to disable smart case search, use `:set search.smart-case false`. ### **toggle-option** Toggle a config option at runtime. For example to toggle smart case search, use `:toggle search.smart-case`. ### **get-option** Get the current value of a config option. ### **sort** Sort ranges in selection. ### **reflow** Hard-wrap the current selection of lines to a given width. ### **tree-sitter-subtree** Display the smallest tree-sitter subtree that spans the primary selection, primarily for debugging queries. ### **config-reload** Refresh user config. ### **config-open** Open the user config.toml file. ### **config-open-workspace** Open the workspace config.toml file. ### **log-open** Open the helix log file. ### **insert-output** Run shell command, inserting output before each selection. ### **append-output** Run shell command, appending output after each selection. ### **pipe** Pipe each selection to the shell command. ### **pipe-to** Pipe each selection to the shell command, ignoring output. ### **run-shell-command** Run a shell command ### **reset-diff-change** Reset the diff change at the cursor position. ### **clear-register** Clear given register. If no argument is provided, clear all registers. ### **redraw** Clear and re-render the whole UI ### **move** Move the current buffer and its corresponding file to a different path ### **yank-diagnostic** Yank diagnostic(s) under primary cursor to register, or clipboard by default ### **read** Load a file into buffer ### **echo** Prints the given arguments to the statusline. ### **noop** Does nothing. # /Users/matt/.steel/cogs/helix/components.scm ### **theme->bg** Gets the `Style` associated with the bg for the current theme ### **theme->fg** Gets the `style` associated with the fg for the current theme ### **theme-scope** Get the `Style` associated with the given scope from the current theme ### **Position?** Check if the given value is a `Position` ```scheme (Position? value) -> bool? ``` value : any? ### **Style?** Check if the given valuie is `Style` ```scheme (Style? value) -> bool? ``` value : any? ### **Buffer?** Checks if the given value is a `Buffer` ```scheme (Buffer? value) -> bool? ``` value : any? ### **buffer-area** Get the `Rect` associated with the given `Buffer` ```scheme (buffer-area buffer) ``` * buffer : Buffer? ### **frame-set-string!** Set the string at the given `x` and `y` positions for the given `Buffer`, with a provided `Style`. ```scheme (frame-set-string! buffer x y string style) ``` buffer : Buffer?, x : int?, y : int?, string: string?, style: Style?, ### **SteelEventResult?** Check whether the given value is a `SteelEventResult`. ```scheme (SteelEventResult? value) -> bool? ``` value : any? ### **new-component!** Construct a new dynamic component. This is used for creating widgets or floating windows that exist outside of the buffer. This just constructs the component, it does not push the component on to the component stack. For that, you'll use `push-component!`. ```scheme (new-component! name state render function-map) ``` name : string? - This is the name of the comoponent itself. state : any? - Typically this is a struct that holds the state of the component. render : (-> state? Rect? Buffer?) This is a function that will get called with each frame. The first argument is the state object provided, and the second is the `Rect?` to render against, ultimately against the `Buffer?`. function-map : (hashof string? function?) This is a hashmap of strings -> function that contains a few important functions: "handle_event" : (-> state? Event?) -> SteelEventResult? This is called on every event with an event object. There are multiple options you can use when returning from this function: * event-result/consume * event-result/consume-without-rerender * event-result/ignore * event-result/close See the associated docs for those to understand the implications for each. "cursor" : (-> state? Rect?) -> Position? This tells helix where to put the cursor. "required_size": (-> state? (pair? int?)) -> (pair? int?) Seldom used: TODO ### **position** Construct a new `Position`. ```scheme (position row col) -> Position? ``` row : int? col : int? ### **position-row** Get the row associated with the given `Position`. ```scheme (position-row pos) -> int? ``` pos : `Position?` ### **position-col** Get the col associated with the given `Position`. ```scheme (position-col pos) -> int? ``` pos : `Position?` ### **set-position-row!** Set the row for the given `Position` ```scheme (set-position-row! pos row) ``` pos : Position? row : int? ### **set-position-col!** Set the col for the given `Position` ```scheme (set-position-col! pos col) ``` pos : Position? col : int? ### **Rect?** Check if the given value is a `Rect` ```scheme (Rect? value) -> bool? ``` value : any? ### **area** Constructs a new `Rect`. (area x y width height) * x : int? * y : int? * width: int? * height: int? # Examples ```scheme (area 0 0 100 200) ``` ### **area-x** Get the `x` value of the given `Rect` ```scheme (area-x area) -> int? ``` area : Rect? ### **area-y** Get the `y` value of the given `Rect` ```scheme (area-y area) -> int? ``` area : Rect? ### **area-width** Get the `width` value of the given `Rect` ```scheme (area-width area) -> int? ``` area : Rect? ### **area-height** Get the `height` value of the given `Rect` ```scheme (area-height area) -> int? ``` area : Rect? ### **Widget/list?** Check whether the given value is a list widget. ```scheme (Widget/list? value) -> bool? ``` value : any? ### **widget/list** Creates a new `List` widget with the given items. ```scheme (widget/list lst) -> Widget? ``` * lst : (listof string?) ### **widget/list/render** Render the given `Widget/list` onto the provided `Rect` within the given `Buffer`. ```scheme (widget/list/render buf area lst) ``` * buf : `Buffer?` * area : `Rect?` * lst : `Widget/list?` ### **block** Creates a block with the following styling: ```scheme (block) ``` * borders - all * border-style - default style + white fg * border-type - rounded * style - default + black bg ### **make-block** Create a `Block` with the provided styling, borders, and border type. ```scheme (make-block style border-style borders border_type) ``` * style : Style? * border-style : Style? * borders : string? * border-type: String? Valid border-types include: * "plain" * "rounded" * "double" * "thick" Valid borders include: * "top" * "left" * "right" * "bottom" * "all" ### **block/render** Render the given `Block` over the given `Rect` onto the provided `Buffer`. ```scheme (block/render buf area block) ``` buf : Buffer? area: Rect? block: Block? ### **buffer/clear** Clear a `Rect` in the `Buffer` ```scheme (buffer/clear area) ``` area : Rect? ### **buffer/clear-with** Clear a `Rect` in the `Buffer` with a default `Style` ```scheme (buffer/clear-with area style) ``` area : Rect? style : Style? ### **set-color-rgb!** Mutate the r/g/b of a color in place, to avoid allocation. ```scheme (set-color-rgb! color r g b) ``` color : Color? r : int? g : int? b : int? ### **set-color-indexed!** Mutate this color to be an indexed color. ```scheme (set-color-indexed! color index) ``` color : Color? index: int? ### **Color?** Check if the given value is a `Color`. ```scheme (Color? value) -> bool? ``` value : any? ### **Color/Reset** Singleton for the reset color. ### **Color/Black** Singleton for the color black. ### **Color/Red** Singleton for the color red. ### **Color/White** Singleton for the color white. ### **Color/Green** Singleton for the color green. ### **Color/Yellow** Singleton for the color yellow. ### **Color/Blue** Singleton for the color blue. ### **Color/Magenta** Singleton for the color magenta. ### **Color/Cyan** Singleton for the color cyan. ### **Color/Gray** Singleton for the color gray. ### **Color/LightRed** Singleton for the color light read. ### **Color/LightGreen** Singleton for the color light green. ### **Color/LightYellow** Singleton for the color light yellow. ### **Color/LightBlue** Singleton for the color light blue. ### **Color/LightMagenta** Singleton for the color light magenta. ### **Color/LightCyan** Singleton for the color light cyan. ### **Color/LightGray** Singleton for the color light gray. ### **Color/rgb** Construct a new color via rgb. ```scheme (Color/rgb r g b) -> Color? ``` r : int? g : int? b : int? ### **Color-red** Get the red component of the `Color?`. ```scheme (Color-red color) -> int? ``` color * Color? ### **Color-green** Get the green component of the `Color?`. ```scheme (Color-green color) -> int? ``` color * Color? ### **Color-blue** Get the blue component of the `Color?`. ```scheme (Color-blue color) -> int? ``` color * Color? ### **Color/Indexed** Construct a new indexed color. ```scheme (Color/Indexed index) -> Color? ``` * index : int? ### **set-style-fg!** Mutates the given `Style` to have the fg with the provided color. ```scheme (set-style-fg! style color) ``` style : `Style?` color : `Color?` ### **style-fg** Constructs a new `Style` with the provided `Color` for the fg. ```scheme (style-fg style color) -> Style ``` style : Style? color: Color? ### **style-bg** Constructs a new `Style` with the provided `Color` for the bg. ```scheme (style-bg style color) -> Style ``` style : Style? color: Color? ### **style-with-italics** Constructs a new `Style` with italcs. ```scheme (style-with-italics style) -> Style ``` style : Style? ### **style-with-bold** Constructs a new `Style` with bold styling. ```scheme (style-with-bold style) -> Style ``` style : Style? ### **style-with-dim** Constructs a new `Style` with dim styling. ```scheme (style-with-dim style) -> Style ``` style : Style? ### **style-with-slow-blink** Constructs a new `Style` with slow blink. ```scheme (style-with-slow-blink style) -> Style ``` style : Style? ### **style-with-rapid-blink** Constructs a new `Style` with rapid blink. ```scheme (style-with-rapid-blink style) -> Style ``` style : Style? ### **style-with-reversed** Constructs a new `Style` with revered styling. ```scheme (style-with-reversed style) -> Style ``` style : Style? ### **style-with-hidden** Constructs a new `Style` with hidden styling. ```scheme (style-with-hidden style) -> Style ``` style : Style? ### **style-with-crossed-out** Constructs a new `Style` with crossed out styling. ```scheme (style-with-crossed-out style) -> Style ``` style : Style? ### **style->fg** Return the color on the style, or #false if not present. ```scheme (style->fg style) -> (or Color? #false) ``` style : Style? ### **style->bg** Return the color on the style, or #false if not present. ```scheme (style->bg style) -> (or Color? #false) ``` style : Style? ### **set-style-bg!** Mutate the background style on the given style to a given color. ```scheme (set-style-bg! style color) ``` style : Style? color : Color? ### **style-underline-color** Return a new style with the provided underline color. ```scheme (style-underline-color style color) -> Style? ``` style : Style? color : Color? ### **style-underline-style** Return a new style with the provided underline style. ```scheme (style-underline-style style underline-style) -> Style? ``` style : Style? underline-style : UnderlineStyle? ### **UnderlineStyle?** Check if the provided value is an `UnderlineStyle`. ```scheme (UnderlineStyle? value) -> bool? ``` value : any? ### **Underline/Reset** Singleton for resetting the underling style. ### **Underline/Line** Singleton for the line underline style. ### **Underline/Curl** Singleton for the curl underline style. ### **Underline/Dotted** Singleton for the dotted underline style. ### **Underline/Dashed** Singleton for the dashed underline style. ### **Underline/DoubleLine** Singleton for the double line underline style. ### **event-result/consume** Singleton for consuming an event. If this is returned from an event handler, the event will not continue to be propagated down the component stack. This also will trigger a re-render. ### **event-result/consume-without-rerender** Singleton for consuming an event. If this is returned from an event handler, the event will not continue to be propagated down the component stack. This will _not_ trigger a re-render. ### **event-result/ignore** Singleton for ignoring an event. If this is returned from an event handler, the event will not continue to be propagated down the component stack. This will _not_ trigger a re-render. ### **event-result/ignore-and-close** Singleton for ignoring an event. If this is returned from an event handler, the event will continue to be propagated down the component stack, and the component will be popped off of the stack and removed. ### **event-result/close** Singleton for consuming an event. If this is returned from an event handler, the event will not continue to be propagated down the component stack, and the component will be popped off of the stack and removed. ### **style** Constructs a new default style. ```scheme (style) -> Style? ``` ### **Event?** Check if this value is an `Event` ```scheme (Event? value) -> bool? ``` value : any? ### **key-event?** Checks if the given event is a key event. ```scheme (key-event? event) -> bool? ``` * event : Event? ### **key-event-char** Get the character off of the event, if there is one. ```scheme (key-event-char event) -> (or char? #false) ``` event : Event? ### **key-event-modifier** Get the key event modifier off of the event, if there is one. ```scheme (key-event-modifier event) -> (or int? #false) ``` event : Event? ### **key-modifier-ctrl** The key modifier bits associated with the ctrl key modifier. ### **key-modifier-shift** The key modifier bits associated with the shift key modifier. ### **key-modifier-alt** The key modifier bits associated with the alt key modifier. ### **key-event-F?** Check if this key event is associated with an `F` key, e.g. F1, F2, etc. ```scheme (key-event-F? event number) -> bool? ``` event : Event? number : int? ### **mouse-event?** Check if this event is a mouse event. ```scheme (mouse-event event) -> bool? ``` event : Event? ### **event-mouse-kind** Convert the mouse event kind into an integer representing the state. ```scheme (event-mouse-kind event) -> (or int? #false) ``` event : Event? This is the current mapping today: ```rust match kind { helix_view::input::MouseEventKind::Down(MouseButton::Left) => 0, helix_view::input::MouseEventKind::Down(MouseButton::Right) => 1, helix_view::input::MouseEventKind::Down(MouseButton::Middle) => 2, helix_view::input::MouseEventKind::Up(MouseButton::Left) => 3, helix_view::input::MouseEventKind::Up(MouseButton::Right) => 4, helix_view::input::MouseEventKind::Up(MouseButton::Middle) => 5, helix_view::input::MouseEventKind::Drag(MouseButton::Left) => 6, helix_view::input::MouseEventKind::Drag(MouseButton::Right) => 7, helix_view::input::MouseEventKind::Drag(MouseButton::Middle) => 8, helix_view::input::MouseEventKind::Moved => 9, helix_view::input::MouseEventKind::ScrollDown => 10, helix_view::input::MouseEventKind::ScrollUp => 11, helix_view::input::MouseEventKind::ScrollLeft => 12, helix_view::input::MouseEventKind::ScrollRight => 13, } ``` Any unhandled event that does not match this will return `#false`. ### **event-mouse-row** Get the row from the mouse event, of #false if it isn't a mouse event. ```scheme (event-mouse-row event) -> (or int? #false) ``` event : Event? ### **event-mouse-col** Get the col from the mouse event, of #false if it isn't a mouse event. ```scheme (event-mouse-row event) -> (or int? #false) ``` event : Event? ### **mouse-event-within-area?** Check whether the given mouse event occurred within a given `Rect`. ```scheme (mouse-event-within-area? event area) -> bool? ``` event : Event? area : Rect? ### **key-event-escape?** Check whether the given event is the key: escape ```scheme (key-event-escape? event) ``` event: Event? ### **key-event-backspace?** Check whether the given event is the key: backspace ```scheme (key-event-backspace? event) ``` event: Event? ### **key-event-enter?** Check whether the given event is the key: enter ```scheme (key-event-enter? event) ``` event: Event? ### **key-event-left?** Check whether the given event is the key: left ```scheme (key-event-left? event) ``` event: Event? ### **key-event-right?** Check whether the given event is the key: right ```scheme (key-event-right? event) ``` event: Event? ### **key-event-up?** Check whether the given event is the key: up ```scheme (key-event-up? event) ``` event: Event? ### **key-event-down?** Check whether the given event is the key: down ```scheme (key-event-down? event) ``` event: Event? ### **key-event-home?** Check whether the given event is the key: home ```scheme (key-event-home? event) ``` event: Event? ### **key-event-page-up?** Check whether the given event is the key: page-up ```scheme (key-event-page-up? event) ``` event: Event? ### **key-event-page-down?** Check whether the given event is the key: page-down ```scheme (key-event-page-down? event) ``` event: Event? ### **key-event-tab?** Check whether the given event is the key: tab ```scheme (key-event-tab? event) ``` event: Event? ### **key-event-delete?** Check whether the given event is the key: delete ```scheme (key-event-delete? event) ``` event: Event? ### **key-event-insert?** Check whether the given event is the key: insert ```scheme (key-event-insert? event) ``` event: Event? ### **key-event-null?** Check whether the given event is the key: null ```scheme (key-event-null? event) ``` event: Event? ### **key-event-caps-lock?** Check whether the given event is the key: caps-lock ```scheme (key-event-caps-lock? event) ``` event: Event? ### **key-event-scroll-lock?** Check whether the given event is the key: scroll-lock ```scheme (key-event-scroll-lock? event) ``` event: Event? ### **key-event-num-lock?** Check whether the given event is the key: num-lock ```scheme (key-event-num-lock? event) ``` event: Event? ### **key-event-print-screen?** Check whether the given event is the key: print-screen ```scheme (key-event-print-screen? event) ``` event: Event? ### **key-event-pause?** Check whether the given event is the key: pause ```scheme (key-event-pause? event) ``` event: Event? ### **key-event-menu?** Check whether the given event is the key: menu ```scheme (key-event-menu? event) ``` event: Event? ### **key-event-keypad-begin?** Check whether the given event is the key: keypad-begin ```scheme (key-event-keypad-begin? event) ``` event: Event? # /Users/matt/.steel/cogs/helix/misc.scm ### **hx.cx->pos** DEPRECATED: Please use `cursor-position` ### **cursor-position** Returns the cursor position within the current buffer as an integer ### **hx.custom-insert-newline** DEPRECATED: Please use `insert-newline-hook` ### **insert-newline-hook** Inserts a new line with the provided indentation. ```scheme (insert-newline-hook indent-string) ``` indent-string : string? ### **push-component!** Push a component on to the top of the stack. ```scheme (push-component! component) ``` component : WrappedDynComponent? ### **pop-last-component!** DEPRECATED: Please use `pop-last-component-by-name!` ### **pop-last-component-by-name!** Pops the last component off of the stack by name. In other words, it removes the component matching this name from the stack. ```scheme (pop-last-component-by-name! name) ``` name : string? ### **enqueue-thread-local-callback** Enqueue a function to be run following this context of execution. This could be useful for yielding back to the editor in the event you want updates to happen before your function is run. ```scheme (enqueue-thread-local-callback callback) ``` callback : (-> any?) Function with no arguments. # Examples ```scheme (enqueue-thread-local-callback (lambda () (theme "focus_nova"))) ``` ### **set-status!** Sets the content of the status line ### **send-lsp-command** Send an lsp command. The `lsp-name` must correspond to an active lsp. The method name corresponds to the method name that you'd expect to see with the lsp, and the params can be passed as a hash table. The callback provided will be called with whatever result is returned from the LSP, deserialized from json to a steel value. # Example ```scheme (define (view-crate-graph) (send-lsp-command "rust-analyzer" "rust-analyzer/viewCrateGraph" (hash "full" #f) ;; Callback to run with the result (lambda (result) (displayln result)))) ``` ### **acquire-context-lock** Schedule a function to run on the main thread. This is a fairly low level function, and odds are you'll want to use some abstractions on top of this. The provided function will get enqueued to run on the main thread, and during the duration of the functions execution, the provided mutex will be locked. ```scheme (acquire-context-lock callback-fn mutex) ``` callback-fn : (-> void?) Function with no arguments mutex : mutex? ### **enqueue-thread-local-callback-with-delay** Enqueue a function to be run following this context of execution, after a delay. This could be useful for yielding back to the editor in the event you want updates to happen before your function is run. ```scheme (enqueue-thread-local-callback-with-delay delay callback) ``` delay : int? Time to delay the callback by in milliseconds callback : (-> any?) Function with no arguments. # Examples ```scheme (enqueue-thread-local-callback-with-delay 1000 (lambda () (theme "focus_nova"))) ;; Run after 1 second `` ### **helix-await-callback** DEPRECATED: Please use `await-callback` ### **await-callback** Await the given value, and call the callback function on once the future is completed. ```scheme (await-callback future callback) ``` * future : future? * callback (-> any?) Function with no arguments ### **add-inlay-hint** Warning: this is experimental Adds an inlay hint at the given character index. ```scheme (add-inlay-hint char-index completion) ``` char-index : int? completion : string? ### **remove-inlay-hint** Warning: this is experimental Removes an inlay hint at the given character index. Note - to remove properly, the completion must match what was already there. ```scheme (remove-inlay-hint char-index completion) ``` char-index : int? completion : string? # /Users/matt/.steel/cogs/helix/static.scm ### **no_op** Do nothing ### **move_char_left** Move left ### **move_char_right** Move right ### **move_line_up** Move up ### **move_line_down** Move down ### **move_visual_line_up** Move up ### **move_visual_line_down** Move down ### **extend_char_left** Extend left ### **extend_char_right** Extend right ### **extend_line_up** Extend up ### **extend_line_down** Extend down ### **extend_visual_line_up** Extend up ### **extend_visual_line_down** Extend down ### **copy_selection_on_next_line** Copy selection on next line ### **copy_selection_on_prev_line** Copy selection on previous line ### **move_next_word_start** Move to start of next word ### **move_prev_word_start** Move to start of previous word ### **move_next_word_end** Move to end of next word ### **move_prev_word_end** Move to end of previous word ### **move_next_long_word_start** Move to start of next long word ### **move_prev_long_word_start** Move to start of previous long word ### **move_next_long_word_end** Move to end of next long word ### **move_prev_long_word_end** Move to end of previous long word ### **move_next_sub_word_start** Move to start of next sub word ### **move_prev_sub_word_start** Move to start of previous sub word ### **move_next_sub_word_end** Move to end of next sub word ### **move_prev_sub_word_end** Move to end of previous sub word ### **move_parent_node_end** Move to end of the parent node ### **move_parent_node_start** Move to beginning of the parent node ### **extend_next_word_start** Extend to start of next word ### **extend_prev_word_start** Extend to start of previous word ### **extend_next_word_end** Extend to end of next word ### **extend_prev_word_end** Extend to end of previous word ### **extend_next_long_word_start** Extend to start of next long word ### **extend_prev_long_word_start** Extend to start of previous long word ### **extend_next_long_word_end** Extend to end of next long word ### **extend_prev_long_word_end** Extend to end of prev long word ### **extend_next_sub_word_start** Extend to start of next sub word ### **extend_prev_sub_word_start** Extend to start of previous sub word ### **extend_next_sub_word_end** Extend to end of next sub word ### **extend_prev_sub_word_end** Extend to end of prev sub word ### **extend_parent_node_end** Extend to end of the parent node ### **extend_parent_node_start** Extend to beginning of the parent node ### **find_till_char** Move till next occurrence of char ### **find_next_char** Move to next occurrence of char ### **extend_till_char** Extend till next occurrence of char ### **extend_next_char** Extend to next occurrence of char ### **till_prev_char** Move till previous occurrence of char ### **find_prev_char** Move to previous occurrence of char ### **extend_till_prev_char** Extend till previous occurrence of char ### **extend_prev_char** Extend to previous occurrence of char ### **repeat_last_motion** Repeat last motion ### **replace** Replace with new char ### **switch_case** Switch (toggle) case ### **switch_to_uppercase** Switch to uppercase ### **switch_to_lowercase** Switch to lowercase ### **page_up** Move page up ### **page_down** Move page down ### **half_page_up** Move half page up ### **half_page_down** Move half page down ### **page_cursor_up** Move page and cursor up ### **page_cursor_down** Move page and cursor down ### **page_cursor_half_up** Move page and cursor half up ### **page_cursor_half_down** Move page and cursor half down ### **select_all** Select whole document ### **select_regex** Select all regex matches inside selections ### **split_selection** Split selections on regex matches ### **split_selection_on_newline** Split selection on newlines ### **merge_selections** Merge selections ### **merge_consecutive_selections** Merge consecutive selections ### **search** Search for regex pattern ### **rsearch** Reverse search for regex pattern ### **search_next** Select next search match ### **search_prev** Select previous search match ### **extend_search_next** Add next search match to selection ### **extend_search_prev** Add previous search match to selection ### **search_selection** Use current selection as search pattern ### **search_selection_detect_word_boundaries** Use current selection as the search pattern, automatically wrapping with `\b` on word boundaries ### **make_search_word_bounded** Modify current search to make it word bounded ### **global_search** Global search in workspace folder ### **extend_line** Select current line, if already selected, extend to another line based on the anchor ### **extend_line_below** Select current line, if already selected, extend to next line ### **extend_line_above** Select current line, if already selected, extend to previous line ### **select_line_above** Select current line, if already selected, extend or shrink line above based on the anchor ### **select_line_below** Select current line, if already selected, extend or shrink line below based on the anchor ### **extend_to_line_bounds** Extend selection to line bounds ### **shrink_to_line_bounds** Shrink selection to line bounds ### **delete_selection** Delete selection ### **delete_selection_noyank** Delete selection without yanking ### **change_selection** Change selection ### **change_selection_noyank** Change selection without yanking ### **collapse_selection** Collapse selection into single cursor ### **flip_selections** Flip selection cursor and anchor ### **ensure_selections_forward** Ensure all selections face forward ### **insert_mode** Insert before selection ### **append_mode** Append after selection ### **command_mode** Enter command mode ### **file_picker** Open file picker ### **file_picker_in_current_buffer_directory** Open file picker at current buffer's directory ### **file_picker_in_current_directory** Open file picker at current working directory ### **file_explorer** Open file explorer in workspace root ### **file_explorer_in_current_buffer_directory** Open file explorer at current buffer's directory ### **file_explorer_in_current_directory** Open file explorer at current working directory ### **code_action** Perform code action ### **buffer_picker** Open buffer picker ### **jumplist_picker** Open jumplist picker ### **symbol_picker** Open symbol picker ### **changed_file_picker** Open changed file picker ### **select_references_to_symbol_under_cursor** Select symbol references ### **workspace_symbol_picker** Open workspace symbol picker ### **diagnostics_picker** Open diagnostic picker ### **workspace_diagnostics_picker** Open workspace diagnostic picker ### **last_picker** Open last picker ### **insert_at_line_start** Insert at start of line ### **insert_at_line_end** Insert at end of line ### **open_below** Open new line below selection ### **open_above** Open new line above selection ### **normal_mode** Enter normal mode ### **select_mode** Enter selection extend mode ### **exit_select_mode** Exit selection mode ### **goto_definition** Goto definition ### **goto_declaration** Goto declaration ### **add_newline_above** Add newline above ### **add_newline_below** Add newline below ### **goto_type_definition** Goto type definition ### **goto_implementation** Goto implementation ### **goto_file_start** Goto line number else file start ### **goto_file_end** Goto file end ### **goto_file** Goto files/URLs in selections ### **goto_file_hsplit** Goto files in selections (hsplit) ### **goto_file_vsplit** Goto files in selections (vsplit) ### **goto_reference** Goto references ### **goto_window_top** Goto window top ### **goto_window_center** Goto window center ### **goto_window_bottom** Goto window bottom ### **goto_last_accessed_file** Goto last accessed file ### **goto_last_modified_file** Goto last modified file ### **goto_last_modification** Goto last modification ### **goto_line** Goto line ### **goto_last_line** Goto last line ### **goto_first_diag** Goto first diagnostic ### **goto_last_diag** Goto last diagnostic ### **goto_next_diag** Goto next diagnostic ### **goto_prev_diag** Goto previous diagnostic ### **goto_next_change** Goto next change ### **goto_prev_change** Goto previous change ### **goto_first_change** Goto first change ### **goto_last_change** Goto last change ### **goto_line_start** Goto line start ### **goto_line_end** Goto line end ### **goto_next_buffer** Goto next buffer ### **goto_previous_buffer** Goto previous buffer ### **goto_line_end_newline** Goto newline at line end ### **goto_first_nonwhitespace** Goto first non-blank in line ### **trim_selections** Trim whitespace from selections ### **extend_to_line_start** Extend to line start ### **extend_to_first_nonwhitespace** Extend to first non-blank in line ### **extend_to_line_end** Extend to line end ### **extend_to_line_end_newline** Extend to line end ### **signature_help** Show signature help ### **smart_tab** Insert tab if all cursors have all whitespace to their left; otherwise, run a separate command. ### **insert_tab** Insert tab char ### **insert_newline** Insert newline char ### **delete_char_backward** Delete previous char ### **delete_char_forward** Delete next char ### **delete_word_backward** Delete previous word ### **delete_word_forward** Delete next word ### **kill_to_line_start** Delete till start of line ### **kill_to_line_end** Delete till end of line ### **undo** Undo change ### **redo** Redo change ### **earlier** Move backward in history ### **later** Move forward in history ### **commit_undo_checkpoint** Commit changes to new checkpoint ### **yank** Yank selection ### **yank_to_clipboard** Yank selections to clipboard ### **yank_to_primary_clipboard** Yank selections to primary clipboard ### **yank_joined** Join and yank selections ### **yank_joined_to_clipboard** Join and yank selections to clipboard ### **yank_main_selection_to_clipboard** Yank main selection to clipboard ### **yank_joined_to_primary_clipboard** Join and yank selections to primary clipboard ### **yank_main_selection_to_primary_clipboard** Yank main selection to primary clipboard ### **replace_with_yanked** Replace with yanked text ### **replace_selections_with_clipboard** Replace selections by clipboard content ### **replace_selections_with_primary_clipboard** Replace selections by primary clipboard ### **paste_after** Paste after selection ### **paste_before** Paste before selection ### **paste_clipboard_after** Paste clipboard after selections ### **paste_clipboard_before** Paste clipboard before selections ### **paste_primary_clipboard_after** Paste primary clipboard after selections ### **paste_primary_clipboard_before** Paste primary clipboard before selections ### **indent** Indent selection ### **unindent** Unindent selection ### **format_selections** Format selection ### **join_selections** Join lines inside selection ### **join_selections_space** Join lines inside selection and select spaces ### **keep_selections** Keep selections matching regex ### **remove_selections** Remove selections matching regex ### **align_selections** Align selections in column ### **keep_primary_selection** Keep primary selection ### **remove_primary_selection** Remove primary selection ### **completion** Invoke completion popup ### **hover** Show docs for item under cursor ### **toggle_comments** Comment/uncomment selections ### **toggle_line_comments** Line comment/uncomment selections ### **toggle_block_comments** Block comment/uncomment selections ### **rotate_selections_forward** Rotate selections forward ### **rotate_selections_backward** Rotate selections backward ### **rotate_selection_contents_forward** Rotate selection contents forward ### **rotate_selection_contents_backward** Rotate selections contents backward ### **reverse_selection_contents** Reverse selections contents ### **expand_selection** Expand selection to parent syntax node ### **shrink_selection** Shrink selection to previously expanded syntax node ### **select_next_sibling** Select next sibling in the syntax tree ### **select_prev_sibling** Select previous sibling the in syntax tree ### **select_all_siblings** Select all siblings of the current node ### **select_all_children** Select all children of the current node ### **jump_forward** Jump forward on jumplist ### **jump_backward** Jump backward on jumplist ### **save_selection** Save current selection to jumplist ### **jump_view_right** Jump to right split ### **jump_view_left** Jump to left split ### **jump_view_up** Jump to split above ### **jump_view_down** Jump to split below ### **swap_view_right** Swap with right split ### **swap_view_left** Swap with left split ### **swap_view_up** Swap with split above ### **swap_view_down** Swap with split below ### **transpose_view** Transpose splits ### **rotate_view** Goto next window ### **rotate_view_reverse** Goto previous window ### **hsplit** Horizontal bottom split ### **hsplit_new** Horizontal bottom split scratch buffer ### **vsplit** Vertical right split ### **vsplit_new** Vertical right split scratch buffer ### **wclose** Close window ### **wonly** Close windows except current ### **select_register** Select register ### **insert_register** Insert register ### **copy_between_registers** Copy between two registers ### **align_view_middle** Align view middle ### **align_view_top** Align view top ### **align_view_center** Align view center ### **align_view_bottom** Align view bottom ### **scroll_up** Scroll view up ### **scroll_down** Scroll view down ### **match_brackets** Goto matching bracket ### **surround_add** Surround add ### **surround_replace** Surround replace ### **surround_delete** Surround delete ### **select_textobject_around** Select around object ### **select_textobject_inner** Select inside object ### **goto_next_function** Goto next function ### **goto_prev_function** Goto previous function ### **goto_next_class** Goto next type definition ### **goto_prev_class** Goto previous type definition ### **goto_next_parameter** Goto next parameter ### **goto_prev_parameter** Goto previous parameter ### **goto_next_comment** Goto next comment ### **goto_prev_comment** Goto previous comment ### **goto_next_test** Goto next test ### **goto_prev_test** Goto previous test ### **goto_next_entry** Goto next pairing ### **goto_prev_entry** Goto previous pairing ### **goto_next_paragraph** Goto next paragraph ### **goto_prev_paragraph** Goto previous paragraph ### **dap_launch** Launch debug target ### **dap_restart** Restart debugging session ### **dap_toggle_breakpoint** Toggle breakpoint ### **dap_continue** Continue program execution ### **dap_pause** Pause program execution ### **dap_step_in** Step in ### **dap_step_out** Step out ### **dap_next** Step to next ### **dap_variables** List variables ### **dap_terminate** End debug session ### **dap_edit_condition** Edit breakpoint condition on current line ### **dap_edit_log** Edit breakpoint log message on current line ### **dap_switch_thread** Switch current thread ### **dap_switch_stack_frame** Switch stack frame ### **dap_enable_exceptions** Enable exception breakpoints ### **dap_disable_exceptions** Disable exception breakpoints ### **shell_pipe** Pipe selections through shell command ### **shell_pipe_to** Pipe selections into shell command ignoring output ### **shell_insert_output** Insert shell command output before selections ### **shell_append_output** Append shell command output after selections ### **shell_keep_pipe** Filter selections with shell predicate ### **suspend** Suspend and return to shell ### **rename_symbol** Rename symbol ### **increment** Increment item under cursor ### **decrement** Decrement item under cursor ### **record_macro** Record macro ### **replay_macro** Replay macro ### **command_palette** Open command palette ### **goto_word** Jump to a two-character label ### **extend_to_word** Extend to a two-character label ### **goto_next_tabstop** goto next snippet placeholder ### **goto_prev_tabstop** goto next snippet placeholder ### **insert_char** Insert a given character at the cursor cursor position ### **insert_string** Insert a given string at the current cursor position ### **set-current-selection-object!** Update the selection object to the current selection within the editor ### **regex-selection** Run the given regex within the existing buffer ### **replace-selection-with** Replace the existing selection with the given string ### **cx->current-file** Get the currently focused file path ### **enqueue-expression-in-engine** Enqueue an expression to run at the top level context, after the existing function context has exited. ### **current_selection** Returns the current selection as a string ### **load-buffer!** Evaluates the current buffer ### **current-highlighted-text!** Returns the currently highlighted text as a string ### **get-current-line-number** Returns the current line number ### **current-selection-object** Returns the current selection object ### **get-helix-cwd** Returns the current working directly that helix is using ### **move-window-far-left** Moves the current window to the far left ### **move-window-far-right** Moves the current window to the far right ### **get-helix-scm-path** Returns the path to the helix.scm file as a string ### **get-init-scm-path** Returns the path to the init.scm file as a string # /Users/matt/.steel/cogs/helix/configuration.scm ### **cursor-shape** Shape for cursor in each mode (cursor-shape #:normal (normal 'block) #:select (select 'block) #:insert (insert 'block)) # Examples ```scheme (cursor-shape #:normal 'block #:select 'underline #:insert 'bar) ``` ### **set-lsp-config!** Sets the language server config for a specific language server. ```scheme (set-lsp-config! lsp config) ``` * lsp : string? * config: hash? This will overlay the existing configuration, much like the existing toml definition does. Available options for the config hash are: ```scheme (hash "command" "" "args" (list "args" ...) "environment" (hash "ENV" "VAR" ...) "config" (hash ...) "timeout" 100 ;; number "required-root-patterns" (listof "pattern" ...)) ``` # Examples ``` (set-lsp-config! "jdtls" (hash "args" (list "-data" "/home/matt/code/java-scratch/workspace"))) ``` ### **file-picker-kw** Sets the configuration for the file picker using keywords. ```scheme (file-picker-kw #:hidden #t #:follow-symlinks #t #:deduplicate-links #t #:parents #t #:ignore #t #:git-ignore #t #:git-exclude #t #:git-global #t #:max-depth #f) ;; Expects either #f or an int? ``` By default, max depth is `#f` while everything else is an int? To use this, call this in your `init.scm` or `helix.scm`: # Examples ```scheme (file-picker-kw #:hidden #f) ``` ### **file-picker** Sets the configuration for the file picker using var args. ```scheme (file-picker . args) ``` The args are expected to be something of the value: ```scheme (-> FilePickerConfiguration? bool?) ``` These other functions in this module which follow this behavior are all prefixed `fp-`, and include: * fp-hidden * fp-follow-symlinks * fp-deduplicate-links * fp-parents * fp-ignore * fp-git-ignore * fp-git-global * fp-git-exclude * fp-max-depth By default, max depth is `#f` while everything else is an int? To use this, call this in your `init.scm` or `helix.scm`: # Examples ```scheme (file-picker (fp-hidden #f) (fp-parents #f)) ``` ### **soft-wrap-kw** Sets the configuration for soft wrap using keyword args. ```scheme (soft-wrap-kw #:enable #f #:max-wrap 20 #:max-indent-retain 40 #:wrap-indicator "↪" #:wrap-at-text-width #f) ``` The options are as follows: * #:enable: Soft wrap lines that exceed viewport width. Default to off * #:max-wrap: Maximum space left free at the end of the line. This space is used to wrap text at word boundaries. If that is not possible within this limit the word is simply split at the end of the line. This is automatically hard-limited to a quarter of the viewport to ensure correct display on small views. Default to 20 * #:max-indent-retain Maximum number of indentation that can be carried over from the previous line when softwrapping. If a line is indented further then this limit it is rendered at the start of the viewport instead. This is automatically hard-limited to a quarter of the viewport to ensure correct display on small views. Default to 40 * #:wrap-indicator Indicator placed at the beginning of softwrapped lines Defaults to ↪ * #:wrap-at-text-width Softwrap at `text_width` instead of viewport width if it is shorter # Examples ```scheme (soft-wrap-kw #:sw-enable #t) ``` ### **soft-wrap** Sets the configuration for soft wrap using var args. ```scheme (soft-wrap . args) ``` The args are expected to be something of the value: ```scheme (-> SoftWrapConfiguration? bool?) ``` The options are as follows: * sw-enable: Soft wrap lines that exceed viewport width. Default to off * sw-max-wrap: Maximum space left free at the end of the line. This space is used to wrap text at word boundaries. If that is not possible within this limit the word is simply split at the end of the line. This is automatically hard-limited to a quarter of the viewport to ensure correct display on small views. Default to 20 * sw-max-indent-retain Maximum number of indentation that can be carried over from the previous line when softwrapping. If a line is indented further then this limit it is rendered at the start of the viewport instead. This is automatically hard-limited to a quarter of the viewport to ensure correct display on small views. Default to 40 * sw-wrap-indicator Indicator placed at the beginning of softwrapped lines Defaults to ↪ * sw-wrap-at-text-width Softwrap at `text_width` instead of viewport width if it is shorter # Examples ```scheme (soft-wrap (sw-enable #t)) ``` ### **scrolloff** Padding to keep between the edge of the screen and the cursor when scrolling. Defaults to 5. ### **scroll_lines** Number of lines to scroll at once. Defaults to 3 ### **mouse** Mouse support. Defaults to true. ### **shell** Shell to use for shell commands. Defaults to ["cmd", "/C"] on Windows and ["sh", "-c"] otherwise. ### **line-number** Line number mode. ### **cursorline** Highlight the lines cursors are currently on. Defaults to false ### **cursorcolumn** Highlight the columns cursors are currently on. Defaults to false ### **middle-click-paste** Middle click paste support. Defaults to true ### **auto-pairs** Automatic insertion of pairs to parentheses, brackets, etc. Optionally, this can be a list of 2-tuples to specify a global list of characters to pair. Defaults to true. ### **auto-completion** Automatic auto-completion, automatically pop up without user trigger. Defaults to true. ### **auto-format** Automatic formatting on save. Defaults to true. ### **auto-save** Automatic save on focus lost and/or after delay. Time delay in milliseconds since last edit after which auto save timer triggers. Time delay defaults to false with 3000ms delay. Focus lost defaults to false. ### **text-width** Set a global text_width ### **idle-timeout** Time in milliseconds since last keypress before idle timers trigger. Used for various UI timeouts. Defaults to 250ms. ### **completion-timeout** Time in milliseconds after typing a word character before auto completions are shown, set to 5 for instant. Defaults to 250ms. ### **preview-completion-insert** Whether to insert the completion suggestion on hover. Defaults to true. ### **completion-trigger-len** Length to trigger completions ### **completion-replace** Whether to instruct the LSP to replace the entire word when applying a completion or to only insert new text ### **auto-info** Whether to display infoboxes. Defaults to true. ### **true-color** Set to `true` to override automatic detection of terminal truecolor support in the event of a false negative. Defaults to `false`. ### **insert-final-newline** Whether to automatically insert a trailing line-ending on write if missing. Defaults to `true` ### **color-modes** Whether to color modes with different colors. Defaults to `false`. ### **gutters** Gutter configuration ### **statusline** Configuration of the statusline elements ### **undercurl** Set to `true` to override automatic detection of terminal undercurl support in the event of a false negative. Defaults to `false`. ### **search** Search configuration ### **lsp** Lsp config ### **terminal** Terminal config ### **rulers** Column numbers at which to draw the rulers. Defaults to `[]`, meaning no rulers ### **whitespace** Whitespace config ### **bufferline** Persistently display open buffers along the top ### **indent-guides** Vertical indent width guides ### **workspace-lsp-roots** Workspace specific lsp ceiling dirs ### **default-line-ending** Which line ending to choose for new documents. Defaults to `native`. i.e. `crlf` on Windows, otherwise `lf`. ### **smart-tab** Enables smart tab ### **keybindings** Keybindings config ### **inline-diagnostics-cursor-line-enable** Inline diagnostics cursor line ### **inline-diagnostics-end-of-line-enable** Inline diagnostics end of line ### **get-language-config** Get the configuration for a specific language ### **get-language-config-by-filename** Get the language configuration for a specific file ### **set-language-config!** Set the language configuration # /Users/matt/.steel/cogs/helix/editor.scm ### **editor-focus** Get the current focus of the editor, as a `ViewId`. ```scheme (editor-focus) -> ViewId ``` ### **editor-mode** Get the current mode of the editor ```scheme (editor-mode) -> Mode? ``` ### **cx->themes** DEPRECATED: Please use `themes->list` ### **themes->list** Get the current themes as a list of strings. ```scheme (themes->list) -> (listof string?) ``` ### **editor-all-documents** Get a list of all of the document ids that are currently open. ```scheme (editor-all-documents) -> (listof DocumentId?) ``` ### **cx->cursor** DEPRECATED: Please use `current-cursor` ### **current-cursor** Gets the primary cursor position in screen coordinates, or `#false` if the primary cursor is not visible on screen. ```scheme (current-cursor) -> (listof? (or Position? #false) CursorKind) ``` ### **editor-focused-buffer-area** Get the `Rect` associated with the currently focused buffer. ```scheme (editor-focused-buffer-area) -> (or Rect? #false) ``` ### **editor->doc-id** Get the document from a given view. ### **editor-switch!** Open the document in a vertical split. ### **editor-set-focus!** Set focus on the view. ### **editor-set-mode!** Set the editor mode. ### **editor-doc-in-view?** Check whether the current view contains a document. ### **set-scratch-buffer-name!** Set the name of a scratch buffer. ### **set-buffer-uri!** Set the URI of the buffer ### **editor-doc-exists?** Check if a document exists. ### **editor->text** Get the document as a rope. ### **editor-document->path** Get the path to a document. ### **register->value** Get register value as a list of strings. ### **set-editor-clip-top!** Set the editor clipping at the top. ### **set-editor-clip-right!** Set the editor clipping at the right. ### **set-editor-clip-left!** Set the editor clipping at the left. ### **set-editor-clip-bottom!** Set the editor clipping at the bottom.