summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-04-09 07:17:02 +0800
committerGitHub <noreply@github.com>2024-04-09 07:17:02 +0800
commit2738988fc47f0f068b6c78e556760a0dbca8d932 (patch)
tree7943fea61bc0650aa6fb1b6baeebe5d8a5a156b6 /src
parent3a0cafebd9965eec55864a0864684223d2fb3d8d (diff)
downloadaichat-2738988fc47f0f068b6c78e556760a0dbca8d932.tar.gz
feat: add `ctrlc_exit` option to control REPL exit by ctrl+c (#391)
Diffstat (limited to 'src')
-rw-r--r--src/config/mod.rs3
-rw-r--r--src/repl/mod.rs7
2 files changed, 7 insertions, 3 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs
index b18bc74..1643b4e 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -62,6 +62,8 @@ pub struct Config {
pub wrap: Option<String>,
/// Whether wrap code block
pub wrap_code: bool,
+ /// Whether to exit REPL by pressing Ctrl+C twice
+ pub ctrlc_exit: bool,
/// Automatically copy the last output to the clipboard
pub auto_copy: bool,
/// REPL keybindings. (emacs, vi)
@@ -109,6 +111,7 @@ impl Default for Config {
light_theme: false,
wrap: None,
wrap_code: false,
+ ctrlc_exit: true,
auto_copy: false,
keybindings: Default::default(),
prelude: String::new(),
diff --git a/src/repl/mod.rs b/src/repl/mod.rs
index 1b96d3b..cc642cc 100644
--- a/src/repl/mod.rs
+++ b/src/repl/mod.rs
@@ -103,6 +103,7 @@ impl Repl {
self.banner();
let mut already_ctrlc = false;
+ let ctrlc_exit = self.config.read().ctrlc_exit;
loop {
if self.abort.aborted_ctrld() {
@@ -117,8 +118,8 @@ impl Repl {
already_ctrlc = false;
self.abort.reset();
match self.handle(&line) {
- Ok(quit) => {
- if quit {
+ Ok(exit) => {
+ if exit {
break;
}
}
@@ -130,7 +131,7 @@ impl Repl {
}
Ok(Signal::CtrlC) => {
self.abort.set_ctrlc();
- if already_ctrlc {
+ if already_ctrlc && ctrlc_exit {
break;
}
already_ctrlc = true;