vtcode_core/terminal_setup/terminals/
windows_terminal.rs1use crate::terminal_setup::config_writer::{ConfigFormat, ConfigWriter};
6use 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 config_sections = Vec::new();
15
16 config_sections.push("// VT Code Terminal Configuration for Windows Terminal".to_string());
18 config_sections.push(String::new());
19
20 for feature in features {
22 match feature {
23 crate::terminal_setup::detector::TerminalFeature::Multiline => {
24 config_sections.push("// Multiline input: Shift+Enter".to_string());
25 let multiline_config = multiline::generate_config(TerminalType::WindowsTerminal)?;
26 config_sections.push(multiline_config);
27 }
28 crate::terminal_setup::detector::TerminalFeature::CopyPaste => {
29 config_sections.push("// Enhanced copy/paste".to_string());
30 config_sections.push(
31 r#"{
32 "copyOnSelect": true,
33 "copyFormatting": false
34}
35"#
36 .to_string(),
37 );
38 }
39 crate::terminal_setup::detector::TerminalFeature::ShellIntegration => {
40 config_sections.push("// Shell integration".to_string());
41 config_sections.push(
42 r#"{
43 "experimental.rendering.forceFullRepaint": false,
44 "experimental.rendering.software": false
45}
46"#
47 .to_string(),
48 );
49 }
50 crate::terminal_setup::detector::TerminalFeature::ThemeSync => {
51 config_sections.push("// Theme colors will be configured separately".to_string());
52 config_sections.push(String::new());
53 }
54 crate::terminal_setup::detector::TerminalFeature::Notifications => {
55 config_sections.push("// System notifications".to_string());
56 config_sections.push(
57 r#"{
58 "bellStyle": "audible",
59 "bellDuration": 200,
60 "showTerminalBellAlert": true
61}
62"#
63 .to_string(),
64 );
65 }
66 }
67 }
68
69 Ok(config_sections.join("\n"))
70}
71
72pub fn merge_with_existing(existing_content: &str, new_config: &str) -> Result<String> {
74 ConfigWriter::merge_with_markers(existing_content, new_config, ConfigFormat::Json)
75}
76
77#[cfg(test)]
78mod tests {
79 use super::*;
80 use crate::terminal_setup::detector::TerminalFeature;
81
82 #[test]
83 fn test_generate_multiline_config() {
84 let features = vec![TerminalFeature::Multiline];
85 let config = generate_config(&features).unwrap();
86 assert!(config.contains("sendInput") || config.contains("shift+enter"));
87 }
88
89 #[test]
90 fn test_generate_copy_paste_config() {
91 let features = vec![TerminalFeature::CopyPaste];
92 let config = generate_config(&features).unwrap();
93 assert!(config.contains("copyOnSelect"));
94 }
95}