Add … when chars are truncated in picker
This commit is contained in:
parent
10548bf0e3
commit
18beda38ac
@ -289,7 +289,7 @@ fn render(&self, area: Rect, surface: &mut Surface, cx: &mut Context) {
|
||||
surface.set_string(inner.x + 1, inner.y + 2 + i as u16, ">", selected);
|
||||
}
|
||||
|
||||
surface.set_stringn(
|
||||
surface.set_string_truncated(
|
||||
inner.x + 3,
|
||||
inner.y + 2 + i as u16,
|
||||
(self.format_fn)(option),
|
||||
@ -299,6 +299,7 @@ fn render(&self, area: Rect, surface: &mut Surface, cx: &mut Context) {
|
||||
} else {
|
||||
style
|
||||
},
|
||||
true,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -266,11 +266,30 @@ pub fn set_stringn<S>(
|
||||
width: usize,
|
||||
style: Style,
|
||||
) -> (u16, u16)
|
||||
where
|
||||
S: AsRef<str>,
|
||||
{
|
||||
self.set_string_truncated(x, y, string, width, style, false)
|
||||
}
|
||||
|
||||
/// Print at most the first `width` characters of a string if enough space is available
|
||||
/// until the end of the line. If `markend` is true appends a `…` at the end of
|
||||
/// truncated lines.
|
||||
pub fn set_string_truncated<S>(
|
||||
&mut self,
|
||||
x: u16,
|
||||
y: u16,
|
||||
string: S,
|
||||
width: usize,
|
||||
style: Style,
|
||||
ellipsis: bool,
|
||||
) -> (u16, u16)
|
||||
where
|
||||
S: AsRef<str>,
|
||||
{
|
||||
let mut index = self.index_of(x, y);
|
||||
let mut x_offset = x as usize;
|
||||
let width = if ellipsis { width - 1 } else { width };
|
||||
let graphemes = UnicodeSegmentation::graphemes(string.as_ref(), true);
|
||||
let max_offset = min(self.area.right() as usize, width.saturating_add(x as usize));
|
||||
for s in graphemes {
|
||||
@ -293,6 +312,9 @@ pub fn set_stringn<S>(
|
||||
index += width;
|
||||
x_offset += width;
|
||||
}
|
||||
if ellipsis && x_offset - (x as usize) < string.as_ref().chars().count() {
|
||||
self.content[index].set_symbol("…");
|
||||
}
|
||||
(x_offset as u16, y)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user