Explorar o código

Shell: Break out of continuation when ^C is pressed

This fixes the little issue with Shell not allowing cancellation of
commands once they were in continuation mode
```
$ ls '
$ # No matter what we do here, we cannot escape 'ls'
```
AnotherTest %!s(int64=5) %!d(string=hai) anos
pai
achega
6cd4d136a0
Modificáronse 1 ficheiros con 17 adicións e 0 borrados
  1. 17 0
      Shell/main.cpp

+ 17 - 0
Shell/main.cpp

@@ -1540,8 +1540,25 @@ int main(int argc, char** argv)
 
     StringBuilder complete_line_builder;
 
+    bool should_break_current_command { false };
+
+    editor.on_interrupt_handled = [&] {
+        if (s_should_continue != ExitCodeOrContinuationRequest::ContinuationRequest::Nothing) {
+            should_break_current_command = true;
+            editor.finish();
+        }
+    };
+
     for (;;) {
         auto line = editor.get_line(prompt());
+
+        if (should_break_current_command) {
+            complete_line_builder.clear();
+            s_should_continue = ExitCodeOrContinuationRequest::ContinuationRequest::Nothing;
+            should_break_current_command = false;
+            continue;
+        }
+
         if (line.is_empty())
             continue;