From c732b7488a6ea814f290ec6b4395803e51d41ff5 Mon Sep 17 00:00:00 2001 From: Paul-weqe Date: Wed, 4 Mar 2026 17:43:45 +0300 Subject: [PATCH] editcommand: add ctrl+c handler When CTRLC is pressed, instead of exiting holo cli, we should be taken to the next line and current ongoing configuration terminated. Signed-off-by: Paul Wekesa --- src/terminal.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/terminal.rs b/src/terminal.rs index 875e576..5f30c52 100644 --- a/src/terminal.rs +++ b/src/terminal.rs @@ -10,8 +10,8 @@ use std::sync::{Arc, Mutex}; use indextree::NodeId; use itertools::Itertools; use reedline::{ - ColumnarMenu, Completer, FileBackedHistory, KeyCode, KeyModifiers, - MenuBuilder, Prompt, PromptEditMode, PromptHistorySearch, + ColumnarMenu, Completer, EditCommand, FileBackedHistory, KeyCode, + KeyModifiers, MenuBuilder, Prompt, PromptEditMode, PromptHistorySearch, PromptHistorySearchStatus, Reedline, ReedlineEvent, ReedlineMenu, Span, Suggestion, Vi, }; @@ -175,12 +175,26 @@ pub fn reedline_init( ReedlineEvent::MenuNext, ]), ); + + // switches to user exec mode insert_keybindings.add_binding( KeyModifiers::CONTROL, KeyCode::Char('z'), ReedlineEvent::ExecuteHostCommand("end".to_owned()), ); + // cancels command & jumps to next line + insert_keybindings.add_binding( + reedline::KeyModifiers::CONTROL, + reedline::KeyCode::Char('c'), + reedline::ReedlineEvent::Multiple(vec![ + ReedlineEvent::Edit(vec![EditCommand::InsertString( + "^C".to_string(), + )]), + ReedlineEvent::Enter, + ]), + ); + let edit_mode = Box::new(Vi::new(insert_keybindings, normal_keybindings)); Reedline::create() .with_history(history)