Skip to content

Releases: not-elm/orzma

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 11:34
9fca0e4

Highlights

The default shortcuts are now Alt chords

Until 0.2, the stock pane and vi-mode shortcuts started with <Leader>. Tapping the leader before every key made frequent actions, such as moving between panes, awkward, so they are now direct Alt chords:

Action 0.2 0.3
Move between panes <Leader>h / j / k / l Alt+h / j / k / l
Split a pane <Leader>i / o Alt+i / o
Close a pane <Leader>p Alt+p
Resize a pane <Leader:r>Shift+H / J / K / L Alt+Shift+H / J / K / L
Enter vi mode <Leader>s Alt+s

This is a breaking change. Before you upgrade:

  • macOS: the right Option key is now Alt (option_as_alt defaults to "right"), so it no longer types special characters. A Japanese (JIS) keyboard has no right Option key; set option_as_alt = "left" or "both" there.
  • The Alt chords orzma binds no longer reach the shell, such as readline's Alt+c and Alt+r.
  • If your configuration binds one of these chords to another action, orzma does not start until you rebind one of the two.
  • Repeatable bindings are now written r:<Leader>x. A configuration that still uses <Leader:r>x is ignored as a whole.

The leader key is still there for your own bindings, and you can bind the 0.2 keys back: Upgrading has the snippet, and Default Key Bindings lists every key.

Tabs

orzma now keeps several pane layouts as tabs, listed in a tab bar at the top of the window, so you can keep several screens going at once and switch between them. The shells in the tabs you are not looking at keep running.

