From b2d211a7dcd2a5df31a58a2e91d4f399f01401df Mon Sep 17 00:00:00 2001 From: itycodes Date: Thu, 12 Feb 2026 12:28:16 +0100 Subject: [PATCH] Add EoT handling --- src/reader/esc_parse/mod.rs | 4 ++++ src/reader/mod.rs | 12 +++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/reader/esc_parse/mod.rs b/src/reader/esc_parse/mod.rs index 8d38820..b696974 100644 --- a/src/reader/esc_parse/mod.rs +++ b/src/reader/esc_parse/mod.rs @@ -105,6 +105,10 @@ impl SequenceState { self.out_buf.push(InputChar::Backspace); Result::Ok(()) } + else if chr == 0x04 { + self.out_buf.push(InputChar::EoT); + Result::Ok(()) + } // Unrecognized else { Result::Err(AcceptError::Unimplemented(chr)) diff --git a/src/reader/mod.rs b/src/reader/mod.rs index 1c36398..0388a63 100644 --- a/src/reader/mod.rs +++ b/src/reader/mod.rs @@ -1,6 +1,6 @@ #![allow(unused)] -use std::mem::MaybeUninit; +use std::{io::Read, mem::MaybeUninit}; use crate::reader::esc_parse::{InputChar, bell, hide_cursor, show_cursor}; @@ -24,7 +24,8 @@ pub enum InitTTYError { #[derive(Debug)] pub enum ReadError { - EscapeError(esc_parse::AcceptError) + EscapeError(esc_parse::AcceptError), + Exited, } #[derive(Debug)] @@ -35,6 +36,7 @@ pub enum EditCommand { CursorBack, CursorForward, DeleteBack, + Exit, } macro_rules! edit_cmd { @@ -145,6 +147,9 @@ impl ReaderState { if chr == InputChar::Backspace { return edit_cmd!(DeleteBack); } + if chr == InputChar::EoT { + return edit_cmd!(Exit); + } } } } @@ -197,7 +202,8 @@ impl ReaderState { }, HistoryNext => { self.history_front(); - } + }, + Exit => return Err(ReadError::Exited) } } }