v0.15.1 makes :notify delivery configurable. The bell and desktop-notification protocol live in a new [notify] config section, with osc777 (the form Ghostty recommends) as the default and osc9 for terminals that speak only that.
Added
Configurable :notify delivery (#122)
:notify previously hardcoded a terminal bell plus an OSC 9 desktop notification. A new [notify] section lets you pick both pieces:
[notify]
bell = true # ring the terminal bell
desktop = "osc777" # "osc777" | "osc9" | "both" | "off"osc777(default) — rxvt-stylenotify;title;body. Renders with a proper "sofka" title in Ghostty (which recommends this form), kitty, WezTerm, foot, and urxvt.osc9— iTerm2-style body-only. For iTerm2 and Windows Terminal, which speak only that; also understood by Ghostty, kitty, WezTerm, and foot. iTerm2 and Windows Terminal users needdesktop = "osc9"to keep desktop notifications — called out in the README.both— emit OSC 9 and OSC 777 together. Pick this on purpose: terminals that speak several (Ghostty, kitty, WezTerm, foot) would otherwise show duplicate notifications, which is why one protocol is the default.off— flash only, no bell, no escape sequence.
Other niceties the change brought along:
- OSC sequences are now BEL-terminated to match every terminal's documented examples; the previous ST terminator worked in most but not all.
- Control characters are stripped from object-derived text so log content can't smuggle escape sequences into the terminal.
- Unknown
desktopvalues warn at config load (:config) and behave as the default — the section re-applies on:reloadand per-context on context switches like every other config section. - Sequence building is a pure function (
notification_sequence) with unit tests that pin the exact emitted bytes per protocol.
Full Changelog: v0.15.0...v0.15.1