vtcode_core/terminal_setup/terminals/
tabby.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::new();
13
14 config_sections.push("# VT Code Terminal Configuration for Tabby".to_string());
16 config_sections.push(String::new());
17
18 for feature in features {
20 match feature {
21 crate::terminal_setup::detector::TerminalFeature::Multiline => {
22 config_sections.push("# Multiline input: Shift+Enter".to_string());
23 let multiline_config = multiline::generate_config(TerminalType::Tabby)?;
24 config_sections.push(multiline_config);
25 }
26 crate::terminal_setup::detector::TerminalFeature::CopyPaste => {
27 config_sections.push("# Enhanced copy/paste".to_string());
28 config_sections.push(
29 r#"terminal:
30 copyOnSelect: true
31 pasteOnMiddleClick: true
32"#
33 .to_string(),
34 );
35 }
36 crate::terminal_setup::detector::TerminalFeature::ShellIntegration => {
37 config_sections.push("# Shell integration".to_string());
38 config_sections.push(
39 r#"terminal:
40 shellIntegration: true
41 workingDirectory: auto
42"#
43 .to_string(),
44 );
45 }
46 crate::terminal_setup::detector::TerminalFeature::ThemeSync => {
47 config_sections.push("# Theme colors will be configured separately".to_string());
48 config_sections.push(String::new());
49 }
50 crate::terminal_setup::detector::TerminalFeature::Notifications => {
51 config_sections.push("# System notifications".to_string());
52 config_sections.push(
53 r#"terminal:
54 bell: true
55 notifications:
56 enabled: true
57 shellIntegration: true
58"#
59 .to_string(),
60 );
61 }
62 }
63 }
64
65 Ok(config_sections.join("\n"))
66}
67
68pub fn merge_with_existing(existing_content: &str, new_config: &str) -> Result<String> {
70 ConfigWriter::merge_with_markers(existing_content, new_config, ConfigFormat::Yaml)
71}
72
73#[cfg(test)]
74mod tests {
75 use super::*;
76 use crate::terminal_setup::detector::TerminalFeature;
77
78 #[test]
79 fn test_generate_multiline_config() {
80 let features = vec![TerminalFeature::Multiline];
81 let config = generate_config(&features).unwrap();
82 assert!(config.contains("Shift-Enter") || config.contains("Multiline"));
83 }
84
85 #[test]
86 fn test_generate_copy_paste_config() {
87 let features = vec![TerminalFeature::CopyPaste];
88 let config = generate_config(&features).unwrap();
89 assert!(config.contains("copyOnSelect"));
90 }
91}