Action Key
Open a new tab Alt+c
Next / previous tab Alt+] / Alt+[
Show tab 1–9 Alt+1 … Alt+9
Rename the tab Alt+r
Close the tab Alt+Shift+X

The mouse works too: click a tab to show it, + to open one, × to close one, double-click to rename, and drag to reorder. A tab you have not named shows the title of its active pane, and a new tab starts in the working directory of the active pane. Closing the last pane of a tab closes the tab, and closing the last tab quits orzma.

See Panes and Tabs for details.

Also in this release

  • Cmd+click (Ctrl+click on Windows and Linux) opens a URL printed as plain text, such as the address a development server prints.
  • orzma's shortcuts, other than copy and paste, now run while a web page has focus. Set direct-chords-over-webview = false in [shortcuts] to give them back to the page.
  • The wheel scrolls about three lines per cell of travel instead of six.
  • The macOS download is a .dmg instead of a .zip.
  • orzmd and orzbrowser draw their interface in the page. Quit them with q; Ctrl+c no longer quits.
  • Fixed: the window closed when the display went to sleep, and Cmd stayed held after Cmd+Shift+5 on macOS.

PR

⚠️ Breaking Changes

  • feat: add workspaces with a top tab bar by @not-elm in #370
  • feat(input): count Alt per key, excluding AltGr and a composing Option key (PR-A of 3) by @not-elm in #376
  • feat!: mark repeatable bindings with r: and let an abandoned leader key reach its direct chord (PR-B of 3) by @not-elm in #377
  • feat!: bind the stock pane, workspace, and vi-mode shortcuts to Alt chords (PR-C of 3) by @not-elm in #378

🚀 Features

  • ci(release): publish each release once, from a reviewed draft by @not-elm in #366
  • feat(release): ship the macOS app as a dmg instead of a zip by @not-elm in #368
  • feat(input): let direct shortcuts fire over a focused webview by @not-elm in #369
  • feat(orzmd): draw the rail, find box, outline sidebar, and toast in the page by @not-elm in #371
  • feat: open URLs detected in plain text with Cmd/Ctrl+click (PR-B of 2) by @not-elm in #373
  • feat(orzbrowser): draw the toolbar and address bar in a webview, with free search by @not-elm in #375
  • feat(orzmd): handle every key in the page with smooth scrolling by @not-elm in #381
  • feat: scroll 3 lines per cell of wheel travel by default, like Alacritty by @not-elm in #382
  • feat(ui): draw workspace tabs as rounded pills inside the tab bar by @not-elm in #383
  • feat(ui): color the displayed workspace tab with the app icon's violet by @not-elm in #385
  • refactor: rename workspaces to tabs by @not-elm in #388
  • feat: label unnamed tabs with their active pane's title by @not-elm in #390

🐛 Fixes

  • fix: keep the window open when its monitor disappears on display sleep by @not-elm in #367
  • fix(input): release modifiers macOS reports up after Cmd+Shift+5 by @not-elm in #387

📚 Documentation

  • docs(book): restructure the user guide around installation, reference, and upgrade pages by @not-elm in #386

Full Changelog: v0.2.1...v0.3.0

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 28 Sep 07:20
4509cd4

What's Changed

⚡ Performance

  • perf: shrink the Windows install from 574 MiB to 496 MiB by @not-elm in #363
  • perf(bundle): shrink the macOS app by 65 MiB by pruning the CEF framework by @not-elm in #364

🐛 Fixes

  • fix(bundle): drop the debug CEF render process from the macOS app by @not-elm in #360
  • fix(windows): build the MSI render process under a short target dir by @not-elm in #359

Full Changelog: v0.2.0...v0.2.1

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 04:22

Documents

Breaking changes since v0.1.0

v0.2.0 replaces the tmux integration with a built-in multiplexer, moves vi mode into orzma itself, and changes how webviews are addressed. Read this list before upgrading, especially if you keep a config.toml or maintain a program that uses the webview protocol.

tmux integration has been removed

orzma no longer speaks tmux control mode, so tmux -CC no longer switches orzma into integration mode. Panes now come from orzma's built-in multiplexer: you split, focus, resize, and kill them with the [shortcuts] actions. Windows, sessions, pane zoom, renaming, and detaching have no equivalent. Plain tmux still runs inside a pane like any other program.

Configuration

orzma now ignores a configuration it cannot read instead of refusing to start. A syntax error, an unknown section or key, or a malformed binding makes orzma start with every setting at its default and print the reason to standard error. As a result, an outdated v0.1.0 config no longer fails loudly. If your settings seem to have no effect, start orzma from a terminal (/Applications/orzma.app/Contents/MacOS/orzma) and read the error. Conflicts still stop startup: a key bound to two actions, or a font family that is not installed.

Remove or rewrite the following. Otherwise orzma ignores the whole file:

  • Removed shortcut actions. Delts]: detach-session, zoom-pane, new-window, kill-window, next-window, previous-window, next-session, previous-session, select-window-0…select-window-9, rename-window, rename-session`.

  • Removed [scrollback] section (seed-lines). It only applied when attaching to tmux. - **Fonts are chosen by family name0.1.0, normal, bold, italic,and bold_italic under [font] were paths to font files. Each one is now a table with a family and a style, looked up among the installed system fonts. A family that is not installed stops orzma from starting. Unknown keys under [font] are now rejected instead of ignored.

    # v0.1.0
    [font]
    normal = "~/Library/Fonts/MyMono-Regular.ttf"
    bold   = "~/Library/Fonts/MyMono-Bold.ttf"                                                      
    # v0.2.0
    [font.normal]                                                                                     family = "MyMono"
    style  = "Regular"
    [font.bold]
    style  = "Bold"   # family is taken from [font.normal]

Other changes:

  • New default shortcuts on macOS: copy = "Cmd+C", increase-font-size = "Cmd+Plus", decrease-font-size = "Cmd+-", and reset-font-size = "Cmd+0". If your config already binds one of these chords to another action, orzma stops at startup with a duplicate-binding error. Unbind the new action (for example copy = ""
  • kill-pane no longer asks for confirmation. It ends the active pane's shell right away.
  • Removed [mouse] keys. drag_threshold_px, autoscroll_base_period_ms,
    autoscroll_min_period_ms, and auo anything. orzma still ignoresunknown [mouse]` keys, so you don't need to edit them out.

Vi mode

