diff --git a/src/app.rs b/src/app.rs index ff4e9b7..29d0b68 100644 --- a/src/app.rs +++ b/src/app.rs @@ -242,8 +242,10 @@ impl App { /// Transitions the application into Insert Mode with a specific variant. pub fn enter_insert(&mut self, variant: InsertVariant) { - if let Some(var) = self.vars.get(self.selected) - && !var.is_group { + if let Some(var) = self.vars.get(self.selected) { + if var.is_group { + self.enter_insert_key(); + } else { if !matches!(variant, InsertVariant::Substitute) { self.sync_input_with_selected(); } @@ -262,6 +264,7 @@ impl App { } } } + } } /// Commits the current input and transitions the application into Normal Mode. diff --git a/src/ui.rs b/src/ui.rs index 1c9de80..0f70069 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -103,24 +103,30 @@ pub fn draw(f: &mut Frame, app: &mut App, config: &Config) { Span::styled(&var.key, key_style), ]; - // Add status indicator if not present (only for leaf variables) - if !var.is_group { - match var.status { - crate::format::ItemStatus::MissingFromActive => { - let missing_style = if is_selected { - Style::default().fg(theme.fg_highlight()).add_modifier(Modifier::BOLD) - } else { - Style::default().fg(theme.fg_warning()).add_modifier(Modifier::BOLD) - }; - key_spans.push(Span::styled(" (missing)", missing_style)); - } - crate::format::ItemStatus::Modified => { - if !is_selected { - key_spans.push(Span::styled(" (*)", Style::default().fg(theme.fg_modified()))); - } - } - _ => {} + // Add status indicator if not present + match var.status { + crate::format::ItemStatus::MissingFromActive if !var.is_group => { + let missing_style = if is_selected { + Style::default().fg(theme.fg_highlight()).add_modifier(Modifier::BOLD) + } else { + Style::default().fg(theme.fg_warning()).add_modifier(Modifier::BOLD) + }; + key_spans.push(Span::styled(" (missing)", missing_style)); } + crate::format::ItemStatus::MissingFromActive if var.is_group => { + let missing_style = if is_selected { + Style::default().fg(theme.fg_highlight()).add_modifier(Modifier::BOLD) + } else { + Style::default().fg(theme.fg_warning()).add_modifier(Modifier::BOLD) + }; + key_spans.push(Span::styled(" (missing group)", missing_style)); + } + crate::format::ItemStatus::Modified => { + if !is_selected { + key_spans.push(Span::styled(" (*)", Style::default().fg(theme.fg_modified()))); + } + } + _ => {} } let item_style = if is_selected { @@ -210,7 +216,9 @@ pub fn draw(f: &mut Frame, app: &mut App, config: &Config) { // Show template value in normal mode if it differs let display_text = if let Some(var) = current_var { - if var.is_group { + if matches!(app.mode, Mode::InsertKey) { + input_text.to_string() + } else if var.is_group { "".to_string() } else if matches!(app.mode, Mode::Normal) { format!("{}{}", input_text, extra_info)