Skip to main content

vtcode_core/terminal_setup/terminals/
zed.rs

1//! Zed terminal configuration generator.
2//!
3//! Generates JSON configuration for Zed editor's integrated terminal.
4
5use crate::terminal_setup::config_writer::{ConfigFormat, ConfigWriter};
6use crate::terminal_setup::detector::TerminalType;
7use crate::terminal_setup::features::multiline;
8use anyhow::Result;
9
10/// Generate complete Zed configuration with all features
11pub fn generate_config(
12    features: &[crate::terminal_setup::detector::TerminalFeature],
13) -> Result<String> {
14    let mut config_sections = Vec::new();
15
16    // Add header comment
17    config_sections.push("// VT Code Terminal Configuration for Zed".to_string());
18    config_sections.push(String::new());
19
20    // Generate feature-specific configurations
21    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                // Zed doesn't support custom copy/paste config for terminal
30                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                // Zed doesn't support custom shell integration
36                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
55/// Merge Zed configuration with existing JSON config file
56pub 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}