Skip to main content

vtcode_core/terminal_setup/terminals/
hyper.rs

1//! Hyper terminal configuration generator.
2//!
3//! Generates JavaScript configuration for Hyper terminal.
4
5use crate::terminal_setup::config_writer::{ConfigFormat, ConfigWriter};
6use crate::terminal_setup::detector::TerminalType;
7use crate::terminal_setup::features::multiline;
8use anyhow::Result;
9
10/// Generate complete Hyper configuration with all features
11pub fn generate_config(
12    features: &[crate::terminal_setup::detector::TerminalFeature],
13) -> Result<String> {
14    let mut config_sections = Vec::new();
15
16    // Add header comment
17    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    // Generate feature-specific configurations
22    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
61/// Merge Hyper configuration with existing JavaScript config file
62pub 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}