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(features: &[crate::terminal_setup::detector::TerminalFeature]) -> Result<String> {
12 let mut config_sections = vec![
13 "Zed Terminal Manual Setup:".to_string(),
14 "Open the command palette and run zed: open keymap.".to_string(),
15 "Add the object below to the existing keymap array, separating entries with a comma.".to_string(),
16 "Keep your existing bindings. VT Code does not write or back up Zed files.".to_string(),
17 String::new(),
18 ];
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.push("// Copy/paste: Built-in to Zed, no custom config needed".to_string());
31 config_sections.push(String::new());
32 }
33 crate::terminal_setup::detector::TerminalFeature::ShellIntegration => {
34 config_sections.push("// Shell integration: Not supported".to_string());
36 config_sections.push(String::new());
37 }
38 crate::terminal_setup::detector::TerminalFeature::ThemeSync => {
39 config_sections.push("// Theme: configure separately in Zed settings".to_string());
40 config_sections.push(String::new());
41 }
42 crate::terminal_setup::detector::TerminalFeature::Notifications => {
43 config_sections.push("// System notifications: Not supported in Zed terminal".to_string());
44 config_sections.push("// Use Zed's notification system instead".to_string());
45 config_sections.push(String::new());
46 }
47 }
48 }
49
50 Ok(config_sections.join("\n"))
51}
52
53pub fn merge_with_existing(existing_content: &str, new_config: &str) -> Result<String> {
55 ConfigWriter::merge_with_markers(existing_content, new_config, ConfigFormat::Json)
56}
57
58#[cfg(test)]
59mod tests {
60 use super::*;
61 use crate::terminal_setup::detector::TerminalFeature;
62
63 #[test]
64 fn test_generate_multiline_config() {
65 let features = vec![TerminalFeature::Multiline];
66 let config = generate_config(&features).unwrap();
67 assert!(config.contains("shift-enter") || config.contains("Multiline"));
68 }
69
70 #[test]
71 fn test_generate_theme_config() {
72 let features = vec![TerminalFeature::ThemeSync];
73 let config = generate_config(&features).unwrap();
74 assert!(config.contains("Theme"));
75 }
76}