claude_code_cli_acp/pty/
input.rs1use 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}