3.25.0
3.25.0
Minor Changes
-
21bc805: Add custom keymappings system for iTerm2-style key remapping. Users can define key combos and what the terminal sends when pressed (ignore, passthrough, escape sequence, hex code, or text), with optional per-platform targeting (macOS, Linux, Windows, or all platforms). Ships with built-in default mappings: standard scroll keys (Page Up/Down, Home/End for viewport navigation) on all platforms, macOS Natural Text Editing bindings (Option+Arrow word navigation, Option+Backspace word deletion, etc.), and a Shift+Enter → ESC CR mapping for all platforms (useful for TUI apps such as Claude Code). The reset button restores these factory defaults rather than clearing all mappings. Also fixes a bug where two
attachCustomKeyEventHandlercalls silently overwrote each other, and a bug where the passthrough action did not suppress the corresponding keyup event. (GH#118 by @ryanbbrown) -
7f8be34: Add Ukrainian localization. (GH#160 by @Xarakternuk)
-
d671acd: Refactor profile list modal to use base ListModal class (GH#109 by @taisau)
Refactored ProfileListModal to extend the base ListModal class instead of
reimplementing list UI logic, reducing code duplication and improving
maintainability. The modal now integrates seamlessly with the library's
generic list modal framework while preserving profile-specific UI features
like preset selection and default profile management. -
63dd9e1: Add scroll action keybindings (scrollLines, scrollPages, scrollToTop, scrollToBottom)
-
0f61c86: Add manual tab rename via pane context menu and command palette.
Terminal tabs previously showed only the static profile name, making
multiple sessions indistinguishable. Users can now right-click a
terminal tab and choose "Rename", or invoke the "Rename Terminal"
command, to set a custom title that persists across sessions. Clearing
the title restores the automatic name (profile name, executable, or
shell-set title). Fixes GH#94. (GH#141 by @niwo-gh) -
2096c16: Add AltScreenExitAddon to auto-scroll when exiting alt-screen mode
Patch Changes
-
272e8b8: Ensure all executable spawn calls use consistent environment variable handling for better PATH inheritance. Fixes external terminal emulator spawning (was completely missing environment), improves system PATH discovery commands (
getconf,reg) which were passed empty environment, and unifies environment handling across all spawn contexts. RenamessanitizedEnv()→sanitizeEnv(),applyFixedPtyEnv()→applyFixedEnv(), andFIXED_PTY_ENV→FIXED_ENVfor clarity and consistency since these apply to all spawned processes, not just PTY. -
850db0a: Add translations for scroll action keybindings in all languages
-
83a0f6b: Fix the donate button and "open documentation (donate)" command failing with an error on Obsidian 1.12.7+ due to a private API change. The plugin now finds the donation button directly from the community plugins list and falls back to opening the donation URL when that is not possible. (GH#157 by @janah01)
-
30caf9d: Resolve system PATH and sanitize inherited environment variables for embedded terminals. Fixes missing user-installed tools (in
/usr/local/bin,/opt/homebrew/bin, Windows user Python, etc.) that fail with "command not found" inside the integrated terminal when Obsidian is launched via Finder, Start Menu, or desktop launcher. Also prevents terminal misdetection by tools like Claude Code that triggered scroll-to-top issues during streaming. (#144 by @ahmadelafify)On first PTY spawn, queries the canonical system PATH from the OS (
/usr/libexec/path_helperon macOS,/etc/environmentwithgetconffallback on Linux, registryHKLM+HKCUon Windows) and merges missing entries into the PTY environment. Strips parent-app variables (TMUX,STY,TERM_PROGRAM,VSCODE_*,ZED_*) that cause misdetection, and setsTERM_PROGRAM=obsidian-terminalon all spawn contexts (Unix PTY, Windows shell, Windows resizer). -
dcac2c2: Fix scroll viewport reset during AI coding agent streaming output. Fixes GH#70. (Hopefully?)
Adds
SynchronizedOutputScrollAddonto address the scroll yank caused by AI
coding agents (pi, Claude Code) that use DEC 2026 synchronized output blocks
with\x1b[2J(clear-screen) inside each redraw frame.xterm.js 6.x buffers row renders during a synchronized output block but does
not guardydisp. When the terminal buffer is full and the user is scrolled
up,Buffer.scroll()decrementsydispon every scroll call during content
writes — the render at block-end sees this drifted value and paints "topmost
content" for one frame (scroll yank).The addon saves
viewportYandbaseYat block entry (\x1b[?2026h) and
restores the equivalent position at block exit (\x1b[?2026l) via
queueMicrotask. Microtasks run after all synchronous processing in the
current task but before the next animation frame, so the ydisp correction
lands before xterm's buffered render fires and no visible flash occurs.Workaround for xterm.js #5801
(partially addressed in xterm.js #5770
targeting 7.x, not yet available in the 6.x release line used by this plugin). -
706d22e: Reload ribbon icon when default profile changes