diff options
| author | sigoden <sigoden@gmail.com> | 2024-04-09 07:17:02 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-09 07:17:02 +0800 |
| commit | 2738988fc47f0f068b6c78e556760a0dbca8d932 (patch) | |
| tree | 7943fea61bc0650aa6fb1b6baeebe5d8a5a156b6 | |
| parent | 3a0cafebd9965eec55864a0864684223d2fb3d8d (diff) | |
| download | aichat-2738988fc47f0f068b6c78e556760a0dbca8d932.tar.gz | |
feat: add `ctrlc_exit` option to control REPL exit by ctrl+c (#391)
| -rw-r--r-- | config.example.yaml | 1 | ||||
| -rw-r--r-- | src/config/mod.rs | 3 | ||||
| -rw-r--r-- | src/repl/mod.rs | 7 |
3 files changed, 8 insertions, 3 deletions
diff --git a/config.example.yaml b/config.example.yaml index 3e1eb59..52a1593 100644 --- a/config.example.yaml +++ b/config.example.yaml @@ -6,6 +6,7 @@ highlight: true # Set false to turn highlight light_theme: false # Whether to use a light theme wrap: no # Specify the text-wrapping mode (no, auto, <max-width>) wrap_code: false # Whether wrap code block +ctrlc_exit: true # Whether to exit REPL by pressing Ctrl+C twice auto_copy: false # Automatically copy the last output to the clipboard keybindings: emacs # REPL keybindings. (emacs, vi) prelude: '' # Set a default role or session (role:<name>, session:<name>) 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; |
