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