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(
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 Tabby".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::Tabby)?;
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#"terminal:
32 copyOnSelect: true
33 pasteOnMiddleClick: true
34"#
35 .to_string(),
36 );
37 }
38 crate::terminal_setup::detector::TerminalFeature::ShellIntegration => {
39 config_sections.push("# Shell integration".to_string());
40 config_sections.push(
41 r#"terminal:
42 shellIntegration: true
43 workingDirectory: auto
44"#
45 .to_string(),
46 );
47 }
48 crate::terminal_setup::detector::TerminalFeature::ThemeSync => {
49 config_sections.push("# Theme colors will be configured separately".to_string());
50 config_sections.push(String::new());
51 }
52 crate::terminal_setup::detector::TerminalFeature::Notifications => {
53 config_sections.push("# System notifications".to_string());
54 config_sections.push(
55 r#"terminal:
56 bell: true
57 notifications:
58 enabled: true
59 shellIntegration: true
60"#
61 .to_string(),
62 );
63 }
64 }
65 }
66
67 Ok(config_sections.join("\n"))
68}
69
70pub fn merge_with_existing(existing_content: &str, new_config: &str) -> Result<String> {
72 ConfigWriter::merge_with_markers(existing_content, new_config, ConfigFormat::Yaml)
73}
74
75#[cfg(test)]
76mod tests {
77 use super::*;
78 use crate::terminal_setup::detector::TerminalFeature;
79
80 #[test]
81 fn test_generate_multiline_config() {
82 let features = vec![TerminalFeature::Multiline];
83 let config = generate_config(&features).unwrap();
84 assert!(config.contains("Shift-Enter") || config.contains("Multiline"));
85 }
86
87 #[test]
88 fn test_generate_copy_paste_config() {
89 let features = vec![TerminalFeature::CopyPaste];
90 let config = generate_config(&features).unwrap();
91 assert!(config.contains("copyOnSelect"));
92 }
93}