From 51676362b9a8ed8a93963d67cf20e3653ecdf33d Mon Sep 17 00:00:00 2001 From: Syed Daanish Date: Tue, 8 Sep 2026 07:06:38 +0100 Subject: [PATCH] Fix cancellation procedure. --- src/bed/run.cc | 6 ++++-- src/internal/ui/text_mode/layout.cc | 0 src/internal/ui/text_mode/text_mode.cc | 9 ++++++--- 3 files changed, 10 insertions(+), 5 deletions(-) delete mode 100644 src/internal/ui/text_mode/layout.cc diff --git a/src/bed/run.cc b/src/bed/run.cc index 20f65be..74d2085 100644 --- a/src/bed/run.cc +++ b/src/bed/run.cc @@ -168,10 +168,12 @@ void BEd::handle(std::string_view cmd, bool eof) { std::tie(vase, lang, state) = c.function->pre_text_mode(*this, address, c.argument); internal::ui::text_mode::TextMode tm(*this, vase, lang, state); auto [a, b] = tm.run(); - if (!b) + if (!b) { text = a; - else + } else { internal::vase::Shard::release(a); + throw ed_error("Operation cancelled."); + } } if (c.function->handle) c.function->handle(*this, address, text, c.argument, nullptr); diff --git a/src/internal/ui/text_mode/layout.cc b/src/internal/ui/text_mode/layout.cc deleted file mode 100644 index e69de29..0000000 diff --git a/src/internal/ui/text_mode/text_mode.cc b/src/internal/ui/text_mode/text_mode.cc index 303d25a..7ceb99a 100644 --- a/src/internal/ui/text_mode/text_mode.cc +++ b/src/internal/ui/text_mode/text_mode.cc @@ -159,6 +159,7 @@ std::pair TextMode::run_terminal() { term_height = rows; redraw(); bool running = true; + bool cancelled = false; while (running) { redraw(); @@ -176,8 +177,10 @@ std::pair TextMode::run_terminal() { case io::KeyEvent::Modifier::ALT: case io::KeyEvent::Modifier::CTRL_ALT: case io::KeyEvent::Modifier::CTRL: - if (res.text[0] == 'c') - return {vase, true}; + if (res.text[0] == 'c') { + cancelled = true; + running = false; + } break; case io::KeyEvent::Modifier::NONE: if (res.text[0] == '\b' || res.text[0] == 0x7f) { @@ -314,7 +317,7 @@ std::pair TextMode::run_terminal() { uint16_t last_row = start + required_height; bed.io.move_cursor(last_row, 1); bed.io.write("\n"); - return {vase, false}; + return {vase, cancelled}; } void TextMode::grow() {