par-term-emu-core-rust 0.27.0__tar.gz → 0.29.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/CHANGELOG.md +40 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/Cargo.lock +27 -26
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/Cargo.toml +3 -1
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/PKG-INFO +48 -1
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/README.md +47 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/API_REFERENCE.md +31 -3
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/CONFIG_REFERENCE.md +5 -3
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/VT_SEQUENCES.md +1 -1
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/VT_TECHNICAL_REFERENCE.md +2 -2
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/pyproject.toml +1 -1
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/python/par_term_emu_core_rust/__init__.py +1 -1
- par_term_emu_core_rust-0.29.0/src/badge.rs +616 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/lib.rs +7 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/python_bindings/pty.rs +151 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/python_bindings/terminal.rs +319 -2
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/python_bindings/types.rs +10 -1
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/shell_integration.rs +76 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/terminal/mod.rs +204 -6
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/terminal/sequences/osc.rs +485 -28
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/tmux_control.rs +75 -2
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/uv.lock +1 -1
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/.claude/agents/rust-python-terminal-expert.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/AGENTS.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/LICENSE +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/QUICKSTART.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/build.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/debug/diagnose_corruption.py +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/debug/test_debug_features.py +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/debug/test_wide_chars.py +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/ADVANCED_FEATURES.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/ARCHITECTURE.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/BUILDING.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/CROSS_PLATFORM.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/DOCUMENTATION_STYLE_GUIDE.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/FONTS.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/GRAPHICS_TESTING.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/MACROS.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/MATURIN_BEST_PRACTICES.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/REGIONAL_FLAG_LIMITATION.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/RUST_USAGE.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/SECURITY.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/STREAMING.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/TESTING_KITTY_ANIMATIONS.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/future-optimizations.md +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/proto/terminal.proto +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/pyrightconfig.json +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/python/par_term_emu_core_rust/debug.py +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/requirements-dev.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/ansi_utils.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/bin/streaming_server.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/cell.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/color.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/color_utils.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/conformance_level.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/cursor.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/debug.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/grapheme.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/graphics/animation.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/graphics/iterm.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/graphics/kitty.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/graphics/mod.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/graphics/placeholder.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/grid.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/html_export.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/macros.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/mouse.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/pty_error.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/pty_session.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/python_bindings/color_utils.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/python_bindings/conversions.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/python_bindings/enums.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/python_bindings/mod.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/python_bindings/streaming.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/JetBrainsMono-Regular.ttf +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/NotoEmoji-Regular.ttf +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/config.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/error.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/font_cache.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/formats/bmp.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/formats/jpeg.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/formats/mod.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/formats/png.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/formats/svg.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/mod.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/renderer.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/shaper.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/screenshot/utils.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/sixel.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/streaming/broadcaster.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/streaming/client.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/streaming/error.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/streaming/mod.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/streaming/proto.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/streaming/protocol.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/streaming/server.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/streaming/terminal.pb.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/terminal/colors.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/terminal/graphics.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/terminal/notification.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/terminal/progress.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/terminal/sequences/csi.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/terminal/sequences/dcs.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/terminal/sequences/esc.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/terminal/sequences/mod.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/terminal/write.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/text_utils.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/src/unicode_width_config.rs +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/theme.css +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/__next.__PAGE__.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/__next._full.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/__next._head.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/__next._index.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/__next._tree.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/chunks/0e7e54b03353fc64.js +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/chunks/2f236954d6a65e12.js +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/chunks/6a145f7d64f5cf03.js +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/chunks/6bd3cb3b56d06ca6.js +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/chunks/808d100a753cdcf2.js +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/chunks/a27b4f205d48ece2.css +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/chunks/a6dad97d9634a72d.js +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/chunks/a6dad97d9634a72d.js.map +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/chunks/e1140cc73d7c6ca2.js +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/chunks/ed8d72bcbb9aa3b2.js +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/chunks/turbopack-b9888d6049f35c64.js +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/qD3YDPAUHYDX2LyueNPUO/_buildManifest.js +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/qD3YDPAUHYDX2LyueNPUO/_clientMiddlewareManifest.json +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_next/static/qD3YDPAUHYDX2LyueNPUO/_ssgManifest.js +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_not-found/__next._full.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_not-found/__next._head.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_not-found/__next._index.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_not-found/__next._not-found.__PAGE__.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_not-found/__next._not-found.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_not-found/__next._tree.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/_not-found.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/favicon.ico +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/index.txt +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/manifest.json +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/web_term/theme.css +0 -0
- {par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/xterm-issue-draft.md +0 -0
|
@@ -5,6 +5,43 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.29.0] - 2026-02-04
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **OSC 7 Enhancements**: Percent-decoding, username/hostname parsing, port stripping, query/fragment removal, and path validation for `file://` URLs
|
|
12
|
+
- **Session Variable Sync**: OSC 7 now updates badge/session variables (`path`, `hostname`, `username`) so badge formats immediately reflect directory changes
|
|
13
|
+
- **CWD History Context**: CWD change log now records hostname and username; Python `CwdChange` exposes these fields
|
|
14
|
+
- **CWD Change Events**: New `TerminalEvent::CwdChanged` (and Python `cwd_changed` poll_events entry) fires on OSC 7 or manual `record_cwd_change`
|
|
15
|
+
- **Username Handling**: Shell integration stores optional username from `user@host` OSC 7 payloads
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- **API**: `record_cwd_change` now accepts optional `hostname` and `username` (defaults preserved); badge/session variables cleared when hostname/username unset
|
|
19
|
+
- **Dependencies**: Added `percent-encoding` and `url` crates for robust OSC 7 parsing
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
- **Badge Accuracy**: Badge variables `\(path)` and `\(hostname)` now stay in sync when updated via OSC 7
|
|
23
|
+
- **UTF-8 Paths**: Paths with spaces or Unicode characters from OSC 7 are correctly percent-decoded
|
|
24
|
+
|
|
25
|
+
## [0.28.0] - 2026-02-03
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
- **Badge Format Support (OSC 1337 SetBadgeFormat)**: iTerm2-style badge support for terminal overlays
|
|
29
|
+
- New `badge` module with `SessionVariables` struct for session information
|
|
30
|
+
- OSC 1337 SetBadgeFormat sequence parsing with base64-encoded format strings
|
|
31
|
+
- Variable interpolation using `\(variable)` syntax (e.g., `\(username)@\(hostname)`)
|
|
32
|
+
- Supports session prefix: `\(session.variable)` and direct: `\(variable)`
|
|
33
|
+
- Built-in variables: `hostname`, `username`, `path`, `job`, `last_command`, `profile_name`, `tty`, `columns`, `rows`, `bell_count`, `selection`, `tmux_pane_title`, `session_name`, `title`
|
|
34
|
+
- Custom variables via `set_custom(name, value)`
|
|
35
|
+
- Security validation rejects shell injection patterns (`$()`, backticks, pipes, etc.)
|
|
36
|
+
- Python bindings: `badge_format()`, `set_badge_format()`, `clear_badge_format()`, `evaluate_badge()`, `get_badge_session_variable()`, `set_badge_session_variable()`, `get_badge_session_variables()`
|
|
37
|
+
- Session variables auto-sync with terminal state (title, dimensions, bell count)
|
|
38
|
+
- Reference: [iTerm2 Badge Documentation](https://iterm2.com/documentation-badges.html)
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
- **Tmux Control Mode CRLF Handling**: Fixed parser to strip `\r` from `\r\n` line endings sent by tmux
|
|
42
|
+
- **Tmux Output Trailing Spaces**: Fixed `%output` notifications to preserve trailing spaces (regression from `.trim()` call)
|
|
43
|
+
- **OSC 133 Exit Code Parsing**: Fixed exit code extraction from `OSC 133 ; D ; <exit_code> ST` sequences
|
|
44
|
+
|
|
8
45
|
## [0.27.0] - 2026-02-01
|
|
9
46
|
|
|
10
47
|
### Added
|
|
@@ -782,6 +819,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
782
819
|
- **Unicode Support**: Full Unicode including emoji and wide characters
|
|
783
820
|
- **Python Integration**: PyO3 bindings for Python 3.12+
|
|
784
821
|
|
|
822
|
+
[0.28.0]: https://github.com/paulrobello/par-term-emu-core-rust/compare/v0.27.0...v0.28.0
|
|
823
|
+
[0.27.0]: https://github.com/paulrobello/par-term-emu-core-rust/compare/v0.26.0...v0.27.0
|
|
824
|
+
[0.26.0]: https://github.com/paulrobello/par-term-emu-core-rust/compare/v0.25.0...v0.26.0
|
|
785
825
|
[0.25.0]: https://github.com/paulrobello/par-term-emu-core-rust/compare/v0.24.0...v0.25.0
|
|
786
826
|
[0.24.0]: https://github.com/paulrobello/par-term-emu-core-rust/compare/v0.23.0...v0.24.0
|
|
787
827
|
[0.23.0]: https://github.com/paulrobello/par-term-emu-core-rust/compare/v0.22.1...v0.23.0
|
|
@@ -99,9 +99,9 @@ checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
|
|
|
99
99
|
|
|
100
100
|
[[package]]
|
|
101
101
|
name = "arc-swap"
|
|
102
|
-
version = "1.8.
|
|
102
|
+
version = "1.8.1"
|
|
103
103
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
104
|
-
checksum = "
|
|
104
|
+
checksum = "9ded5f9a03ac8f24d1b8a25101ee812cd32cdc8c50a4c50237de2c4915850e73"
|
|
105
105
|
dependencies = [
|
|
106
106
|
"rustversion",
|
|
107
107
|
]
|
|
@@ -437,9 +437,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
|
|
|
437
437
|
|
|
438
438
|
[[package]]
|
|
439
439
|
name = "bytes"
|
|
440
|
-
version = "1.11.
|
|
440
|
+
version = "1.11.1"
|
|
441
441
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
442
|
-
checksum = "
|
|
442
|
+
checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
|
|
443
443
|
|
|
444
444
|
[[package]]
|
|
445
445
|
name = "cc"
|
|
@@ -498,9 +498,9 @@ dependencies = [
|
|
|
498
498
|
|
|
499
499
|
[[package]]
|
|
500
500
|
name = "clap"
|
|
501
|
-
version = "4.5.
|
|
501
|
+
version = "4.5.57"
|
|
502
502
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
503
|
-
checksum = "
|
|
503
|
+
checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a"
|
|
504
504
|
dependencies = [
|
|
505
505
|
"clap_builder",
|
|
506
506
|
"clap_derive",
|
|
@@ -508,9 +508,9 @@ dependencies = [
|
|
|
508
508
|
|
|
509
509
|
[[package]]
|
|
510
510
|
name = "clap_builder"
|
|
511
|
-
version = "4.5.
|
|
511
|
+
version = "4.5.57"
|
|
512
512
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
513
|
-
checksum = "
|
|
513
|
+
checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238"
|
|
514
514
|
dependencies = [
|
|
515
515
|
"anstream",
|
|
516
516
|
"anstyle",
|
|
@@ -837,9 +837,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
|
|
|
837
837
|
|
|
838
838
|
[[package]]
|
|
839
839
|
name = "flate2"
|
|
840
|
-
version = "1.1.
|
|
840
|
+
version = "1.1.9"
|
|
841
841
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
842
|
-
checksum = "
|
|
842
|
+
checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
|
|
843
843
|
dependencies = [
|
|
844
844
|
"crc32fast",
|
|
845
845
|
"miniz_oxide",
|
|
@@ -1192,14 +1192,13 @@ dependencies = [
|
|
|
1192
1192
|
|
|
1193
1193
|
[[package]]
|
|
1194
1194
|
name = "hyper-util"
|
|
1195
|
-
version = "0.1.
|
|
1195
|
+
version = "0.1.20"
|
|
1196
1196
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1197
|
-
checksum = "
|
|
1197
|
+
checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
|
|
1198
1198
|
dependencies = [
|
|
1199
1199
|
"base64 0.22.1",
|
|
1200
1200
|
"bytes",
|
|
1201
1201
|
"futures-channel",
|
|
1202
|
-
"futures-core",
|
|
1203
1202
|
"futures-util",
|
|
1204
1203
|
"http",
|
|
1205
1204
|
"http-body",
|
|
@@ -1768,7 +1767,7 @@ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
|
|
|
1768
1767
|
|
|
1769
1768
|
[[package]]
|
|
1770
1769
|
name = "par-term-emu-core-rust"
|
|
1771
|
-
version = "0.
|
|
1770
|
+
version = "0.29.0"
|
|
1772
1771
|
dependencies = [
|
|
1773
1772
|
"anyhow",
|
|
1774
1773
|
"axum",
|
|
@@ -1783,6 +1782,7 @@ dependencies = [
|
|
|
1783
1782
|
"image",
|
|
1784
1783
|
"libc",
|
|
1785
1784
|
"parking_lot",
|
|
1785
|
+
"percent-encoding",
|
|
1786
1786
|
"portable-pty",
|
|
1787
1787
|
"proptest",
|
|
1788
1788
|
"prost",
|
|
@@ -1807,6 +1807,7 @@ dependencies = [
|
|
|
1807
1807
|
"tracing-subscriber",
|
|
1808
1808
|
"unicode-segmentation",
|
|
1809
1809
|
"unicode-width",
|
|
1810
|
+
"url",
|
|
1810
1811
|
"uuid",
|
|
1811
1812
|
"vte",
|
|
1812
1813
|
]
|
|
@@ -2433,9 +2434,9 @@ dependencies = [
|
|
|
2433
2434
|
|
|
2434
2435
|
[[package]]
|
|
2435
2436
|
name = "regex"
|
|
2436
|
-
version = "1.12.
|
|
2437
|
+
version = "1.12.3"
|
|
2437
2438
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2438
|
-
checksum = "
|
|
2439
|
+
checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
|
|
2439
2440
|
dependencies = [
|
|
2440
2441
|
"aho-corasick",
|
|
2441
2442
|
"memchr",
|
|
@@ -2445,9 +2446,9 @@ dependencies = [
|
|
|
2445
2446
|
|
|
2446
2447
|
[[package]]
|
|
2447
2448
|
name = "regex-automata"
|
|
2448
|
-
version = "0.4.
|
|
2449
|
+
version = "0.4.14"
|
|
2449
2450
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2450
|
-
checksum = "
|
|
2451
|
+
checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
|
|
2451
2452
|
dependencies = [
|
|
2452
2453
|
"aho-corasick",
|
|
2453
2454
|
"memchr",
|
|
@@ -2456,9 +2457,9 @@ dependencies = [
|
|
|
2456
2457
|
|
|
2457
2458
|
[[package]]
|
|
2458
2459
|
name = "regex-syntax"
|
|
2459
|
-
version = "0.8.
|
|
2460
|
+
version = "0.8.9"
|
|
2460
2461
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2461
|
-
checksum = "
|
|
2462
|
+
checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c"
|
|
2462
2463
|
|
|
2463
2464
|
[[package]]
|
|
2464
2465
|
name = "reqwest"
|
|
@@ -3594,9 +3595,9 @@ dependencies = [
|
|
|
3594
3595
|
|
|
3595
3596
|
[[package]]
|
|
3596
3597
|
name = "webpki-root-certs"
|
|
3597
|
-
version = "1.0.
|
|
3598
|
+
version = "1.0.6"
|
|
3598
3599
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3599
|
-
checksum = "
|
|
3600
|
+
checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca"
|
|
3600
3601
|
dependencies = [
|
|
3601
3602
|
"rustls-pki-types",
|
|
3602
3603
|
]
|
|
@@ -3940,18 +3941,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524"
|
|
|
3940
3941
|
|
|
3941
3942
|
[[package]]
|
|
3942
3943
|
name = "zerocopy"
|
|
3943
|
-
version = "0.8.
|
|
3944
|
+
version = "0.8.38"
|
|
3944
3945
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3945
|
-
checksum = "
|
|
3946
|
+
checksum = "57cf3aa6855b23711ee9852dfc97dfaa51c45feaba5b645d0c777414d494a961"
|
|
3946
3947
|
dependencies = [
|
|
3947
3948
|
"zerocopy-derive",
|
|
3948
3949
|
]
|
|
3949
3950
|
|
|
3950
3951
|
[[package]]
|
|
3951
3952
|
name = "zerocopy-derive"
|
|
3952
|
-
version = "0.8.
|
|
3953
|
+
version = "0.8.38"
|
|
3953
3954
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3954
|
-
checksum = "
|
|
3955
|
+
checksum = "8a616990af1a287837c4fe6596ad77ef57948f787e46ce28e166facc0cc1cb75"
|
|
3955
3956
|
dependencies = [
|
|
3956
3957
|
"proc-macro2",
|
|
3957
3958
|
"quote",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "par-term-emu-core-rust"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.29.0"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
rust-version = "1.75"
|
|
6
6
|
authors = ["Paul Robello <probello@gmail.com>"]
|
|
@@ -57,6 +57,8 @@ regex = "1.12.2"
|
|
|
57
57
|
serde = { version = "1.0.228", features = ["derive"] }
|
|
58
58
|
serde_json = "1.0.149"
|
|
59
59
|
serde_yaml = "0.9.34"
|
|
60
|
+
percent-encoding = "2.3.2"
|
|
61
|
+
url = "2.5.8"
|
|
60
62
|
|
|
61
63
|
# Streaming server dependencies
|
|
62
64
|
tokio = { version = "1.49", features = ["full"], optional = true }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: par-term-emu-core-rust
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.29.0
|
|
4
4
|
Classifier: License :: OSI Approved :: MIT License
|
|
5
5
|
Classifier: Environment :: Console
|
|
6
6
|
Classifier: Development Status :: 4 - Beta
|
|
@@ -50,6 +50,53 @@ A comprehensive terminal emulator library written in Rust with Python bindings f
|
|
|
50
50
|
|
|
51
51
|
[](https://buymeacoffee.com/probello3)
|
|
52
52
|
|
|
53
|
+
## What's New in 0.28.0
|
|
54
|
+
|
|
55
|
+
### 🏷️ Badge Format Support (OSC 1337 SetBadgeFormat)
|
|
56
|
+
|
|
57
|
+
iTerm2-style badge support for terminal overlays with variable interpolation:
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
from par_term_emu_core_rust import Terminal
|
|
61
|
+
|
|
62
|
+
term = Terminal(80, 24)
|
|
63
|
+
|
|
64
|
+
# Set badge format with variables
|
|
65
|
+
term.set_badge_format(r"\(username)@\(hostname)")
|
|
66
|
+
|
|
67
|
+
# Set session variables
|
|
68
|
+
term.set_badge_session_variable("username", "alice")
|
|
69
|
+
term.set_badge_session_variable("hostname", "server1")
|
|
70
|
+
|
|
71
|
+
# Evaluate badge - returns "alice@server1"
|
|
72
|
+
badge = term.evaluate_badge()
|
|
73
|
+
print(f"Badge: {badge}")
|
|
74
|
+
|
|
75
|
+
# Get all session variables
|
|
76
|
+
vars = term.get_badge_session_variables()
|
|
77
|
+
print(f"Columns: {vars['columns']}, Rows: {vars['rows']}")
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**New Methods:**
|
|
81
|
+
- `badge_format()` - Get current badge format template
|
|
82
|
+
- `set_badge_format(format)` - Set badge format with `\(variable)` placeholders
|
|
83
|
+
- `clear_badge_format()` - Clear badge format
|
|
84
|
+
- `evaluate_badge()` - Evaluate badge with session variables
|
|
85
|
+
- `get_badge_session_variable(name)` - Get a session variable value
|
|
86
|
+
- `set_badge_session_variable(name, value)` - Set a custom session variable
|
|
87
|
+
- `get_badge_session_variables()` - Get all session variables as a dictionary
|
|
88
|
+
|
|
89
|
+
**Built-in Variables:**
|
|
90
|
+
`hostname`, `username`, `path`, `job`, `last_command`, `profile_name`, `tty`, `columns`, `rows`, `bell_count`, `selection`, `tmux_pane_title`, `session_name`, `title`
|
|
91
|
+
|
|
92
|
+
**Security:** Badge formats are validated to reject shell injection patterns (backticks, `$()`, pipes, etc.)
|
|
93
|
+
|
|
94
|
+
### 🔧 Tmux Control Mode Fixes
|
|
95
|
+
|
|
96
|
+
- Fixed CRLF line ending handling (strips `\r` from `\r\n` line endings)
|
|
97
|
+
- Fixed `%output` notifications to preserve trailing spaces
|
|
98
|
+
- Fixed OSC 133 exit code parsing from `OSC 133 ; D ; <exit_code> ST`
|
|
99
|
+
|
|
53
100
|
## What's New in 0.27.0
|
|
54
101
|
|
|
55
102
|
### 🔄 Tmux Control Mode Auto-Detection
|
|
@@ -13,6 +13,53 @@ A comprehensive terminal emulator library written in Rust with Python bindings f
|
|
|
13
13
|
|
|
14
14
|
[](https://buymeacoffee.com/probello3)
|
|
15
15
|
|
|
16
|
+
## What's New in 0.28.0
|
|
17
|
+
|
|
18
|
+
### 🏷️ Badge Format Support (OSC 1337 SetBadgeFormat)
|
|
19
|
+
|
|
20
|
+
iTerm2-style badge support for terminal overlays with variable interpolation:
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
from par_term_emu_core_rust import Terminal
|
|
24
|
+
|
|
25
|
+
term = Terminal(80, 24)
|
|
26
|
+
|
|
27
|
+
# Set badge format with variables
|
|
28
|
+
term.set_badge_format(r"\(username)@\(hostname)")
|
|
29
|
+
|
|
30
|
+
# Set session variables
|
|
31
|
+
term.set_badge_session_variable("username", "alice")
|
|
32
|
+
term.set_badge_session_variable("hostname", "server1")
|
|
33
|
+
|
|
34
|
+
# Evaluate badge - returns "alice@server1"
|
|
35
|
+
badge = term.evaluate_badge()
|
|
36
|
+
print(f"Badge: {badge}")
|
|
37
|
+
|
|
38
|
+
# Get all session variables
|
|
39
|
+
vars = term.get_badge_session_variables()
|
|
40
|
+
print(f"Columns: {vars['columns']}, Rows: {vars['rows']}")
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**New Methods:**
|
|
44
|
+
- `badge_format()` - Get current badge format template
|
|
45
|
+
- `set_badge_format(format)` - Set badge format with `\(variable)` placeholders
|
|
46
|
+
- `clear_badge_format()` - Clear badge format
|
|
47
|
+
- `evaluate_badge()` - Evaluate badge with session variables
|
|
48
|
+
- `get_badge_session_variable(name)` - Get a session variable value
|
|
49
|
+
- `set_badge_session_variable(name, value)` - Set a custom session variable
|
|
50
|
+
- `get_badge_session_variables()` - Get all session variables as a dictionary
|
|
51
|
+
|
|
52
|
+
**Built-in Variables:**
|
|
53
|
+
`hostname`, `username`, `path`, `job`, `last_command`, `profile_name`, `tty`, `columns`, `rows`, `bell_count`, `selection`, `tmux_pane_title`, `session_name`, `title`
|
|
54
|
+
|
|
55
|
+
**Security:** Badge formats are validated to reject shell injection patterns (backticks, `$()`, pipes, etc.)
|
|
56
|
+
|
|
57
|
+
### 🔧 Tmux Control Mode Fixes
|
|
58
|
+
|
|
59
|
+
- Fixed CRLF line ending handling (strips `\r` from `\r\n` line endings)
|
|
60
|
+
- Fixed `%output` notifications to preserve trailing spaces
|
|
61
|
+
- Fixed OSC 133 exit code parsing from `OSC 133 ; D ; <exit_code> ST`
|
|
62
|
+
|
|
16
63
|
## What's New in 0.27.0
|
|
17
64
|
|
|
18
65
|
### 🔄 Tmux Control Mode Auto-Detection
|
|
@@ -140,6 +140,25 @@ Create a new terminal with specified dimensions.
|
|
|
140
140
|
- `reset()`: Reset terminal to default state
|
|
141
141
|
- `title() -> str`: Get terminal title
|
|
142
142
|
|
|
143
|
+
#### Badge Format (OSC 1337 SetBadgeFormat)
|
|
144
|
+
- `badge_format() -> str | None`: Get current badge format template
|
|
145
|
+
- `set_badge_format(format: str | None)`: Set badge format template with `\(variable)` placeholders
|
|
146
|
+
- `clear_badge_format()`: Clear badge format
|
|
147
|
+
- `evaluate_badge() -> str | None`: Evaluate badge format with session variables
|
|
148
|
+
- `get_badge_session_variable(name: str) -> str | None`: Get a session variable by name
|
|
149
|
+
- `set_badge_session_variable(name: str, value: str)`: Set a custom session variable
|
|
150
|
+
- `get_badge_session_variables() -> dict[str, str]`: Get all session variables
|
|
151
|
+
|
|
152
|
+
**Built-in Variables:** `hostname`, `username`, `path`, `job`, `last_command`, `profile_name`, `tty`, `columns`, `rows`, `bell_count`, `selection`, `tmux_pane_title`, `session_name`, `title`
|
|
153
|
+
|
|
154
|
+
**Example:**
|
|
155
|
+
```python
|
|
156
|
+
term.set_badge_format(r"\(username)@\(hostname)")
|
|
157
|
+
term.set_badge_session_variable("username", "alice")
|
|
158
|
+
term.set_badge_session_variable("hostname", "server1")
|
|
159
|
+
badge = term.evaluate_badge() # "alice@server1"
|
|
160
|
+
```
|
|
161
|
+
|
|
143
162
|
#### Cursor Control
|
|
144
163
|
- `cursor_position() -> tuple[int, int]`: Get cursor position (col, row)
|
|
145
164
|
- `cursor_visible() -> bool`: Check if cursor is visible
|
|
@@ -262,6 +281,7 @@ Create a new terminal with specified dimensions.
|
|
|
262
281
|
- `accept_osc7() -> bool`: Check if OSC 7 (CWD) is accepted
|
|
263
282
|
- `set_accept_osc7(accept: bool)`: Set whether to accept OSC 7 sequences
|
|
264
283
|
- `shell_integration_state() -> ShellIntegration`: Get shell integration state
|
|
284
|
+
- `record_cwd_change(new_cwd: str, hostname: str | None = None, username: str | None = None)`: Manually record a CWD change (updates history + session variables)
|
|
265
285
|
- `disable_insecure_sequences() -> bool`: Check if insecure sequences are disabled
|
|
266
286
|
- `set_disable_insecure_sequences(disable: bool)`: Disable insecure/dangerous sequences
|
|
267
287
|
- `answerback_string() -> str | None`: Get the configured ENQ answerback payload (None if disabled)
|
|
@@ -390,10 +410,11 @@ Extended shell integration features beyond basic OSC 133:
|
|
|
390
410
|
- `end_command_execution(exit_code: int)`: Mark end of command with exit code
|
|
391
411
|
- `get_current_command() -> CommandExecution | None`: Get currently executing command
|
|
392
412
|
- `get_shell_integration_stats() -> ShellIntegrationStats`: Get shell integration statistics
|
|
393
|
-
- `get_cwd_changes() -> list[CwdChange]`: Get working directory change history
|
|
413
|
+
- `get_cwd_changes() -> list[CwdChange]`: Get working directory change history (includes hostname/username)
|
|
394
414
|
- `clear_cwd_history()`: Clear CWD history
|
|
395
415
|
- `set_max_cwd_history(max: int)`: Set CWD history limit
|
|
396
|
-
- `record_cwd_change(cwd: str)`: Record working directory change
|
|
416
|
+
- `record_cwd_change(cwd: str, hostname: str | None = None, username: str | None = None)`: Record working directory change
|
|
417
|
+
- `poll_events()`: Now also returns `cwd_changed` events with `old_cwd`, `new_cwd`, `hostname`, `username`, `timestamp`
|
|
397
418
|
|
|
398
419
|
### Clipboard Extended
|
|
399
420
|
|
|
@@ -510,6 +531,10 @@ VT compliance testing:
|
|
|
510
531
|
- `use_alt_screen()`: Switch to alternate screen buffer (programmatic, not via escape codes)
|
|
511
532
|
- `use_primary_screen()`: Switch to primary screen buffer (programmatic)
|
|
512
533
|
- `poll_events() -> list[str]`: Poll for pending terminal events
|
|
534
|
+
- `set_event_subscription(kinds: list[str] | None)`: Filter which terminal events are returned by `poll_subscribed_events()` (None clears filter)
|
|
535
|
+
- `clear_event_subscription()`: Clear event filter (all events are returned)
|
|
536
|
+
- `poll_subscribed_events() -> list[dict]`: Drain events that match subscription filter
|
|
537
|
+
- `poll_cwd_events() -> list[dict]`: Drain only CWD change events (fields: new_cwd, old_cwd?, hostname?, username?, timestamp)
|
|
513
538
|
- `update_animations()`: Update animation frames (for blinking cursor, text, etc.)
|
|
514
539
|
- `debug_info() -> str`: Get debug information string
|
|
515
540
|
- `detect_urls(text: str) -> list[DetectedItem]`: Detect URLs in text
|
|
@@ -878,7 +903,10 @@ Working directory change event.
|
|
|
878
903
|
|
|
879
904
|
**Properties:**
|
|
880
905
|
- `cwd: str`: New working directory path
|
|
881
|
-
- `
|
|
906
|
+
- `old_cwd: str | None`: Previous working directory (if any)
|
|
907
|
+
- `hostname: str | None`: Hostname associated with the new path (None for localhost)
|
|
908
|
+
- `username: str | None`: Username from `user@host` portion of OSC 7 (if provided)
|
|
909
|
+
- `timestamp: int`: Change timestamp (Unix timestamp in milliseconds)
|
|
882
910
|
|
|
883
911
|
### DamageRegion
|
|
884
912
|
|
|
@@ -256,9 +256,11 @@ These settings control potentially sensitive or insecure terminal features at th
|
|
|
256
256
|
- Use in untrusted/sandboxed environments
|
|
257
257
|
|
|
258
258
|
**OSC 7 Directory Tracking:**
|
|
259
|
-
-
|
|
260
|
-
-
|
|
261
|
-
-
|
|
259
|
+
- Parses `file://[user@]host[:port]/path` URLs from shells (e.g., PROMPT_COMMAND)
|
|
260
|
+
- Percent-decodes paths/usernames and strips query/fragment
|
|
261
|
+
- Updates shell integration + badge/session variables (`\(path)`, `\(hostname)`, `\(username)`)
|
|
262
|
+
- Records CWD history with timestamps and host/user context
|
|
263
|
+
- Generally safe to keep enabled; disable if you don't need this feature
|
|
262
264
|
|
|
263
265
|
---
|
|
264
266
|
|
|
@@ -296,7 +296,7 @@ Operating System Command sequences for advanced features (format: `OSC Ps ; Pt S
|
|
|
296
296
|
- `OSC 2;title ST` - Set window title only
|
|
297
297
|
- `OSC 21;title ST` - Push title to stack (or `OSC 21 ST` to push current title)
|
|
298
298
|
- `OSC 22 ST` / `OSC 23 ST` - Pop window/icon title from stack
|
|
299
|
-
- `OSC 7;file://host/path ST` - Set current working directory (
|
|
299
|
+
- `OSC 7;file://[user@]host[:port]/path ST` - Set current working directory (percent-decoded; strips query/fragment; `localhost` is treated as None)
|
|
300
300
|
|
|
301
301
|
### Hyperlinks and Clipboard
|
|
302
302
|
|
{par_term_emu_core_rust-0.27.0 → par_term_emu_core_rust-0.29.0}/docs/VT_TECHNICAL_REFERENCE.md
RENAMED
|
@@ -741,7 +741,7 @@ where `ST` is either `ESC \` or `BEL` (`\x07`)
|
|
|
741
741
|
|
|
742
742
|
| Sequence | Operation | Notes |
|
|
743
743
|
|----------|-----------|-------|
|
|
744
|
-
| `OSC 7 ; file://host/cwd ST` | Set working directory |
|
|
744
|
+
| `OSC 7 ; file://[user@]host[:port]/cwd ST` | Set working directory | Percent-decodes path/username, strips query/fragment, ignores `localhost`, records hostname & username in session variables, can be disabled via `accept_osc7` |
|
|
745
745
|
|
|
746
746
|
**Format:** `file://hostname/path` (URL-encoded path)
|
|
747
747
|
|
|
@@ -1338,7 +1338,7 @@ The terminal provides comprehensive support for complex Unicode grapheme cluster
|
|
|
1338
1338
|
| OSC 8 Hyperlinks | ✅ Full | `src/terminal/sequences/osc.rs` | With deduplication |
|
|
1339
1339
|
| OSC 52 Clipboard | ✅ Full | `src/terminal/sequences/osc.rs` | Read/write with security controls |
|
|
1340
1340
|
| OSC 133 Shell Integration | ✅ Full | `src/terminal/sequences/osc.rs` | Prompt/command/output markers |
|
|
1341
|
-
| OSC 7 Directory Tracking | ✅ Full | `src/terminal/sequences/osc.rs` |
|
|
1341
|
+
| OSC 7 Directory Tracking | ✅ Full | `src/terminal/sequences/osc.rs` | Percent-decoded paths, username, hostname, session variable sync, CWD history |
|
|
1342
1342
|
| OSC 9;4 Progress Bar | ✅ Full | `src/terminal/sequences/osc.rs`, `src/terminal/progress.rs` | ConEmu/Windows Terminal style progress |
|
|
1343
1343
|
| Underline styles | ✅ Full | `src/terminal/sequences/csi.rs` | 6 different styles |
|
|
1344
1344
|
|
|
@@ -6,7 +6,7 @@ build-backend = "maturin"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "par-term-emu-core-rust"
|
|
9
|
-
version = "0.
|
|
9
|
+
version = "0.29.0"
|
|
10
10
|
description = "A comprehensive terminal emulator library in Rust with Python bindings - supports true color, alt screen, mouse reporting, bracketed paste, and full Unicode"
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
requires-python = ">=3.12"
|