vtcode_core/terminal_setup/terminals/
iterm2.rs1use crate::terminal_setup::detector::TerminalType;
7use crate::terminal_setup::features::multiline;
8use anyhow::Result;
9
10pub fn generate_config(
12 features: &[crate::terminal_setup::detector::TerminalFeature],
13) -> Result<String> {
14 let mut instructions = vec![
15 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━".to_string(),
16 " iTerm2 Manual Configuration Instructions".to_string(),
17 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━".to_string(),
18 String::new(),
19 "iTerm2 requires manual configuration via the GUI.".to_string(),
20 "Follow these steps to configure each feature:".to_string(),
21 String::new(),
22 ];
23
24 for (i, feature) in features.iter().enumerate() {
25 match feature {
26 crate::terminal_setup::detector::TerminalFeature::Multiline => {
27 instructions.push(format!("{}. MULTILINE INPUT (Shift+Enter)", i + 1));
28 instructions.push(String::new());
29 let multiline_instructions = multiline::generate_config(TerminalType::ITerm2)?;
30 instructions.push(multiline_instructions);
31 instructions.push(String::new());
32 }
33 crate::terminal_setup::detector::TerminalFeature::CopyPaste => {
34 instructions.push(format!("{}. COPY/PASTE INTEGRATION", i + 1));
35 instructions.push(String::new());
36 instructions.push("1. Open iTerm2 Preferences (Cmd+,)".to_string());
37 instructions.push("2. Go to General → Selection".to_string());
38 instructions.push("3. Enable 'Copy to pasteboard on selection'".to_string());
39 instructions.push("4. Go to Pointer tab".to_string());
40 instructions
41 .push("5. Set middle-click action to 'Paste from Clipboard'".to_string());
42 instructions.push(String::new());
43 }
44 crate::terminal_setup::detector::TerminalFeature::ShellIntegration => {
45 instructions.push(format!("{}. SHELL INTEGRATION", i + 1));
46 instructions.push(String::new());
47 instructions.push("1. Open iTerm2 Preferences (Cmd+,)".to_string());
48 instructions.push("2. Go to Profiles → General".to_string());
49 instructions.push("3. Under 'Command', select your shell".to_string());
50 instructions.push(
51 "4. iTerm2's shell integration will auto-install on first launch".to_string(),
52 );
53 instructions.push("5. Or manually install: curl -L https://iterm2.com/shell_integration/install_shell_integration.sh | bash".to_string());
54 instructions.push(String::new());
55 }
56 crate::terminal_setup::detector::TerminalFeature::ThemeSync => {
57 instructions.push(format!("{}. THEME SYNCHRONIZATION", i + 1));
58 instructions.push(String::new());
59 instructions.push("1. Open iTerm2 Preferences (Cmd+,)".to_string());
60 instructions.push("2. Go to Profiles → Colors".to_string());
61 instructions.push("3. Choose a color preset or customize manually".to_string());
62 instructions
63 .push("4. VT Code theme colors can be manually configured here".to_string());
64 instructions.push(String::new());
65 }
66 crate::terminal_setup::detector::TerminalFeature::Notifications => {
67 instructions.push(format!("{}. SYSTEM NOTIFICATIONS", i + 1));
68 instructions.push(String::new());
69 instructions.push("1. Open iTerm2 Preferences (Cmd+,)".to_string());
70 instructions.push("2. Navigate to Profiles → Terminal".to_string());
71 instructions.push("3. Enable 'Silence bell' and Filter Alerts → 'Send escape sequence-generated alerts'".to_string());
72 instructions.push("4. Set your preferred notification delay".to_string());
73 instructions.push("5. For shell integration notifications, consider using tools like terminal-notifier".to_string());
74 instructions.push(String::new());
75 }
76 }
77 }
78
79 instructions.push("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━".to_string());
80 instructions
81 .push("After configuration, restart iTerm2 for changes to take effect.".to_string());
82 instructions.push("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━".to_string());
83
84 Ok(instructions.join("\n"))
85}
86
87#[cfg(test)]
88mod tests {
89 use super::*;
90 use crate::terminal_setup::detector::TerminalFeature;
91
92 #[test]
93 fn test_generate_instructions() {
94 let features = vec![TerminalFeature::Multiline, TerminalFeature::CopyPaste];
95 let instructions = generate_config(&features).unwrap();
96 assert!(instructions.contains("iTerm2"));
97 assert!(instructions.contains("Preferences"));
98 assert!(instructions.contains("MULTILINE"));
99 assert!(instructions.contains("COPY/PASTE"));
100 }
101}