--- tags: api/syscall references: - plug-api/syscalls/editor.ts - client/plugos/syscalls/editor.ts - plugs/editor/editor.ts - plugs/editor/navigate.ts --- The Editor API provides functions for interacting with the editor interface. ## editor.acceptCompletion `editor.acceptCompletion()` Accepts the currently selected completion when the completion popup is active. **Returns:** - `boolean` — Whether an active completion was accepted. ## editor.alert `editor.alert(message)` Shows a browser alert dialog. **Parameters:** - `message` (`string`) — The alert message. ## editor.closeCompletion `editor.closeCompletion()` Closes the active editor completion popup. ## editor.configureVimMode `editor.configureVimMode()` Configures CodeMirror Vim mode from the current SilverBullet Vim settings. ## editor.confirm `editor.confirm(message, options?)` Prompts the user to confirm or cancel an action. **Parameters:** - `message` (`string`) — The confirmation message. - `options?` (`{ destructive?: boolean }`) — Optional dialog styling settings. **Returns:** - `boolean` — Whether the user confirmed. ## editor.copyToClipboard `editor.copyToClipboard(data)` Copies text or binary Blob data to the system clipboard. Clipboard access requires a secure HTTPS context. **Parameters:** - `data` (`string | Blob`) — The text or Blob to copy. **Example:** ```lua editor.copyToClipboard("Copied text") ``` ## editor.cursorCharLeft `editor.cursorCharLeft()` Moves the cursor one character left, respecting bidirectional text. ## editor.cursorCharRight `editor.cursorCharRight()` Moves the cursor one character right, respecting bidirectional text. ## editor.cursorDocEnd `editor.cursorDocEnd()` Moves the cursor to the end of the document. ## editor.cursorDocStart `editor.cursorDocStart()` Moves the cursor to the start of the document. ## editor.cursorGroupLeft `editor.cursorGroupLeft()` Moves the cursor left by one character group or word. ## editor.cursorGroupRight `editor.cursorGroupRight()` Moves the cursor right by one character group or word. ## editor.cursorLineBoundaryLeft `editor.cursorLineBoundaryLeft()` Moves the cursor to the left visual boundary of the current line. ## editor.cursorLineBoundaryRight `editor.cursorLineBoundaryRight()` Moves the cursor to the right visual boundary of the current line. ## editor.cursorLineDown `editor.cursorLineDown()` Moves completion selection down when open, otherwise moves the cursor down one visual line. ## editor.cursorLineEnd `editor.cursorLineEnd()` Moves the cursor to the end of the current logical line. ## editor.cursorLineStart `editor.cursorLineStart()` Moves the cursor to the start of the current logical line. ## editor.cursorLineUp `editor.cursorLineUp()` Moves completion selection up when open, otherwise moves the cursor up one visual line. ## editor.cursorPageDown `editor.cursorPageDown()` Moves completion selection down one page when open, otherwise moves the cursor down one viewport page. ## editor.cursorPageUp `editor.cursorPageUp()` Moves completion selection up one page when open, otherwise moves the cursor up one viewport page. ## editor.deleteCharBackward `editor.deleteCharBackward()` Deletes the selection or the character before the cursor. ## editor.deleteCharForward `editor.deleteCharForward()` Deletes the selection or the character after the cursor. ## editor.deleteGroupBackward `editor.deleteGroupBackward()` Deletes the selection or the character group before the cursor. ## editor.deleteGroupForward `editor.deleteGroupForward()` Deletes the selection or the character group after the cursor. ## editor.deleteLine `editor.deleteLine()` Deletes the current line or the lines touched by the selection. ## editor.deleteLineBoundaryBackward `editor.deleteLineBoundaryBackward()` Deletes the selection or text back to the current line boundary. ## editor.deleteLineBoundaryForward `editor.deleteLineBoundaryForward()` Deletes the selection or text forward to the current line boundary. ## editor.dispatch `editor.dispatch(change)` Dispatches a CodeMirror transaction to the editor view. **Parameters:** - `change` (`Transaction`) — The CodeMirror transaction to dispatch. ## editor.downloadFile `editor.downloadFile(filename, dataUrl)` Triggers a browser download of a data URL under the given filename. **Parameters:** - `filename` (`string`) — The downloaded filename. - `dataUrl` (`string`) — The data URL to download. **Example:** ```lua editor.downloadFile("test.txt", "data:text/plain;base64,SGVsbG8=") ``` ## editor.filterBox `editor.filterBox(label, options, helpText?, placeHolder?)` Shows a filterable option picker similar to the page navigator. **Parameters:** - `label` (`string`) — The label shown beside the filter input. - `options` (`FilterOption[]`) — The available options. - `helpText?` (`string`) — Help text shown below the picker. - `placeHolder?` (`string`) — Placeholder text for the filter input. **Returns:** - `FilterOption | undefined` — The selected option, or undefined if dismissed. **Example:** ```lua local result = editor.filterBox("Select:", { {name = "Option 1", value = "1"}, {name = "Option 2", value = "2", description = "More details"} }) ``` ## editor.flashNotification `editor.flashNotification(message, type?, options?)` Shows a flash notification in the editor UI. **Parameters:** - `message` (`string`) — The message to display. - `type?` (`NotificationType`) — The notification severity: "info", "error", or "warning". - `options?` (`{ timeout?: number; actions?: NotificationAction[] }`) — Optional timeout and action buttons. A timeout of 0 keeps the notification visible until dismissed. **Example:** ```lua editor.flashNotification("Update available", "warning", { timeout = 0, actions = {{ name = "Reload", run = function() editor.reloadUI() end }} }) ``` ## editor.focus `editor.focus()` Returns focus to the main editor. ## editor.fold `editor.fold()` Folds the code or markup region at the cursor. ## editor.foldAll `editor.foldAll()` Folds all foldable regions in the editor. ## editor.forceLint `editor.forceLint()` Forces editor linting to run, including when the content has not changed. ## editor.getCurrentEditor `editor.getCurrentEditor()` Returns the name of the currently active editor implementation. **Returns:** - `string` — The editor name, or `page` for the page editor. ## editor.getCurrentLine `editor.getCurrentLine()` Returns the current line's range and text, including a `|^|` cursor marker variant. **Returns:** - `{ from: number; to: number; text: string; textWithCursor: string }` — The line containing the main selection head. ## editor.getCurrentPage `editor.getCurrentPage()` Returns the name of the page or document currently open in the editor. **Returns:** - `string` — The current page name. ## editor.getCurrentPageMeta `editor.getCurrentPageMeta()` Returns metadata for the page or document currently open in the editor. **Returns:** - `PageMeta | undefined` — The current page metadata, if indexed. ## editor.getCurrentPath `editor.getCurrentPath()` Returns the path of the page or document currently open in the editor. **Returns:** - `string` — The current page path. ## editor.getCursor `editor.getCursor()` Returns the cursor position as a character offset from the start of the document. **Returns:** - `number` — The cursor offset. ## editor.getRecentlyOpenedPages `editor.getRecentlyOpenedPages()` Returns page metadata ordered from most to least recently opened. **Returns:** - `PageMeta[]` — Recently opened pages. ## editor.getSelection `editor.getSelection()` Returns the current selection range and selected text. **Returns:** - `{ from: number; to: number; text: string }` — The main editor selection. ## editor.getText `editor.getText()` Returns the full text of the currently open page or document. **Returns:** - `string` — The editor contents. ## editor.getUiOption `editor.getUiOption(key)` Returns the current value of an editor UI option. **Parameters:** - `key` (`string`) — The UI option key. **Returns:** - `any` — The option value. ## editor.goHistory `editor.goHistory(delta)` Moves backward or forward through browser history. **Parameters:** - `delta` (`number`) — The relative history offset; negative moves backward and positive moves forward. ## editor.hidePanel `editor.hidePanel(id)` Hides the panel at a specified editor UI location. **Parameters:** - `id` (`string`) — The panel location identifier. ## editor.indentLess `editor.indentLess()` Decreases indentation for the current line or selection. ## editor.indentMore `editor.indentMore()` Increases indentation for the current line or selection. ## editor.insertAtCursor `editor.insertAtCursor(text, scrollIntoView?, cursorPlaceHolder?)` Inserts text at the cursor and moves the cursor after it or to an optional `|^|` marker. **Parameters:** - `text` (`string`) — The text to insert. - `scrollIntoView?` (`boolean`) — Whether to scroll the new cursor position into view. - `cursorPlaceHolder?` (`boolean`) — Whether to remove `|^|` and move the cursor to its position. ## editor.insertAtPos `editor.insertAtPos(text, pos, cursorPlaceHolder?)` Inserts text at a character offset, optionally placing the cursor at a `|^|` marker. **Parameters:** - `text` (`string`) — The text to insert. - `pos` (`number`) — The character offset at which to insert. - `cursorPlaceHolder?` (`boolean`) — Whether to remove `|^|` and move the cursor to its position. ## editor.insertNewline `editor.insertNewline()` Accepts the active completion, or inserts a newline with appropriate indentation. ## editor.invokeCommand `editor.invokeCommand(name, args?)` Invokes a client command by name. **Parameters:** - `name` (`string`) — The command name. - `args?` (`string[]`) — Arguments passed to the command. ## editor.isMobile `editor.isMobile()` Checks whether the current device lacks a fine pointer and should be treated as mobile. **Returns:** - `boolean` — Whether the editor is running in a mobile-style pointer environment. ## editor.moveCursor `editor.moveCursor(pos, center?)` Moves and focuses the cursor at a character offset, scrolling it into view. **Parameters:** - `pos` (`number`) — The character offset to move to. - `center?` (`boolean`) — Whether to vertically center the cursor. ## editor.moveCursorToLine `editor.moveCursorToLine(line, column?, center?)` Moves the cursor to a one-based line and column, clamping the column to the line length. **Parameters:** - `line` (`number`) — The one-based line number. - `column?` (`number`) — The one-based column number. - `center?` (`boolean`) — Whether to vertically center the cursor. ## editor.moveLineDown `editor.moveLineDown()` Moves the current line or selected lines downward. ## editor.moveLineUp `editor.moveLineUp()` Moves the current line or selected lines upward. ## editor.navigate `editor.navigate(ref, replaceState?, newWindow?)` Navigates to a page reference without restoring its remembered cursor and scroll position. **Parameters:** - `ref` (`Ref | string`) — The page reference to navigate to. - `replaceState?` (`boolean`) — Whether to replace the current browser history state. - `newWindow?` (`boolean`) — Whether to open the reference in a new window. **Example:** ```lua editor.navigate("CHANGELOG@123") ``` ## editor.newWindow `editor.newWindow()` Opens the current SilverBullet URL in a new browser window. ## editor.open `editor.open(ref, replaceState?, newWindow?)` Opens a page reference and restores its remembered cursor and scroll position when possible. **Parameters:** - `ref` (`Ref | string`) — The page reference to open. - `replaceState?` (`boolean`) — Whether to replace the current browser history state. - `newWindow?` (`boolean`) — Whether to open the reference in a new window. **Example:** ```lua editor.open("CHANGELOG") ``` ## editor.openCommandPalette `editor.openCommandPalette()` Opens the command palette. ## editor.openPageNavigator `editor.openPageNavigator(mode?)` Opens the page navigator in the requested browsing mode. **Parameters:** - `mode?` (`page | meta | document | all`) — The navigator mode. ## editor.openSearchPanel `editor.openSearchPanel()` Opens the editor's native search panel. ## editor.openUrl `editor.openUrl(url, existingWindow?)` Opens a URL in the browser. **Parameters:** - `url` (`string`) — The URL to open. - `existingWindow?` (`boolean`) — Whether to reuse an existing window. ## editor.prompt `editor.prompt(message, defaultValue?)` Prompts the user for text input. **Parameters:** - `message` (`string`) — The prompt message. - `defaultValue?` (`string`) — The initial input value. **Returns:** - `string | undefined` — The entered text, or undefined if dismissed. ## editor.rebuildEditorState `editor.rebuildEditorState()` Rebuilds the CodeMirror editor state from the current client configuration. ## editor.redo `editor.redo()` Redoes the most recently undone editor change. ## editor.reloadConfigAndCommands `editor.reloadConfigAndCommands()` Reloads space scripts and styles, then rebuilds the editor state. ## editor.reloadPage `editor.reloadPage()` Force reloads the current page in the editor. ## editor.reloadUI `editor.reloadUI()` Force reloads the browser UI. ## editor.replaceRange `editor.replaceRange(from, to, text, cursorPlaceHolder?)` Replaces a text range, optionally placing the cursor at a `|^|` marker in the replacement. **Parameters:** - `from` (`number`) — The start offset of the range. - `to` (`number`) — The end offset of the range. - `text` (`string`) — The replacement text. - `cursorPlaceHolder?` (`boolean`) — Whether to remove `|^|` and move the cursor to its position. ## editor.save `editor.save()` Forces the current page or document to be saved. ## editor.selectAll `editor.selectAll()` Selects the entire editor document. ## editor.selectCharLeft `editor.selectCharLeft()` Extends the selection one character left, respecting bidirectional text. ## editor.selectCharRight `editor.selectCharRight()` Extends the selection one character right, respecting bidirectional text. ## editor.selectDocEnd `editor.selectDocEnd()` Extends the selection to the end of the document. ## editor.selectDocStart `editor.selectDocStart()` Extends the selection to the start of the document. ## editor.selectGroupLeft `editor.selectGroupLeft()` Extends the selection left by one character group or word. ## editor.selectGroupRight `editor.selectGroupRight()` Extends the selection right by one character group or word. ## editor.selectLineBoundaryLeft `editor.selectLineBoundaryLeft()` Extends the selection to the left visual boundary of the current line. ## editor.selectLineBoundaryRight `editor.selectLineBoundaryRight()` Extends the selection to the right visual boundary of the current line. ## editor.selectLineDown `editor.selectLineDown()` Extends the selection downward by one visual line. ## editor.selectLineEnd `editor.selectLineEnd()` Extends the selection to the end of the current logical line. ## editor.selectLineStart `editor.selectLineStart()` Extends the selection to the start of the current logical line. ## editor.selectLineUp `editor.selectLineUp()` Extends the selection upward by one visual line. ## editor.selectPageDown `editor.selectPageDown()` Extends the selection downward by one viewport page. ## editor.selectPageUp `editor.selectPageUp()` Extends the selection upward by one viewport page. ## editor.sendMessage `editor.sendMessage(type, data?)` Sends a public message to the active document editor, if one is open. **Parameters:** - `type` (`string`) — The message type. - `data?` (`any`) — Data attached to the message. ## editor.setSelection `editor.setSelection(from, to)` Sets the main editor selection to a character range. **Parameters:** - `from` (`number`) — The selection anchor offset. - `to` (`number`) — The selection head offset. ## editor.setText `editor.setText(newText, shouldIsolateHistory?)` Updates the editor text with a minimal diff while preserving the cursor when possible. **Parameters:** - `newText` (`string`) — The complete replacement text. - `shouldIsolateHistory?` (`boolean`) — Whether to isolate the change in undo history. ## editor.setUiOption `editor.setUiOption(key, value)` Sets an editor UI option and reloads the editor. **Parameters:** - `key` (`string`) — The UI option key. - `value` (`any`) — The option value. ## editor.showPanel `editor.showPanel(id, mode, html, script)` Shows an HTML panel in a specified editor UI location. **Parameters:** - `id` (`string`) — The panel location identifier. - `mode` (`number`) — The panel display mode or size. - `html` (`HTMLElement | HTMLElement[] | string`) — The panel content. - `script` (`string`) — A script associated with the panel content. ## editor.showProgress `editor.showProgress(progressType, progressPercentage?)` Shows, updates, or hides a sync or indexing progress indicator. **Parameters:** - `progressType` (`sync | index`) — The operation represented by the indicator. - `progressPercentage?` (`number`) — Completion percentage, or undefined to hide the indicator. ## editor.startCompletion `editor.startCompletion()` Explicitly starts editor completion at the cursor. ## editor.toggleComment `editor.toggleComment()` Comments or uncomments the current line or selection. ## editor.toggleFold `editor.toggleFold()` Toggles folding for the region at the cursor. ## editor.transposeChars `editor.transposeChars()` Transposes the characters around the cursor. ## editor.undo `editor.undo()` Undoes the most recent editor change. ## editor.unfold `editor.unfold()` Unfolds the folded region at the cursor. ## editor.unfoldAll `editor.unfoldAll()` Unfolds all folded regions in the editor. ## editor.updateBakedSections `editor.updateBakedSections()` Re-evaluates every baked section on the current page and replaces each body with its latest output. ## editor.uploadFile `editor.uploadFile(accept?, capture?)` Opens the browser's native file picker and returns the selected file's bytes and metadata. **Parameters:** - `accept?` (`string`) — Accepted file types for the file input. - `capture?` (`string`) — The media capture mode for the file input. **Returns:** - `UploadFile` — The selected file's name, content type, and bytes. **Example:** ```lua local file = editor.uploadFile(".txt") print(file.name) ``` ## editor.vimEx `editor.vimEx(exCommand)` Executes a Vim Ex command in the active Vim-mode editor. **Parameters:** - `exCommand` (`string`) — The Ex command to execute.