Follow-up testing showed that the mailbox limit did not fix the base64 hang: moving the pointer stalled the app, and opening a tab could hang it. Mouse link lookup copied the entire wrapped line before checking modifier eligibility, while renderer link searches had no whole-search work budget. Filter eligible links before traversing scrollback. Add bounded logical line selection and skip automatic regex lookup on lines exceeding 65,536 grid cells. Keep explicit line selection and OSC8 handling unrestricted. Skip oversized lines instead of truncating URLs into different targets. Apply the existing terminal StringMap retry budget to renderer searches and handle search errors without panicking. The regression triggered a retry-limit panic through the old onig search API and now returns normally, allowing subsequent link patterns to run. Document the lookup limits and correct the earlier mailbox fix entry to record that it did not resolve the reported hang on its own. Test Plan: - 1,513 unit/integration tests and one doctest pass across core, renderer, and terminal with Mesa software OpenGL; one existing doctest is ignored. - Release application build, formatting, and all-target Clippy pass. - GTK handles 400 pointer moves, including Ctrl hover, during continuous base64 output, opens/closes a tab, handles Ctrl+C, prints a marker, and exits cleanly. Normal URL hover still works after a hard newline. Reference: docs/rewrite/DEVIANT_FIXES.md (entry 41)
77 lines
2.2 KiB
TOML
77 lines
2.2 KiB
TOML
[package]
|
|
name = "ghostty-renderer"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
|
|
[dependencies]
|
|
bytemuck = { version = "1.25.2", features = ["derive"] }
|
|
crossbeam-channel = "0.5.17"
|
|
ghostty-config.workspace = true
|
|
ghostty-crash.workspace = true
|
|
ghostty-os.workspace = true
|
|
ghostty-datastruct.workspace = true
|
|
ghostty-font.workspace = true
|
|
ghostty-input.workspace = true
|
|
ghostty-onig.workspace = true
|
|
ghostty-terminal.workspace = true
|
|
ghostty-unicode.workspace = true
|
|
ghostty-vt.workspace = true
|
|
glow = "0.18.0"
|
|
jpeg-decoder = { version = "0.3.2", default-features = false }
|
|
khronos-egl = { version = "6.0.0", features = ["dynamic"] }
|
|
log = "0.4.34"
|
|
naga = { version = "30.0.1", features = ["glsl-in", "glsl-out", "msl-out", "wgsl-in"] }
|
|
onig = "6.5.3"
|
|
png = "0.18.1"
|
|
thiserror = "2.0.21"
|
|
|
|
[lints.rust]
|
|
unsafe_code = "deny"
|
|
|
|
[lints.clippy]
|
|
pedantic = { level = "warn", priority = -1 }
|
|
todo = "warn"
|
|
unwrap_used = "warn"
|
|
# Porting a low-level terminal emulator involves a lot of intentional
|
|
# numeric casts and long state-machine functions; these pedantic lints are
|
|
# noise for this codebase.
|
|
cast_possible_truncation = "allow"
|
|
cast_possible_wrap = "allow"
|
|
cast_sign_loss = "allow"
|
|
cast_precision_loss = "allow"
|
|
cast_lossless = "allow"
|
|
module_name_repetitions = "allow"
|
|
too_many_lines = "allow"
|
|
missing_errors_doc = "allow"
|
|
missing_panics_doc = "allow"
|
|
similar_names = "allow"
|
|
struct_excessive_bools = "allow"
|
|
fn_params_excessive_bools = "allow"
|
|
match_same_arms = "allow"
|
|
unreadable_literal = "allow"
|
|
many_single_char_names = "allow"
|
|
doc_markdown = "allow"
|
|
must_use_candidate = "allow"
|
|
return_self_not_must_use = "allow"
|
|
used_underscore_binding = "allow"
|
|
large_stack_arrays = "allow"
|
|
inline_always = "allow"
|
|
|
|
# The Metal graphics API (`renderer/Metal.zig`) and the CoreVideo display
|
|
# link; compiled on macOS and iOS only.
|
|
[target.'cfg(target_vendor = "apple")'.dependencies]
|
|
block2 = "0.6.2"
|
|
dispatch2 = "0.3.1"
|
|
objc2 = "0.6.5"
|
|
objc2-core-foundation = "0.3.2"
|
|
objc2-core-graphics = "0.3.2"
|
|
objc2-foundation = "0.3.2"
|
|
objc2-io-surface = "0.3.2"
|
|
objc2-metal = { version = "0.3.2", features = ["block2", "objc2-io-surface"] }
|
|
objc2-quartz-core = "0.3.2"
|
|
|
|
# CVDisplayLink does not exist on iOS.
|
|
[target.'cfg(target_os = "macos")'.dependencies]
|
|
objc2-core-video = "0.3.2"
|