#[allow(unused_imports)]
#[allow(unused_imports)]
use crate::ported::zle::zle_main::*;
#[allow(unused_imports)]
use crate::ported::zle::zle_misc::*;
#[allow(unused_imports)]
use crate::ported::zle::zle_hist::*;
#[allow(unused_imports)]
use crate::ported::zle::zle_word::*;
#[allow(unused_imports)]
use crate::ported::zle::zle_params::*;
#[allow(unused_imports)]
use crate::ported::zle::zle_vi::*;
#[allow(unused_imports)]
use crate::ported::zle::zle_utils::*;
#[allow(unused_imports)]
use crate::ported::zle::zle_refresh::*;
#[allow(unused_imports)]
use crate::ported::zle::zle_tricky::*;
#[allow(unused_imports)]
use crate::ported::zle::textobjects::*;
#[allow(unused_imports)]
use crate::ported::zle::deltochar::*;
pub fn move_to_bol() {
while crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) > 0 && crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) - 1] != '\n' {
crate::ported::zle::zle_main::ZLECS.fetch_sub(1, std::sync::atomic::Ordering::SeqCst);
}
}
pub fn move_to_eol() {
while crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) < crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) && crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst)] != '\n' {
crate::ported::zle::zle_main::ZLECS.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
}
}
pub fn move_up() -> bool {
let col = current_column();
let mut line_start = crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst);
while line_start > 0 && crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[line_start - 1] != '\n' {
line_start -= 1;
}
if line_start == 0 {
return false; }
crate::ported::zle::zle_main::ZLECS.store(line_start - 1, std::sync::atomic::Ordering::SeqCst);
let mut prev_start = crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst);
while prev_start > 0 && crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[prev_start - 1] != '\n' {
prev_start -= 1;
}
crate::ported::zle::zle_main::ZLECS.store(prev_start + col.min(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) - prev_start), std::sync::atomic::Ordering::SeqCst);
true
}
pub fn move_down() -> bool {
let col = current_column();
let mut line_end = crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst);
while line_end < crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) && crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[line_end] != '\n' {
line_end += 1;
}
if line_end >= crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) {
return false; }
crate::ported::zle::zle_main::ZLECS.store(line_end + 1, std::sync::atomic::Ordering::SeqCst);
let mut next_end = crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst);
while next_end < crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) && crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[next_end] != '\n' {
next_end += 1;
}
crate::ported::zle::zle_main::ZLECS.store((crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) + col).min(next_end), std::sync::atomic::Ordering::SeqCst);
true
}
pub fn current_column() -> usize {
let mut col = 0;
let mut i = crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst);
while i > 0 && crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[i - 1] != '\n' {
i -= 1;
col += 1;
}
col
}
pub fn current_line() -> usize {
crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[..crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst)]
.iter()
.filter(|&&c| c == '\n')
.count()
}
pub fn count_lines() -> usize {
crate::ported::zle::zle_main::ZLELINE.lock().unwrap().iter().filter(|&&c| c == '\n').count() + 1
}
pub const BMC_BUFSIZE: usize = 6;
#[allow(unused_variables)]
pub fn alignmultiwordleft(pos: &mut usize, setpos: i32) { }
#[allow(unused_variables)]
pub fn alignmultiwordright(pos: &mut usize, setpos: i32) { }
pub fn backwardchar() -> i32 { let mut n = crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult; if n < 0 { let saved = n;
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = -n;
let ret = forwardchar();
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = saved;
return ret;
}
while crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) > 0 && n > 0 { deccs(); n -= 1;
}
0 }
pub fn backwardmetafiedchar() { if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) > 0 {
crate::ported::zle::zle_main::ZLECS.fetch_sub(1, std::sync::atomic::Ordering::SeqCst);
}
}
pub fn beginningofline() -> i32 { let n = crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult;
if n < 0 {
let saved = n;
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = -n;
let ret = endofline();
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = saved;
return ret;
}
for _ in 0..n {
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) == 0 {
return 0;
}
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) > 0 && crate::ported::zle::zle_main::ZLELINE.lock().unwrap().get(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) - 1) == Some(&'\n') {
crate::ported::zle::zle_main::ZLECS.fetch_sub(1, std::sync::atomic::Ordering::SeqCst);
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) == 0 {
return 0;
}
}
while crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) > 0 && crate::ported::zle::zle_main::ZLELINE.lock().unwrap().get(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) - 1) != Some(&'\n') {
crate::ported::zle::zle_main::ZLECS.fetch_sub(1, std::sync::atomic::Ordering::SeqCst);
}
}
0
}
pub fn beginningoflinehist() -> i32 { let r = beginningofline();
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) == 0 && crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult > 1 {
if let Some(_e) = crate::ported::zle::zle_main::history().lock().unwrap().up() {
crate::ported::zle::zle_main::ZLECS.store(0, std::sync::atomic::Ordering::SeqCst);
}
}
r
}
pub fn deactivateregion() -> i32 { crate::ported::zle::zle_main::REGION_ACTIVE.store(0, std::sync::atomic::Ordering::SeqCst); 0 }
pub fn deccs() { crate::ported::zle::zle_main::ZLECS.fetch_sub(1, std::sync::atomic::Ordering::SeqCst); }
pub fn decpos(pos: &mut usize) { *pos -= 1; }
pub fn endofline() -> i32 { let n = crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult;
if n < 0 {
let saved = n;
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = -n;
let ret = beginningofline();
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = saved;
return ret;
}
for _ in 0..n {
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) >= crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) {
crate::ported::zle::zle_main::ZLECS.store(crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst), std::sync::atomic::Ordering::SeqCst);
return 0;
}
if crate::ported::zle::zle_main::ZLELINE.lock().unwrap().get(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst)) == Some(&'\n') {
crate::ported::zle::zle_main::ZLECS.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) == crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) {
return 0;
}
}
while crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) != crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) && crate::ported::zle::zle_main::ZLELINE.lock().unwrap().get(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst)) != Some(&'\n') {
crate::ported::zle::zle_main::ZLECS.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
}
}
0
}
pub fn endoflinehist() -> i32 { let r = endofline();
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) == crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) && crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult > 1 {
if let Some(_e) = crate::ported::zle::zle_main::history().lock().unwrap().down() {
crate::ported::zle::zle_main::ZLECS.store(crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst), std::sync::atomic::Ordering::SeqCst);
}
}
r
}
pub fn exchangepointandmark() -> i32 { if crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult == 0 { crate::ported::zle::zle_main::REGION_ACTIVE.store(1, std::sync::atomic::Ordering::SeqCst); return 0; }
let x = crate::ported::zle::zle_main::MARK.load(std::sync::atomic::Ordering::SeqCst); crate::ported::zle::zle_main::MARK.store(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), std::sync::atomic::Ordering::SeqCst); crate::ported::zle::zle_main::ZLECS.store(x, std::sync::atomic::Ordering::SeqCst); if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) > crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) { crate::ported::zle::zle_main::ZLECS.store(crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst), std::sync::atomic::Ordering::SeqCst); }
if crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult > 0 { crate::ported::zle::zle_main::REGION_ACTIVE.store(1, std::sync::atomic::Ordering::SeqCst); }
0 }
pub fn forwardchar() -> i32 { let mut n = crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult; if n < 0 { let saved = n;
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = -n;
let ret = backwardchar();
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = saved;
return ret;
}
while crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) < crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) && n > 0 { inccs(); n -= 1;
}
0 }
pub fn inccs() { crate::ported::zle::zle_main::ZLECS.fetch_add(1, std::sync::atomic::Ordering::SeqCst); }
pub fn incpos(pos: &mut usize) { *pos += 1; }
pub fn setmarkcommand() -> i32 { if crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult < 0 { crate::ported::zle::zle_main::REGION_ACTIVE.store(0, std::sync::atomic::Ordering::SeqCst); return 0; }
crate::ported::zle::zle_main::MARK.store(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), std::sync::atomic::Ordering::SeqCst); crate::ported::zle::zle_main::REGION_ACTIVE.store(1, std::sync::atomic::Ordering::SeqCst); 0 }
pub fn vibackwardchar() -> i32 { let mut n = crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult; if n < 0 { let saved = n;
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = -n;
let ret = viforwardchar();
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = saved;
return ret;
}
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) == crate::ported::zle::zle_utils::findbol() { return 1; }
while n > 0 && crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) > 0 { deccs(); if crate::ported::zle::zle_main::ZLELINE.lock().unwrap().get(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst)) == Some(&'\n') {
crate::ported::zle::zle_main::ZLECS.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
break;
}
n -= 1;
}
0 }
pub fn vibeginningofline() -> i32 { crate::ported::zle::zle_main::ZLECS.store(crate::ported::zle::zle_utils::findbol(), std::sync::atomic::Ordering::SeqCst); 0 }
pub fn viendofline() -> i32 { let oldcs = crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst);
let n = crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult;
if n < 1 {
return 1;
}
for _ in 0..n {
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) > crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) {
crate::ported::zle::zle_main::ZLECS.store(oldcs, std::sync::atomic::Ordering::SeqCst);
return 1;
}
crate::ported::zle::zle_main::ZLECS.store(crate::ported::zle::zle_utils::findeol() + 1, std::sync::atomic::Ordering::SeqCst);
}
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) > 0 {
deccs();
}
0
}
pub fn vifindchar(repeat: i32) -> i32 { use std::sync::atomic::Ordering;
use crate::ported::zle::zle_misc::{VFINDCHAR, VFINDDIR, TAILADD};
let vfind = VFINDCHAR.load(Ordering::Relaxed);
let vdir = VFINDDIR.load(Ordering::Relaxed);
let tail = TAILADD.load(Ordering::Relaxed);
let ocs = crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst);
let n = crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult;
if vdir == 0 { return 1;
}
if n < 0 { crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = -n;
let r = vifindchar(repeat);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = n;
return r;
}
if repeat != 0 && tail != 0 {
if vdir > 0 {
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) + 1 < crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) &&
(crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) + 1] as i32) == vfind {
inccs();
}
} else if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) > 0 &&
(crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) - 1] as i32) == vfind {
deccs();
}
}
let mut nn = n;
while nn > 0 { loop { if vdir > 0 {
inccs();
} else {
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) == 0 { break; }
deccs();
}
if { let __c = crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst)]; crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) >= crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) ||
(__c as i32) == vfind ||
__c == '\n' } {
break;
}
}
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) >= crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) || crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst)] == '\n' {
crate::ported::zle::zle_main::ZLECS.store(ocs, std::sync::atomic::Ordering::SeqCst); return 1;
}
nn -= 1;
}
if tail > 0 { inccs();
} else if tail < 0 {
deccs();
}
0
}
pub fn vifindnextchar() -> i32 { use std::sync::atomic::Ordering;
use crate::ported::zle::zle_misc::{TAILADD, VFINDCHAR, VFINDDIR};
let c = crate::ported::zle::zle_vi::vigetkey();
if c < 0 {
return 1;
}
VFINDCHAR.store(c, Ordering::SeqCst);
VFINDDIR.store(1, Ordering::SeqCst);
TAILADD.store(0, Ordering::SeqCst);
vifindchar(0)
}
pub fn vifindnextcharskip() -> i32 { use std::sync::atomic::Ordering;
use crate::ported::zle::zle_misc::{TAILADD, VFINDCHAR, VFINDDIR};
let c = crate::ported::zle::zle_vi::vigetkey();
if c < 0 { return 1; }
VFINDCHAR.store(c, Ordering::SeqCst);
VFINDDIR.store(1, Ordering::SeqCst);
TAILADD.store(-1, Ordering::SeqCst);
vifindchar(0)
}
pub fn vifindprevchar() -> i32 { use std::sync::atomic::Ordering;
use crate::ported::zle::zle_misc::{TAILADD, VFINDCHAR, VFINDDIR};
let c = crate::ported::zle::zle_vi::vigetkey();
if c < 0 { return 1; }
VFINDCHAR.store(c, Ordering::SeqCst);
VFINDDIR.store(-1, Ordering::SeqCst);
TAILADD.store(0, Ordering::SeqCst);
vifindchar(0)
}
pub fn vifindprevcharskip() -> i32 { use std::sync::atomic::Ordering;
use crate::ported::zle::zle_misc::{TAILADD, VFINDCHAR, VFINDDIR};
let c = crate::ported::zle::zle_vi::vigetkey();
if c < 0 { return 1; }
VFINDCHAR.store(c, Ordering::SeqCst);
VFINDDIR.store(-1, Ordering::SeqCst);
TAILADD.store(1, Ordering::SeqCst);
vifindchar(0)
}
pub fn vifirstnonblank() -> i32 { crate::ported::zle::zle_main::ZLECS.store(crate::ported::zle::zle_utils::findbol(), std::sync::atomic::Ordering::SeqCst); while crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) != crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) { let ch = crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst)];
if ch != ' ' && ch != '\t' {
break;
}
inccs(); }
0 }
pub fn viforwardchar() -> i32 { let mut lim = crate::ported::zle::zle_utils::findeol(); let mut n = crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult; if n < 0 { let saved = n;
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = -n;
let ret = vibackwardchar();
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = saved;
return ret;
}
if *crate::ported::zle::zle_keymap::curkeymapname() == "vicmd" && lim > 0 {
lim -= 1;
}
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) >= lim { return 1; }
while n > 0 && crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) < lim { inccs(); n -= 1;
}
0 }
pub fn vigotocolumn() -> i32 { let bol = crate::ported::zle::zle_utils::findbol();
let eol = crate::ported::zle::zle_utils::findeol();
let n = crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult;
let target = if n >= 0 {
let off = if n > 0 { (n as usize) - 1 } else { 0 };
(bol + off).min(eol)
} else {
eol.saturating_sub((-n) as usize)
};
crate::ported::zle::zle_main::ZLECS.store(target.max(bol).min(eol), std::sync::atomic::Ordering::SeqCst);
0
}
pub fn vigotomark(ch: char) -> i32 { let idx = match ch {
'a'..='z' => (ch as u8 - b'a') as usize, '\'' | '`' => 26, _ => return 1,
};
if let Some((cs, hist)) = crate::ported::zle::zle_main::vimarks().lock().unwrap()[idx] { crate::ported::zle::zle_main::ZLECS.store(cs.min(crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst)), std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::history().lock().unwrap().cursor = hist.max(0) as usize;
return 0;
}
1
}
pub fn vigotomarkline(ch: char) -> i32 { let r = vigotomark(ch);
if r == 0 {
let bol = crate::ported::zle::zle_utils::findbol();
let mut p = bol;
while p < crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) {
let c = crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[p];
if c != ' ' && c != '\t' {
break;
}
p += 1;
}
crate::ported::zle::zle_main::ZLECS.store(p, std::sync::atomic::Ordering::SeqCst);
}
r
}
pub fn vimatchbracket() -> i32 { let ocs = crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst); if (crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) == crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) || crate::ported::zle::zle_main::ZLELINE.lock().unwrap().get(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst)) == Some(&'\n')) && crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) > 0
{
deccs(); }
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) == crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) || crate::ported::zle::zle_main::ZLELINE.lock().unwrap().get(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst)) == Some(&'\n') { crate::ported::zle::zle_main::ZLECS.store(ocs, std::sync::atomic::Ordering::SeqCst); return 1; }
let me = crate::ported::zle::zle_main::ZLELINE.lock().unwrap()[crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst)]; let (oth, dir) = match me { '{' => ('}', 1),
'}' => ('{', -1),
'(' => (')', 1),
')' => ('(', -1),
'[' => (']', 1),
']' => ('[', -1),
'<' => ('>', 1),
'>' => ('<', -1),
_ => {
crate::ported::zle::zle_main::ZLECS.store(ocs, std::sync::atomic::Ordering::SeqCst);
return 1;
}
};
let mut depth = 1i32; loop {
if dir > 0 {
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) >= crate::ported::zle::zle_main::ZLELL.load(std::sync::atomic::Ordering::SeqCst) {
crate::ported::zle::zle_main::ZLECS.store(ocs, std::sync::atomic::Ordering::SeqCst);
return 1;
}
crate::ported::zle::zle_main::ZLECS.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
} else {
if crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst) == 0 {
crate::ported::zle::zle_main::ZLECS.store(ocs, std::sync::atomic::Ordering::SeqCst);
return 1;
}
crate::ported::zle::zle_main::ZLECS.fetch_sub(1, std::sync::atomic::Ordering::SeqCst);
}
let c = match crate::ported::zle::zle_main::ZLELINE.lock().unwrap().get(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst)) {
Some(&c) => c,
None => {
crate::ported::zle::zle_main::ZLECS.store(ocs, std::sync::atomic::Ordering::SeqCst);
return 1;
}
};
if c == me {
depth += 1;
} else if c == oth {
depth -= 1;
if depth == 0 {
return 0;
}
}
}
}
pub fn virepeatfind() -> i32 { vifindchar(1)
}
pub fn virevrepeatfind() -> i32 { use std::sync::atomic::Ordering;
use crate::ported::zle::zle_misc::{TAILADD, VFINDDIR};
if crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult < 0 {
let mut __g_zmod = crate::ported::zle::zle_main::ZMOD.lock().unwrap();
__g_zmod.mult = -__g_zmod.mult;
let ret = vifindchar(1);
let mut __g_zmod = crate::ported::zle::zle_main::ZMOD.lock().unwrap();
__g_zmod.mult = -__g_zmod.mult;
return ret;
}
let t = TAILADD.load(Ordering::SeqCst);
let d = VFINDDIR.load(Ordering::SeqCst);
TAILADD.store(-t, Ordering::SeqCst);
VFINDDIR.store(-d, Ordering::SeqCst);
let ret = vifindchar(1);
TAILADD.store(t, Ordering::SeqCst);
VFINDDIR.store(d, Ordering::SeqCst);
ret
}
pub fn visetmark(ch: char) -> i32 { if !('a'..='z').contains(&ch) { return 1;
}
let idx = (ch as u8 - b'a') as usize; crate::ported::zle::zle_main::vimarks().lock().unwrap()[idx] = Some((crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), crate::ported::zle::zle_main::history().lock().unwrap().cursor as i32)); 0
}
pub fn visuallinemode() -> i32 { use crate::ported::zle::zle_h::{MOD_MULT, MOD_TMULT, MOD_VIBUF, MOD_VIAPP, MOD_NEG, MOD_NULL, MOD_CHAR, MOD_LINE, MOD_PRI, MOD_CLIP, MOD_OSSEL};
match crate::ported::zle::zle_main::REGION_ACTIVE.load(std::sync::atomic::Ordering::SeqCst) { 2 => { crate::ported::zle::zle_main::REGION_ACTIVE.store(0, std::sync::atomic::Ordering::SeqCst); } 0 => {
crate::ported::zle::zle_main::MARK.store(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), std::sync::atomic::Ordering::SeqCst); crate::ported::zle::zle_main::REGION_ACTIVE.store(2, std::sync::atomic::Ordering::SeqCst); }
1 => { crate::ported::zle::zle_main::REGION_ACTIVE.store(2, std::sync::atomic::Ordering::SeqCst); } _ => {}
}
let _ = MOD_LINE;
0
}
pub fn visualmode() -> i32 { use crate::ported::zle::zle_h::{MOD_MULT, MOD_TMULT, MOD_VIBUF, MOD_VIAPP, MOD_NEG, MOD_NULL, MOD_CHAR, MOD_LINE, MOD_PRI, MOD_CLIP, MOD_OSSEL};
match crate::ported::zle::zle_main::REGION_ACTIVE.load(std::sync::atomic::Ordering::SeqCst) { 1 => { crate::ported::zle::zle_main::REGION_ACTIVE.store(0, std::sync::atomic::Ordering::SeqCst); } 0 => {
crate::ported::zle::zle_main::MARK.store(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), std::sync::atomic::Ordering::SeqCst); crate::ported::zle::zle_main::REGION_ACTIVE.store(1, std::sync::atomic::Ordering::SeqCst); }
2 => { crate::ported::zle::zle_main::REGION_ACTIVE.store(1, std::sync::atomic::Ordering::SeqCst); } _ => {}
}
let _ = MOD_CHAR;
0
}
#[cfg(test)]
mod region_tests {
use super::*;
#[test]
fn deactivateregion_clears_active() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
crate::ported::zle::zle_main::REGION_ACTIVE.store(1, std::sync::atomic::Ordering::SeqCst);
let r = deactivateregion();
assert_eq!(r, 0);
assert_eq!(crate::ported::zle::zle_main::REGION_ACTIVE.load(std::sync::atomic::Ordering::SeqCst), 0);
}
#[test]
fn setmarkcommand_sets_mark_to_cursor() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
crate::ported::zle::zle_main::ZLECS.store(7, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = 1;
let r = setmarkcommand();
assert_eq!(r, 0);
assert_eq!(crate::ported::zle::zle_main::MARK.load(std::sync::atomic::Ordering::SeqCst), 7);
assert_eq!(crate::ported::zle::zle_main::REGION_ACTIVE.load(std::sync::atomic::Ordering::SeqCst), 1);
}
#[test]
fn setmarkcommand_negative_mult_deactivates() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
crate::ported::zle::zle_main::REGION_ACTIVE.store(1, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::MARK.store(5, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(7, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = -1;
let r = setmarkcommand();
assert_eq!(r, 0);
assert_eq!(crate::ported::zle::zle_main::REGION_ACTIVE.load(std::sync::atomic::Ordering::SeqCst), 0);
assert_eq!(crate::ported::zle::zle_main::MARK.load(std::sync::atomic::Ordering::SeqCst), 5);
}
#[test]
fn exchangepointandmark_swaps() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "hello world".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(11, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(3, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::MARK.store(8, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = 1;
let r = exchangepointandmark();
assert_eq!(r, 0);
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 8);
assert_eq!(crate::ported::zle::zle_main::MARK.load(std::sync::atomic::Ordering::SeqCst), 3);
assert_eq!(crate::ported::zle::zle_main::REGION_ACTIVE.load(std::sync::atomic::Ordering::SeqCst), 1);
}
#[test]
fn exchangepointandmark_zero_mult_just_activates() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
crate::ported::zle::zle_main::ZLECS.store(3, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::MARK.store(8, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = 0;
let r = exchangepointandmark();
assert_eq!(r, 0);
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 3);
assert_eq!(crate::ported::zle::zle_main::MARK.load(std::sync::atomic::Ordering::SeqCst), 8);
assert_eq!(crate::ported::zle::zle_main::REGION_ACTIVE.load(std::sync::atomic::Ordering::SeqCst), 1);
}
#[test]
fn exchangepointandmark_clamps_zlecs_to_zlell() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "hi".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(2, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(1, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::MARK.store(99, std::sync::atomic::Ordering::SeqCst); crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = 1;
exchangepointandmark();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 2);
}
#[test]
fn inccs_increments_zlecs() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "abc".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(3, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(0, std::sync::atomic::Ordering::SeqCst);
inccs();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 1);
inccs();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 2);
}
#[test]
fn deccs_decrements_zlecs() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "abc".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(3, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(2, std::sync::atomic::Ordering::SeqCst);
deccs();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 1);
deccs();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 0);
}
#[test]
fn incpos_decpos_round_trip() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
let mut p = 5;
incpos(&mut p);
assert_eq!(p, 6);
incpos(&mut p);
assert_eq!(p, 7);
decpos(&mut p);
assert_eq!(p, 6);
}
#[test]
fn forwardchar_moves_zmult_positions() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "hello world".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(11, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(0, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = 3;
let r = forwardchar();
assert_eq!(r, 0);
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 3);
}
#[test]
fn forwardchar_stops_at_zlell() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "ab".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(2, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(0, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = 99;
forwardchar();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 2);
}
#[test]
fn backwardchar_moves_zmult_positions() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "hello world".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(11, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(8, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = 3;
let r = backwardchar();
assert_eq!(r, 0);
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 5);
}
#[test]
fn backwardchar_stops_at_zero() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "ab".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(2, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(1, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = 99;
backwardchar();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 0);
}
#[test]
fn forwardchar_negative_count_delegates_to_backward() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "hello".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(5, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(4, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = -2;
forwardchar();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 2);
assert_eq!(crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult, -2);
}
#[test]
fn backwardchar_negative_count_delegates_to_forward() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "hello".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(5, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(1, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = -2;
backwardchar();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 3);
assert_eq!(crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult, -2);
}
#[test]
fn vibeginningofline_jumps_to_bol() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "abc\ndef\nghi".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(11, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(9, std::sync::atomic::Ordering::SeqCst); let r = vibeginningofline();
assert_eq!(r, 0);
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 8); }
#[test]
fn vibackwardchar_stops_at_line_start() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "abc\ndef".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(7, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(4, std::sync::atomic::Ordering::SeqCst); crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = 1;
let r = vibackwardchar();
assert_eq!(r, 1);
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 4); }
#[test]
fn vibackwardchar_moves_within_line() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "hello world".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(11, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(8, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = 3;
vibackwardchar();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 5);
}
#[test]
fn viforwardchar_stops_at_eol() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "abc\ndef".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(7, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(3, std::sync::atomic::Ordering::SeqCst); crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = 1;
let r = viforwardchar();
assert_eq!(r, 1);
}
#[test]
fn viforwardchar_moves_within_line() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "hello world".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(11, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(0, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = 3;
viforwardchar();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 3);
}
#[test]
fn viforwardchar_clamps_at_findeol() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "ab".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(2, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(0, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZMOD.lock().unwrap().mult = 99;
viforwardchar();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 2);
}
#[test]
fn vifirstnonblank_skips_leading_spaces() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = " hello".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(8, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(5, std::sync::atomic::Ordering::SeqCst); let r = vifirstnonblank();
assert_eq!(r, 0);
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 3); }
#[test]
fn vifirstnonblank_skips_tabs() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "\t\t\tfoo".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(6, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(0, std::sync::atomic::Ordering::SeqCst);
vifirstnonblank();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 3);
}
#[test]
fn vifirstnonblank_no_blanks() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "hello".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(5, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(3, std::sync::atomic::Ordering::SeqCst);
vifirstnonblank();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 0);
}
#[test]
fn vifirstnonblank_all_blanks() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = " ".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(3, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(0, std::sync::atomic::Ordering::SeqCst);
vifirstnonblank();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 3);
}
#[test]
fn vifirstnonblank_respects_findbol() {
let _g = crate::ported::zle::zle_main::zle_test_setup();
crate::ported::zle::zle_main::zle_reset();
*crate::ported::zle::zle_main::ZLELINE.lock().unwrap() = "abc\n def".chars().collect();
crate::ported::zle::zle_main::ZLELL.store(10, std::sync::atomic::Ordering::SeqCst);
crate::ported::zle::zle_main::ZLECS.store(8, std::sync::atomic::Ordering::SeqCst); vifirstnonblank();
assert_eq!(crate::ported::zle::zle_main::ZLECS.load(std::sync::atomic::Ordering::SeqCst), 7);
}
}