aboutsummaryrefslogtreecommitdiff
path: root/src/server/headless.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-08 00:44:49 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-08 00:44:49 +0300
commitd6285aaa59e0f7908c2ece81314aff2b98847e31 (patch)
treeec1306441ebb87592ff120e2bd34c55028f1fd33 /src/server/headless.rs
parent35e9838a44470c418ae51204bab54115d15d87bd (diff)
fix: avoid render-time plain url scans
Diffstat (limited to 'src/server/headless.rs')
-rw-r--r--src/server/headless.rs28
1 files changed, 6 insertions, 22 deletions
diff --git a/src/server/headless.rs b/src/server/headless.rs
index 57561947..e6d2b833 100644
--- a/src/server/headless.rs
+++ b/src/server/headless.rs
@@ -163,13 +163,6 @@ fn dirty_patch_intersects_hyperlinks(
false
}
-fn dirty_patch_contains_plain_url_candidate(patch: &crate::pane::TerminalDirtyPatch) -> bool {
- patch.rows.iter().any(|(_, row_cells)| {
- let row: String = row_cells.iter().map(|cell| cell.symbol.as_str()).collect();
- !crate::app::actions::visible_url_spans(&row).is_empty()
- })
-}
-
// ---------------------------------------------------------------------------
// Constants
// ---------------------------------------------------------------------------
@@ -3203,9 +3196,6 @@ impl HeadlessServer {
if dirty_patch_intersects_hyperlinks(&frame, info.inner_rect, &patch) {
retained_fallback!("hyperlink_intersection");
}
- if dirty_patch_contains_plain_url_candidate(&patch) {
- retained_fallback!("plain_url_candidate");
- }
if !apply_terminal_dirty_patch(&mut frame, info.inner_rect, patch) {
retained_fallback!("patch_apply_failed");
}
@@ -3382,7 +3372,6 @@ impl HeadlessServer {
let hyperlinks = crate::server::render_stream::visible_hyperlinks(
&self.app.state,
&self.app.terminal_runtimes,
- Some(&buffer),
);
crate::render_prof::duration_since(
"full_render.visible_hyperlinks",
@@ -7524,7 +7513,7 @@ next_tab = ""
}
#[tokio::test]
- async fn retained_pty_update_declines_when_dirty_row_creates_plain_url() {
+ async fn retained_pty_update_allows_dirty_row_that_creates_plain_url() {
let (mut server, client_rx, pane_id) = retained_test_server(b"plain");
server.render_and_stream();
let _ = client_rx
@@ -7538,20 +7527,15 @@ next_tab = ""
.expect("runtime");
runtime.test_process_pty_bytes(b"\rhttps://example.com/new");
- assert!(!server.render_retained_pty_update_and_stream());
- assert!(client_rx.recv_timeout(Duration::from_millis(50)).is_err());
-
- server.render_and_stream();
- let full = read_server_frame(
+ assert!(server.render_retained_pty_update_and_stream());
+ let patched = read_server_frame(
client_rx
.recv_timeout(Duration::from_millis(100))
- .expect("full frame after plain URL"),
+ .expect("retained frame after plain URL"),
);
assert!(
- full.hyperlinks
- .iter()
- .any(|uri| uri == "https://example.com/new"),
- "full render should synthesize plain URL hyperlink metadata"
+ patched.hyperlinks.is_empty(),
+ "retained render should not synthesize plain URL hyperlink metadata"
);
}