use super::super::{Screen, ScreenEvent, SemanticPrompt};
pub(in crate::screen) fn handle(screen: &mut Screen, params: &[&[u8]]) {
let Some(kind) = params.get(1) else { return };
let mark = match *kind {
b"A" => SemanticPrompt::PromptStart,
b"B" => SemanticPrompt::PromptEnd,
b"C" => SemanticPrompt::OutputStart,
b"D" => {
let exit_code = match params.get(2) {
None => None,
Some(raw) => {
let Ok(s) = std::str::from_utf8(raw) else {
return;
};
let Ok(code) = s.parse::<i32>() else {
return;
};
Some(code)
}
};
SemanticPrompt::OutputEnd { exit_code }
}
_ => return,
};
let row = screen.grid().pos().row;
if let Some(row) = screen.grid_mut().drawing_row_mut(row) {
row.set_semantic_prompt(mark);
}
screen
.pending_events
.push(ScreenEvent::ShellIntegration { mark });
}