#[allow(unused_imports)]
use crate::ported::zle::{
textobjects::*, zle_h::*, zle_hist::*, zle_main::*, zle_misc::*, zle_move::*, zle_params::*,
zle_refresh::*, zle_tricky::*, zle_utils::*, zle_vi::*, zle_word::*,
};
#[allow(unused_imports)]
pub fn deltochar() -> i32 {
let c = match getfullchar(false) {
Some(ch) => ch,
None => return 1,
};
let mut dest = ZLECS.load(std::sync::atomic::Ordering::SeqCst); let mut ok = 0i32; let mut n: i32 = if ZMOD.lock().unwrap().flags
& MOD_MULT
!= 0
{
ZMOD.lock().unwrap().mult
} else {
1
}; let zap = BINDK
.lock()
.unwrap()
.as_ref()
.map(|t| t.nam.as_str())
== Some("zap-to-char");
if n > 0 {
while n > 0
&& dest != ZLELL.load(std::sync::atomic::Ordering::SeqCst)
{
n -= 1;
while dest
!= ZLELL.load(std::sync::atomic::Ordering::SeqCst)
&& ZLELINE
.lock()
.unwrap()
.get(dest)
.copied()
!= Some(c)
{
dest += 1; }
if dest != ZLELL.load(std::sync::atomic::Ordering::SeqCst)
{
if !zap || n > 0 {
dest += 1; }
if n == 0 {
let ct = (dest as i32)
- (ZLECS
.load(std::sync::atomic::Ordering::SeqCst)
as i32); forekill(ct, 0); ok += 1; }
}
}
} else {
if dest > 0 {
dest -= 1; }
while n < 0 && dest != 0 {
n += 1;
while dest != 0
&& ZLELINE
.lock()
.unwrap()
.get(dest)
.copied()
!= Some(c)
{
dest -= 1; }
if ZLELINE
.lock()
.unwrap()
.get(dest)
.copied()
== Some(c)
{
if n == 0 {
let zap_adj = if zap { 1 } else { 0 }; let ct = (ZLECS
.load(std::sync::atomic::Ordering::SeqCst)
as i32)
- (dest as i32)
- zap_adj;
backkill(ct, 0); ok += 1; }
if dest > 0 {
dest -= 1; }
}
}
}
if ok != 0 {
0
} else {
1
} }
pub fn setup_() -> i32 {
0 }
pub fn features_() -> i32 {
0 }
pub fn enables_() -> i32 {
0 }
pub fn boot_() -> i32 {
0 }
pub fn cleanup_() -> i32 {
0 }
pub fn finish_() -> i32 {
0 }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn deltochar_returns_one_when_no_input_available() {
let _g = crate::test_util::global_state_lock();
let _g = zle_test_setup();
assert_eq!(deltochar(), 1);
}
#[test]
fn module_lifecycle_shims_all_return_zero() {
let _g = crate::test_util::global_state_lock();
assert_eq!(setup_(), 0);
assert_eq!(features_(), 0);
assert_eq!(enables_(), 0);
assert_eq!(boot_(), 0);
assert_eq!(cleanup_(), 0);
assert_eq!(finish_(), 0);
}
}