The editor
Opening files, git marks, find and replace, the Problems and Search drawer, the twenty-three languages Sirio colours, read-only snapshots from a pull request, and what the right-click menu offers.
An Editor tab always opens in the right pane of the centre split. Terminals and chats can move between the two panes while files stay on the right, so with an agent’s chat on the left, the file it writes sits beside it; see Tabs and splits. Double-click a file in the Files view of the right panel, click a path that a tool call or an agent’s answer shows in a chat, or click the ↗ at the end of an unfolded file in Changes. Open File in the command palette, or Ctrl+O with the focus outside a terminal, opens your system’s file picker. Ctrl+S saves.
A Markdown file opens as a rendered Preview, with its source one click away. One over 256 KiB opens as source, with a Render preview button. The Preview draws the HTML a README carries and Mermaid and PlantUML diagrams; see Markdown preview.
A path in an agent’s answer opens the file at the line the path names, as Agent chats explains.
Long lines
A long line of code stays on one row. When it runs wider than the tab, a scrollbar appears under the code and the view scrolls sideways. The scrollbar shows only while something overflows. Scroll with a sideways wheel or touchpad swipe, with Shift and the wheel, with the bar under the code, or with End and Home. The line numbers stay in place. Over the code, the pointer is a text cursor.
Git marks in the gutter
Added, changed and removed lines carry a mark beside the code. Click a mark to see its hunk in place.
Find and replace
Find and replace sits in a bar docked above the code, with match case, whole word and regular expressions.
Multiple cursors
Shift+Alt+Up and Shift+Alt+Down add cursors. Ctrl+Alt+Up and Ctrl+Alt+Down still move between panes.
The breadcrumb
A breadcrumb above the code shows the file’s path and the symbols around the cursor.
The status row
A row below the code shows the branch, the language server, the cursor’s position, the indentation, the line ending and the language, with the notification bell at its end.
Line endings
Sirio keeps a file’s line endings, so a file with Windows line endings keeps them when you save it.
Problems and Search
A drawer under the code holds two tabs, Problems and Search, one drawer per worktree. From a file tab, Ctrl+J, or Cmd+J on macOS, opens and closes it, and Ctrl+Shift+F, or Cmd+Shift+F, opens Search. Sirio keeps the drawer’s height and open tab per worktree, across a relaunch.
- Problems lists what the language servers report across the worktree, not only in the open file. The drawer opens by itself on an error you have not seen yet, and warnings never open it.
- Search looks through the worktree’s files as git lists them, with match case, whole word, regular expressions and include and exclude patterns. It searches an unsaved tab as you see it.
- Replace all replaces the text literally and leaves files with unsaved changes alone. It also skips links, read-only files and anything outside the worktree, and lists every file it skipped and why.
Editor settings
Settings → Editor is the page for the editor’s options.
Twenty-three languages, coloured
The grammars are part of the app, so Sirio colours a file the moment it opens.
Rust, Python, TypeScript, JavaScript, Go, JSON, TOML, shell scripts, Java, C, C++, Swift, Kotlin, Ruby, PHP, Lua, Zig, YAML, HTML, CSS, SQL, XML and Markdown. Python stub files (.pyi) and JSON with comments (.jsonc) come along with their parents.
Sirio paints every kind of token the parser finds, in the colours Zed uses: keywords purple, strings green, numbers orange, types yellow, functions blue, punctuation dimmed so the words of a dense line stand out. Plain identifiers keep your theme’s text colour, so the palette still follows the appearance you chose.
Files from a pull request
In the Files tab of a pull or merge request, the ↗ at the end of an unfolded file opens it in the editor; see Pull and merge requests. When your worktree sits at the request’s head, you get your own file, ready to edit. Otherwise Sirio opens a read-only snapshot of the file at the head, or at the base for a file the request deletes, in a tab of its own such as login.rs @ #578.
A bar across the snapshot reads “Read-only · #578 at a1b2c3d”, with Open local copy when the request keeps the file and your worktree has it. A snapshot shows the file as that commit holds it and stays fixed there, and Ctrl+S in it puts up a card that reads “[files] save failed: Read-only: open the local copy to edit”. It comes back after a restart.
The right-click menu
Working with the selection. In Code, Cut, Copy and Paste act on the editor selection, and so do Ctrl+X, Ctrl+C and Ctrl+V, or the same letters with Cmd on macOS. Ctrl+A selects the whole file. “Copy and Trim” copies the selection with the indentation every line shares removed, which is what you want when lifting a function out of a deeply nested block. In the Markdown Preview, drag across the text to select it and Ctrl+C, or Cmd+C on macOS, copies it.
Handing code to an agent. “Add to Agent Thread” adds the selection to the end of the message you are writing in that worktree’s agent chat, with the file’s path and line numbers first, and you choose when to send it. See Agent chats.
Reaching the file outside Sirio. “Reveal in File Manager” opens its folder in the system file browser, with the file selected on macOS and Windows, and “Open in Terminal” opens a terminal in its directory. “Open Markdown Preview” appears on Markdown files.
Pointing at a line. “Copy Permalink to Line” copies a GitHub URL for the selected lines, pinned to the commit currently checked out, so the link still points at the same code after the branch moves. “View File History” opens the right panel on History for the whole worktree. Type the file’s path in the Paths filter and press Enter to narrow the graph to it.
Navigating. “Go to Definition” and “Find References” need a language server; see Navigating code.
Entries you cannot use say why
Sirio hides an entry that does not apply. An entry that could apply but cannot right now stays visible and greyed out, and its reason shows as a tooltip when you rest the pointer on it: “Select some text first”, “No agent chat open in this worktree”, “This repository has no GitHub remote”. Each entry stays on one line, in the editor’s menu and in the terminal’s. The reason names the condition to meet, so you know what to do next.
Messages about a file appear on a small card over it, so the file stays in view, and a message about something you pointed at appears where you pointed.