From 8bfa89a478d6ebef32cf6c93d4cdc45e4a1cc550 Mon Sep 17 00:00:00 2001
From: sigmaSd <bedisnbiba@gmail.com>
Date: Wed, 15 Jun 2022 01:19:06 +0100
Subject: [PATCH] feat(repl): Add key binding to force a new line (#14536)

This commit adds key binding for "ctrl+s"
combination that will force a new line in REPL.
---
 cli/tools/repl/editor.rs | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/cli/tools/repl/editor.rs b/cli/tools/repl/editor.rs
index 82719f27a8..502134ebc5 100644
--- a/cli/tools/repl/editor.rs
+++ b/cli/tools/repl/editor.rs
@@ -14,10 +14,15 @@ use rustyline::highlight::Highlighter;
 use rustyline::validate::ValidationContext;
 use rustyline::validate::ValidationResult;
 use rustyline::validate::Validator;
+use rustyline::Cmd;
 use rustyline::CompletionType;
 use rustyline::Config;
 use rustyline::Context;
 use rustyline::Editor;
+use rustyline::EventHandler;
+use rustyline::KeyCode;
+use rustyline::KeyEvent;
+use rustyline::Modifiers;
 use rustyline_derive::{Helper, Hinter};
 use std::borrow::Cow;
 use std::path::PathBuf;
@@ -360,6 +365,10 @@ impl ReplEditor {
     let mut editor = Editor::with_config(editor_config);
     editor.set_helper(Some(helper));
     editor.load_history(&history_file_path).unwrap_or(());
+    editor.bind_sequence(
+      KeyEvent(KeyCode::Char('s'), Modifiers::CTRL),
+      EventHandler::Simple(Cmd::Newline),
+    );
 
     ReplEditor {
       inner: Arc::new(Mutex::new(editor)),