Skip to main content

claude_code_cli_acp/pty/
input.rs

1use crate::terminal::recognizers::{PermissionDecision, PermissionDialog};
2
3pub fn prompt_submit(prompt: &str) -> Vec<u8> {
4    submit_line(prompt)
5}
6
7pub fn slash_command(command: &str) -> Vec<u8> {
8    let command = if command.starts_with('/') {
9        command.to_string()
10    } else {
11        format!("/{command}")
12    };
13    submit_line(&command)
14}
15
16pub fn ctrl_c() -> Vec<u8> {
17    vec![0x03]
18}
19
20pub fn ctrl_d() -> Vec<u8> {
21    vec![0x04]
22}
23
24pub fn ctrl_j() -> Vec<u8> {
25    vec![0x0a]
26}
27
28pub fn permission_choice(
29    dialog: &PermissionDialog,
30    decision: PermissionDecision,
31) -> Option<Vec<u8>> {
32    let option = dialog
33        .options
34        .iter()
35        .find(|option| option.decision == decision)?;
36    option
37        .accelerator
38        .as_ref()
39        .map(|accelerator| submit_line(accelerator))
40}
41
42fn submit_line(line: &str) -> Vec<u8> {
43    let mut bytes = line.as_bytes().to_vec();
44    bytes.push(b'\r');
45    bytes
46}