Elyra
Elyra The coding agent eTerm The terminal that knows where each command ends Huskarl AI colleagues on your own Mac Starf An activity monitor for Apple silicon that never invents a number etrans An SSH and SFTP client for macOS Elyra VM Virtual machines for macOS, Linux and Windows on your Mac Litr A small, native web browser for macOS Notr A notebook for macOS e The native code editor Elyra Grove Native local development environment Askr The real server for Laravel & PHP Elyra Framework Rust + Svelte 5 framework for desktop apps Elyra Conductor Local project conductor Refr Local-first PDF workspace for macOS Elyra Workspace A desktop workspace for coding agents Elyra SQL Server MySQL-compatible SQL server in Rust Elyra Félagi Agents as teammates on one board Elyra SQL Client Native desktop SQL workbench Elyra SQL Anywhere Replication-ready SQL engine Elyra Sjá SEO & GEO workspace for macOS Elyra DataGrid Server-driven data grid for Laravel
Release notes
Changelog
Elyra
Keybindings

Keybindings

These are the defaults. Any of them can be moved, added to or taken away — see Changing a key — and the Keys pane in settings and the command palette show the keys as they are after that.

Windows and tabs

Key Does
cmd-n New window
cmd-t New tab, in the directory you are working in
cmd-w Close the pane, then the tab, then the window
cmd-shift-] / cmd-shift-[ Next / previous tab
cmd-1 … cmd-9 Go to tab by number

Panes

Key Does
cmd-d Split right
cmd-shift-d Split down
cmd-] / cmd-[ Next / previous pane

Dividers can be dragged. Clicking a pane focuses it.

The session

Key Does
cmd-c / cmd-v Copy / paste
cmd-k Clear the screen and the scrollback
cmd-f Find in session
cmd-g / cmd-shift-g Next / previous match
cmd-up / cmd-down Previous / next prompt
cmd-enter Ask AI for a command
cmd-r Review a pull request
cmd-shift-r Review the uncommitted changes here, with the comments put on this session's prompt
cmd-shift-e Ask why the last command failed
cmd-e The files of the directory the session is in, on the right — a click opens a folder or a file in the editor chosen under Links
return Approve and run the command being proposed
cmd-return Put the proposed command on the input line instead
cmd-shift-return Run a proposal that was held back for looking destructive
cmd-delete Forget the AI conversation and start from nothing
cmd-shift-enter Fold or unfold the block at the cursor
cmd-shift-s Send the block's output to the pane that had focus before this one
cmd-shift-c Compare the block's output with the last run of the same command
cmd-shift-m Copy the session as a runbook: every command and its output, as Markdown
cmd-+ / cmd-- / cmd-0 Bigger, smaller, actual size — cmd-= is bigger too, for keyboards where + needs shift

While typing a command

Key Does
→ Take the grey suggestion, or the chosen completion
return Take the chosen completion; with nothing chosen, run the line
↑ ↓ Choose in the completion list, while one is open
escape Close the list; the escape still reaches the shell
tab Nothing here — this is the shell's own completion

See Suggestions.

Everything else

Key Does
cmd-shift-p Command palette: this project's commands, then every command above
cmd-j Every session in the window: waiting for you first, then failed, then still going. Type to narrow, return to go there
cmd-, Settings — and closes it again
cmd-shift-, Read settings.toml again, keys and all
escape Closes whatever is open on top; otherwise reaches the shell
cmd-q Quit

The mouse

  • One click places the selection, two select a word, three select the line
  • Clicking a fold summary puts the output back
  • Dragging a tab along the strip moves it; the tabs trade places as the pointer passes their middles, so the strip shows the order before you let go. The order is kept with the session. The empty part of the strip is the title bar: dragging it moves the window, and a double-click does what the system does with a title bar
  • cmd-click follows an OSC 8 link, or opens a path or address that is simply there in the text: http://localhost:3000 in the browser, src/main.rs:12:5 in the editor chosen under Links, at that line. With cmd held, what a click would open is underlined
  • Dropping a file from the Finder writes its path where you are typing, and a space after it. Several files at once become several paths. A path is left bare when it can be, and quoted when it cannot — a space, a $, a ;; a newline in a filename, which macOS allows, is written as $'…\n…' so that dropping it cannot submit the line
  • Shift reaches past a program that has grabbed the mouse, so you can still select text in vim or htop

What the shell gets

Escape, arrows, function keys, and control and option combinations are encoded and sent to the shell. Printable characters are not sent from the key event at all: they go through the system's input handler first, which is what allows input methods and dead keys to compose. See Architecture.

One key is worth naming on its own:

Key Sends For
return CR Run the line
shift-return ESC CR A new line inside a prompt that takes several
option-return ESC CR The same thing, under the name Macs use for it

xterm sends CR for return however it is modified, so nothing on the other end can tell shift-return from return. Every prompt that accepts more than one line has had to work around that, and they have all settled on the same sequence: ESC CR, which is what meta-return sends. It is what Claude Code's own /terminal-setup writes into iTerm2 and VS Code, and eterm sends it without being asked.

An application that would rather not rely on a convention can ask instead. eterm answers CSI ? u and keeps the flags pushed with CSI > 1 u, and then reports the keys the old encodings cannot express as CSI code ; modifiers u:

Key Sent as
shift-return, option-return CSI 13 ; 2 u, CSI 13 ; 3 u
shift-tab, shift-backspace CSI 9 ; 2 u, CSI 127 ; 2 u
escape, even alone CSI 27 u
ctrl-i, ctrl-m, ctrl-[ CSI 105 ; 5 u, CSI 109 ; 5 u, CSI 91 ; 5 u

Everything else keeps the encoding it has always had, which is what that flag on its own means: arrows, function keys, ctrl-a, and a plain return are unchanged. The three at the bottom are not merely ambiguous but identical — ctrl-i is a tab — and the whole point of asking is to tell them apart.

Only the first flag is honoured. An application that also asks for key release events or alternate keys gets a terminal reporting fewer events than it requested rather than wrong ones.

cmd-return is not this. It opens AI mode, and no combination with cmd in it is ever sent to the shell.

Changing a key

In ~/.config/eterm/settings.toml:

[keys.bind]
"cmd-shift-t" = "new_tab"   # another key for a new tab
"cmd-d" = "split_down"      # cmd-d splits downwards instead of to the right
"cmd-k" = "none"            # cmd-k reaches the shell instead of clearing

Each line is a key and what it does: an action's name, or none. The name is the action's own in snake case — new_tab, split_right, show_sessions, review_changes, offer_layout — and the command palette lists them all by what they do. A key keeps the defaults it does not name: the new key is added, and whatever that key did by default where the action lives is taken away. Moving an action is two lines, the new key and none on the old one.

Keys are written as in the tables above: modifiers cmd, shift, alt, ctrl joined by dashes to the key, and a space between two keystrokes of a sequence. The keys that belong to the settings window or to something open over a session — escape closing the palette, say — cannot be taken away from there.

cmd-shift-, reads the file again. A line that cannot be used — a key that is not one, a name that is not an action — is left out, and the Keys pane says which and why; the rest of the file still counts.

The quick terminal

A session that drops down from the top of the screen on one key, from any application, and goes back up on the same key or as soon as you click somewhere else. Its sessions keep running while it is up; the next press brings back the same ones. It sits above every window and on every Space, over a full-screen application too.

There is no key for it by default, because a global key is taken from every other application for as long as it is set. Keys in settings offers ⌃\``, ⌥Spaceand⌘⌥T`; any other goes in the settings file, written as the keys above are, with at least one modifier:

[quick]
hotkey = "ctrl-`"

Quick terminal in the command palette brings it down without a key. Closing its last session sends it back up with a fresh one waiting, rather than quitting eterm.