orzma now provides vi mode itself in every pane, in place of Alacritty's vi mode and tmux copy-mode.
The [vi-mode] table is unchanged,

  • The search and jump actions (/, ?, n, N, f, F, t, T) are not implemented yet. Vi mode swallows those keys and does nothing.
  • toggle-rect-selection (Ctrl+Ves instead of a rectangle.

Webview protocol

This section is for programs that talk to the control socket directly. orzma 0.2.0 and a v0.1.0 client cannot work together. If you use ratatui_orzma, see the next section instead.

ts are addressed by host-minted instances, not by handles.** register now replies {"ok":true,"handle":"…","instance":"…"}. The instance (32 lowercase hex digits) is what mount, unmount, focus, and navigate address. To place the same handle more than once, request another instance with the new new_instance op. The client-chosen instance_id of the OSC form no longer exists. new_instance is answered with a reply that has no op field, just like register, and replies to both requests come back in the order they were sent.

  • focus takes {"instance": "<instance>" | null}. null always removes focus. In v0.1.0, {"handle":"…","instance":null} focused the handle's default placement; it now removes focus instead.
  • navigate takes instance instead of handle. orzma silently skips a navigate that has no
    instance.
  • Unmount-all has a wider scope. ESC _ Ounmount ESC \ with no parameters removes every placement in the terminal, whichever program mounted it. The v0.1.0 form removed only the calling program's views.
  • urlChanged requires the bridgress changes only if it was
    es have new fields and a new op.
    call and compositing now include instance. A new focus_changed push (handle, instance, focused) reports every focus change. Clients must ignore pushes with an op they don't recognize.
  • Clicking a webview now gives it keyboard focus. Outside vi mode, clicking an interactive view sends keys to the page. Only the view's forward keys and orzma's <Leader> shortcuts still reach the TUI. List the keys your TUI needs to keep in forward_keys (you can replace the list later with set_forward_keys), or register the view with interactive: false.
  • Identifier formats changed. A handle is now 26 base32 characters, and a token is orzma: followed by 26 base32 characters. Keep treating both as opaque.

ratatui_orzma 0.2.0

ratatui_orzma 0.2.0 speaks only the v0.2.0 protocol, so upgrade the SDK and orzma together.

  • WebviewHandle::id() has been removed. Use handle_id() for the registration (a HandleId) and instance_id() for its default placement.
  • WebviewWidget::new now takes a placement instance id. Passing a HandleId doesn't compile.
  • WebviewWidget::focused() and is_focused() have been removed. Use WebviewHandle::focus() or WebviewInstance::focus() to take focus and Orzma::blur() to release it. WebviewHandle::read_focus_changes() tells you the current focus state.
  • OrzmaError has two new variantsed. Exhaustive match`es need armsfor them.
  • $TMUX_PANE no longer stands in for $ORZMA_TOKEN. Both $ORZMA_SOCK and $ORZMA_TOKEN must be set.
// v0.1.0
f.render_stateful_widget(
    WebviewWidget::new(view.id()).f
    area,
    &mut *orzma.frame(),
);

// v0.2.0
f.render_stateful_widget(
    WebviewWidget::new(view.instance_id()),
    area,
    &mut *orzma.frame(),
);
view.focus()?; // call once, after the page has composited

@orzma/web 0.2.0 has no API changes.


What's Changed

⚠️ Breaking Changes

  • Update Bevy and CEF versions. by @not-elm in #255
  • feat(font): resolve terminal + UI font by system family name by @not-elm in #262
  • refactor!: remove tmux mode (PR-0 of the local multiplexer plan) by @not-elm in #264
  • fix: wire the APC webview mount path end to end by @not-elm in #269
  • feat!: add the built-in multiplexer with a Bevy-free backend thread (PR-1) by @not-elm in #276
  • refactor!: rename the mux crates and types to the orzmux prefix by @not-elm in #278
  • feat(webview): focus the page on click and keep forward keys on the TUI by @not-elm in #345
  • fix: repair user-visible leftovers of removed designs by @not-elm in #357

🚀 Features

  • feat(clipboard): migrate to Bevy system_clipboard; remove orzma Clipboard resource by @not-elm in #259
  • feat: support the Windows platform by @not-elm in #277
  • feat(orzmux): sample and log queue depths to diagnose buffer saturation by @not-elm in #279
  • feat(orzma_vt): implement CHA, VPA and HPA so absolute cursor addressing moves the cursor by @not-elm in #285
  • feat(orzma_vt): implement IRM so insert mode shifts the row instead of overwriting by @not-elm in #286
  • feat(orzma_vt): implement DECTCEM so an application can hide the cursor by @not-elm in #287
  • feat(orzma_vt): implement DECAWM so a program can turn autowrap off by @not-elm in #289
  • feat(orzma_vt): implement HPR, SCOSC/SCORC and the CSI ^ spelling of SD by @not-elm in #290
  • feat(orzma_tty, input): send the terminfo kcbt and kich1 strings for Shift-Tab and Insert by @not-elm in #292
  • feat(orzma_vt): implement OSC 4 and OSC 104 so a program can recolor the palette by @not-elm in #297
  • feat(orzma_vt): implement DECSTR so tput init restores the modes by @not-elm in #300
  • feat(orzma_vt): implement cursor blink (DECSET 12) and DECSCUSR by @not-elm in #301
  • feat(orzma_vt): implement OSC 10/11 and OSC 110/111 so nvim can read the background by @not-elm in #303
  • feat: implement OSC 52 so a program can write the system clipboard by @not-elm in #305
  • feat(input): resize panes by dragging the divider between them by @not-elm in #308
  • feat(orzma...
Read more

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 06 Jul 18:54
chore(licenses): regenerate THIRD-PARTY-LICENSES for marked-alert

Commit 01f4e5d added the marked-alert npm dependency without regenerating
the aggregated third-party license file, tripping the licenses-check drift
gate in CI. Regenerate it to add the marked-alert 2.1.2 (MIT) entry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>