Closed kotatsuyaki closed 3 years ago
Thanks for putting up the issue. A new version of minus is in the works, if you want to fix it, you should probably do it in the 4.0
branch, which will be the next major release of minus
After some investigation,
à
) can trigger the bug, so it also happens on languages with accented letters like Spanish.master
branch,
let truncate = x + query.char_indices().count();
with let truncate = x + query.len();
, because String::drain
requires a byte range, not a character index range.4.0
branch, the panic occurs before the pager is shown, due to a call to split_at()
with confused index. I've used the textwrap
library to resolve it, but I'm not sure if we should include that as a dependency. It seems better to just delegate line wrapping to mature libraries that can deal with arbitrary Unicode strings, instead of implementing as part of the minus library itself.
pub(crate) fn break_line(mut line: &str, cols: usize) -> Vec<String> {
textwrap::wrap(line, cols)
.into_iter()
.map(|line| line.to_string())
.collect()
}
4.0
I am doing yet another rewrite using the textwrap
crate, hope it will soon fix the panic
I have fixed this in 4.0 branch. Closing this issue.
When searching for strings containing double width characters, the program panics at this call to
String::drain
, since the endpoint is not on a char boundary. I haven't figured out how to fix it.Steps to reproduce
Search
甲州
in the pager with the following code.Dummy text in Japanese: text.txt
main.rs
Cargo.toml
Panic backtrace