mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-21 23:01:05 +00:00
feat: display newlines in input as spaces to improve readability (#2932)
This commit is contained in:
parent
a8a1b5625b
commit
8657e6b6f5
5 changed files with 39 additions and 24 deletions
|
|
@ -156,7 +156,7 @@ impl Sendable {
|
|||
for (k, v) in args {
|
||||
match k {
|
||||
DataKey::Integer(i) => tbl.raw_set(i + 1, Self::data_to_value(lua, v)?),
|
||||
DataKey::String(s) => tbl.raw_set(replace_cow(&s, "-", "_"), Self::data_to_value(lua, v)?),
|
||||
DataKey::String(s) => tbl.raw_set(replace_cow(s, "-", "_"), Self::data_to_value(lua, v)?),
|
||||
_ => Err("invalid key in Data".into_lua_err()),
|
||||
}?;
|
||||
}
|
||||
|
|
@ -170,7 +170,7 @@ impl Sendable {
|
|||
match k {
|
||||
DataKey::Integer(i) => tbl.raw_set(i + 1, Self::data_to_value_ref(lua, v)?),
|
||||
DataKey::String(s) => {
|
||||
tbl.raw_set(replace_cow(s, "-", "_"), Self::data_to_value_ref(lua, v)?)
|
||||
tbl.raw_set(replace_cow(s.as_ref(), "-", "_"), Self::data_to_value_ref(lua, v)?)
|
||||
}
|
||||
_ => Err("invalid key in Data".into_lua_err()),
|
||||
}?;
|
||||
|
|
|
|||
|
|
@ -169,10 +169,7 @@ impl Partitions {
|
|||
for (a, b) in
|
||||
[(r"\011", "\t"), (r"\012", "\n"), (r"\040", " "), (r"\043", "#"), (r"\134", r"\")]
|
||||
{
|
||||
s = match replace_cow(&s, a, b) {
|
||||
Cow::Borrowed(_) => s,
|
||||
Cow::Owned(new) => Cow::Owned(new),
|
||||
};
|
||||
s = replace_cow(s, a, b);
|
||||
}
|
||||
s
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,35 +33,48 @@ pub fn strip_trailing_newline(mut s: String) -> String {
|
|||
s
|
||||
}
|
||||
|
||||
pub fn replace_cow<'a>(s: &'a str, from: &str, to: &str) -> Cow<'a, str> {
|
||||
replace_cow_impl(s, s.match_indices(from), to)
|
||||
pub fn replace_cow<'a, T>(s: T, from: &str, to: &str) -> Cow<'a, str>
|
||||
where
|
||||
T: Into<Cow<'a, str>>,
|
||||
{
|
||||
let cow = s.into();
|
||||
match replace_cow_impl(&cow, cow.match_indices(from), to) {
|
||||
Cow::Borrowed(_) => cow,
|
||||
Cow::Owned(new) => Cow::Owned(new),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn replacen_cow<'a>(s: &'a str, from: &str, to: &str, n: usize) -> Cow<'a, str> {
|
||||
replace_cow_impl(s, s.match_indices(from).take(n), to)
|
||||
pub fn replacen_cow<'a, T>(s: T, from: &str, to: &str, n: usize) -> Cow<'a, str>
|
||||
where
|
||||
T: Into<Cow<'a, str>>,
|
||||
{
|
||||
let cow = s.into();
|
||||
match replace_cow_impl(&cow, cow.match_indices(from).take(n), to) {
|
||||
Cow::Borrowed(_) => cow,
|
||||
Cow::Owned(now) => Cow::Owned(now),
|
||||
}
|
||||
}
|
||||
|
||||
fn replace_cow_impl<'s>(
|
||||
src: &'s str,
|
||||
mut indices: impl Iterator<Item = (usize, &'s str)>,
|
||||
to: &str,
|
||||
) -> Cow<'s, str> {
|
||||
fn replace_cow_impl<'a, T>(src: &'a str, mut indices: T, to: &str) -> Cow<'a, str>
|
||||
where
|
||||
T: Iterator<Item = (usize, &'a str)>,
|
||||
{
|
||||
let Some((first_idx, first_sub)) = indices.next() else {
|
||||
return Cow::Borrowed(src);
|
||||
};
|
||||
|
||||
let mut result = Cow::Owned(String::with_capacity(src.len()));
|
||||
let mut result = String::with_capacity(src.len());
|
||||
result += unsafe { src.get_unchecked(..first_idx) };
|
||||
result.to_mut().push_str(to);
|
||||
result += to;
|
||||
|
||||
let mut last = first_idx + first_sub.len();
|
||||
for (idx, sub) in indices {
|
||||
result += unsafe { src.get_unchecked(last..idx) };
|
||||
result.to_mut().push_str(to);
|
||||
result += to;
|
||||
last = idx + sub.len();
|
||||
}
|
||||
|
||||
result + unsafe { src.get_unchecked(last..) }
|
||||
Cow::Owned(result + unsafe { src.get_unchecked(last..) })
|
||||
}
|
||||
|
||||
pub fn replace_vec_cow<'a>(v: &'a [u8], from: &[u8], to: &[u8]) -> Cow<'a, [u8]> {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use yazi_macro::render;
|
||||
use yazi_shared::event::CmdCow;
|
||||
use yazi_shared::{event::CmdCow, replace_cow};
|
||||
|
||||
use crate::input::{Input, InputMode, op::InputOp};
|
||||
|
||||
|
|
@ -15,6 +15,8 @@ impl Input {
|
|||
}
|
||||
|
||||
pub fn replace_str(&mut self, s: &str) {
|
||||
let s = replace_cow(replace_cow(s, "\r", " "), "\n", " ");
|
||||
|
||||
let snap = self.snap_mut();
|
||||
snap.mode = InputMode::Normal;
|
||||
|
||||
|
|
@ -22,8 +24,8 @@ impl Input {
|
|||
let mut it = snap.value[start..].char_indices();
|
||||
match (it.next(), it.next()) {
|
||||
(None, _) => {}
|
||||
(Some(_), None) => snap.value.replace_range(start..snap.len(), s),
|
||||
(Some(_), Some((len, _))) => snap.value.replace_range(start..start + len, s),
|
||||
(Some(_), None) => snap.value.replace_range(start..snap.len(), &s),
|
||||
(Some(_), Some((len, _))) => snap.value.replace_range(start..start + len, &s),
|
||||
}
|
||||
|
||||
render!();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
use yazi_config::keymap::Key;
|
||||
use yazi_macro::render;
|
||||
use yazi_shared::replace_cow;
|
||||
|
||||
use crate::input::{Input, InputMode};
|
||||
|
||||
|
|
@ -19,11 +20,13 @@ impl Input {
|
|||
}
|
||||
|
||||
pub fn type_str(&mut self, s: &str) {
|
||||
let s = replace_cow(replace_cow(s, "\r", " "), "\n", " ");
|
||||
|
||||
let snap = self.snap_mut();
|
||||
if snap.cursor < 1 {
|
||||
snap.value.insert_str(0, s);
|
||||
snap.value.insert_str(0, &s);
|
||||
} else {
|
||||
snap.value.insert_str(snap.idx(snap.cursor).unwrap(), s);
|
||||
snap.value.insert_str(snap.idx(snap.cursor).unwrap(), &s);
|
||||
}
|
||||
|
||||
self.r#move(s.chars().count() as isize);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue