vtcode_core/terminal_setup/terminals/
zed.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 Zed".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::Zed)?;
26 config_sections.push(multiline_config);
27 }
28 crate::terminal_setup::detector::TerminalFeature::CopyPaste => {
29 config_sections
31 .push("// Copy/paste: Built-in to Zed, no custom config needed".to_string());
32 config_sections.push(String::new());
33 }
34 crate::terminal_setup::detector::TerminalFeature::ShellIntegration => {
35 config_sections.push("// Shell integration: Not supported".to_string());
37 config_sections.push(String::new());
38 }
39 crate::terminal_setup::detector::TerminalFeature::ThemeSync => {
40 config_sections.push("// Theme colors will be configured separately".to_string());
41 config_sections.push(String::new());
42 }
43 crate::terminal_setup::detector::TerminalFeature::Notifications => {
44 config_sections
45 .push("// System notifications: Not supported in Zed terminal".to_string());
46 config_sections.push("// Use Zed's notification system instead".to_string());
47 config_sections.push(String::new());
48 }
49 }
50 }
51
52 Ok(config_sections.join("\n"))
53}
54
55pub fn merge_with_existing(existing_content: &str, new_config: &str) -> Result<String> {
57 ConfigWriter::merge_with_markers(existing_content, new_config, ConfigFormat::Json)
58}
59
60#[cfg(test)]
61mod tests {
62 use super::*;
63 use crate::terminal_setup::detector::TerminalFeature;
64
65 #[test]
66 fn test_generate_multiline_config() {
67 let features = vec![TerminalFeature::Multiline];
68 let config = generate_config(&features).unwrap();
69 assert!(config.contains("shift-enter") || config.contains("Multiline"));
70 }
71
72 #[test]
73 fn test_generate_theme_config() {
74 let features = vec![TerminalFeature::ThemeSync];
75 let config = generate_config(&features).unwrap();
76 assert!(config.contains("Theme"));
77 }
78}