Upgrade TUI stack: ratatui 0.30, crossterm 0.29, portable-pty 0.9, vt100 0.16
- Capture OSC 0/2 window title in scan_osc_sequences since vt100 0.16 no longer exposes Screen::title() - Remove committed build artifacts (testapps/mouse-test/target) and extend .gitignore Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
25
src/app.rs
25
src/app.rs
@@ -548,8 +548,12 @@ impl App {
|
||||
for resp in responses {
|
||||
let _ = pty.write_input(&resp);
|
||||
}
|
||||
// Scanna för OSC-sekvenser (clipboard, etc.)
|
||||
scan_osc_sequences(&data);
|
||||
// Scanna för OSC-sekvenser (titel, clipboard, etc.)
|
||||
// vt100 0.16 exponerar inte längre titeln på Screen,
|
||||
// så vi fångar OSC 0/2 själva här.
|
||||
if let Some(t) = scan_osc_sequences(&data) {
|
||||
*title = t;
|
||||
}
|
||||
// Extrahera Kitty graphics-sekvenser och bearbeta resten genom parsern
|
||||
let gfx = process_pty_with_kitty_gfx(
|
||||
&data,
|
||||
@@ -566,11 +570,6 @@ impl App {
|
||||
}
|
||||
}
|
||||
}
|
||||
// Uppdatera fönsterrubrik från OSC 0/2 om programmet satte en
|
||||
let osc_title = parser.screen().title();
|
||||
if !osc_title.is_empty() {
|
||||
*title = osc_title.to_string();
|
||||
}
|
||||
}
|
||||
|
||||
// ── PTY resize om fönsterstorlek ändrats ─────────────────────────────
|
||||
@@ -1639,9 +1638,12 @@ fn scan_terminal_queries(data: &[u8], parser: &vt100::Parser) -> Vec<Vec<u8>> {
|
||||
|
||||
/// Skannar rå PTY-data efter OSC-sekvenser.
|
||||
/// Hanterar:
|
||||
/// OSC 0/2 (fönstertitel) → returneras så fönsterrubriken kan uppdateras
|
||||
/// OSC 52 (clipboard copy) → skickar vidare till värdterminalen via stdout
|
||||
/// OSC 11 (query bg color) → svarar med standardfärg
|
||||
fn scan_osc_sequences(data: &[u8]) {
|
||||
/// Returnerar senast satta fönstertitel i chunken, om någon.
|
||||
fn scan_osc_sequences(data: &[u8]) -> Option<String> {
|
||||
let mut new_title = None;
|
||||
let mut i = 0;
|
||||
while i < data.len() {
|
||||
// OSC startar med ESC ] eller 0x9d
|
||||
@@ -1663,6 +1665,12 @@ fn scan_osc_sequences(data: &[u8]) {
|
||||
}
|
||||
if let Some(term_pos) = end {
|
||||
if let Ok(payload) = std::str::from_utf8(&data[osc_start..term_pos]) {
|
||||
// OSC 0;<titel> / OSC 2;<titel> → fönstertitel
|
||||
if let Some(t) = payload.strip_prefix("0;").or_else(|| payload.strip_prefix("2;")) {
|
||||
if !t.is_empty() {
|
||||
new_title = Some(t.to_string());
|
||||
}
|
||||
}
|
||||
// OSC 52;c;<base64-data> → clipboard copy
|
||||
if payload.starts_with("52;") {
|
||||
// Vidarebefordra till värdterminalen
|
||||
@@ -1681,6 +1689,7 @@ fn scan_osc_sequences(data: &[u8]) {
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
new_title
|
||||
}
|
||||
|
||||
/// Skannar ett chunk av r\u00e5 PTY-data efter DEC private mode escape-sekvenser som
|
||||
|
||||
Reference in New Issue
Block a user