vtcode_core/terminal_setup/terminals/
hyper.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 Hyper".to_string());
16 config_sections.push("// Add this to your ~/.hyper.js config file".to_string());
17 config_sections.push(String::new());
18
19 for feature in features {
21 match feature {
22 crate::terminal_setup::detector::TerminalFeature::Multiline => {
23 config_sections.push("// Multiline input: Shift+Enter".to_string());
24 let multiline_config = multiline::generate_config(TerminalType::Hyper)?;
25 config_sections.push(multiline_config);
26 }
27 crate::terminal_setup::detector::TerminalFeature::CopyPaste => {
28 config_sections.push("// Enhanced copy/paste".to_string());
29 config_sections.push(
30 r#"config: {
31 copyOnSelect: true,
32 quickEdit: true,
33}
34"#
35 .to_string(),
36 );
37 }
38 crate::terminal_setup::detector::TerminalFeature::ShellIntegration => {
39 config_sections.push("// Shell integration: Use Hyper plugins".to_string());
40 config_sections.push("// Install: hyper-statusline, hyper-search".to_string());
41 config_sections.push(String::new());
42 }
43 crate::terminal_setup::detector::TerminalFeature::ThemeSync => {
44 config_sections.push("// Theme colors will be configured separately".to_string());
45 config_sections.push(String::new());
46 }
47 crate::terminal_setup::detector::TerminalFeature::Notifications => {
48 config_sections.push("// System notifications".to_string());
49 config_sections.push("// Hyper supports notifications via plugins".to_string());
50 config_sections.push("// Install: hyper-statusline, hyper-search".to_string());
51 config_sections.push(String::new());
52 }
53 }
54 }
55
56 Ok(config_sections.join("\n"))
57}
58
59pub fn merge_with_existing(existing_content: &str, new_config: &str) -> Result<String> {
61 ConfigWriter::merge_with_markers(existing_content, new_config, ConfigFormat::JavaScript)
62}
63
64#[cfg(test)]
65mod tests {
66 use super::*;
67 use crate::terminal_setup::detector::TerminalFeature;
68
69 #[test]
70 fn test_generate_multiline_config() {
71 let features = vec![TerminalFeature::Multiline];
72 let config = generate_config(&features).unwrap();
73 assert!(config.contains("shift+enter") || config.contains("Multiline"));
74 }
75
76 #[test]
77 fn test_generate_copy_paste_config() {
78 let features = vec![TerminalFeature::CopyPaste];
79 let config = generate_config(&features).unwrap();
80 assert!(config.contains("copyOnSelect"));
81 }
82}