Add ! negation support, fix POSIX exit statuses, and improve vi emulation with comprehensive tests

This commit is contained in:
2026-03-07 21:57:04 -05:00
parent 490ce4571d
commit 07d7015dd4
16 changed files with 1240 additions and 211 deletions

View File

@@ -2,6 +2,24 @@ use std::{fmt::Display, sync::Mutex};
pub static REGISTERS: Mutex<Registers> = Mutex::new(Registers::new());
#[cfg(test)]
pub static SAVED_REGISTERS: Mutex<Option<Registers>> = Mutex::new(None);
#[cfg(test)]
pub fn save_registers() {
let mut saved = SAVED_REGISTERS.lock().unwrap();
*saved = Some(REGISTERS.lock().unwrap().clone());
}
#[cfg(test)]
pub fn restore_registers() {
let mut saved = SAVED_REGISTERS.lock().unwrap();
if let Some(ref registers) = *saved {
*REGISTERS.lock().unwrap() = registers.clone();
}
*saved = None;
}
pub fn read_register(ch: Option<char>) -> Option<RegisterContent> {
let lock = REGISTERS.lock().unwrap();
lock.get_reg(ch).map(|r| r.content().clone())
@@ -79,7 +97,7 @@ impl RegisterContent {
}
}
#[derive(Default, Debug)]
#[derive(Default, Clone, Debug)]
pub struct Registers {
default: Register,
a: Register,