feat: show live battery charge by default
This commit is contained in:
+69
-24
@@ -1173,6 +1173,7 @@ fn chrome_items<'a>(
|
||||
} else {
|
||||
String::new()
|
||||
}),
|
||||
"battery" if editor.label(name).is_empty() => Cow::Borrowed(editor.battery_label()),
|
||||
_ => Cow::Borrowed(editor.label(name)),
|
||||
};
|
||||
// Empty values remain hidden even when a title or decoration is configured.
|
||||
@@ -5463,22 +5464,6 @@ mod tests {
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
fn battery_chrome(editor: &mut Editor) {
|
||||
configure_chrome(editor, |top, _| {
|
||||
top.right = vec!["battery".into()];
|
||||
top.segments.insert(
|
||||
"battery".into(),
|
||||
SegmentConfig {
|
||||
title: String::new(),
|
||||
padding: 1,
|
||||
leading_edge: "░▒▓".into(),
|
||||
trailing_edge: String::new(),
|
||||
first_leading_edge: None,
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn tab_titles_update_templates_without_reinterpreting_file_names() {
|
||||
let directory = Directory::new();
|
||||
@@ -6126,8 +6111,7 @@ mod tests {
|
||||
"edit {}",
|
||||
directory.file("active.txt", "ACTIVE").display()
|
||||
));
|
||||
battery_chrome(&mut editor);
|
||||
editor.set_label("battery".into(), "status".into()).unwrap();
|
||||
editor.set_battery_charge(Some(27));
|
||||
let mut views = BufferViewports::default();
|
||||
for (width, height) in [(12, 9), (7, 9), (1, 9), (0, 9), (12, 1), (12, 0)] {
|
||||
let mut terminal =
|
||||
@@ -6138,7 +6122,7 @@ mod tests {
|
||||
if width > 0 && height >= 3 {
|
||||
let title = pane_screen(&terminal, Rect::new(0, 0, width, 1));
|
||||
assert!(title.trim_start().starts_with('3'), "{title}");
|
||||
assert!(!title.contains("status"), "{title}");
|
||||
assert!(!title.contains("bat 27%"), "{title}");
|
||||
}
|
||||
if width > 0 && height == 1 {
|
||||
let (_, viewport) = views.document.geometry.unwrap();
|
||||
@@ -6159,11 +6143,10 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn singleton_custom_value_sanitizes_unicode_and_redraws_through_clear() {
|
||||
fn default_native_battery_and_custom_override_redraw_through_clear() {
|
||||
let directory = Directory::new();
|
||||
let mut editor =
|
||||
Editor::open(Some(directory.file("source.txt", "DOCUMENT")), vec![]).unwrap();
|
||||
battery_chrome(&mut editor);
|
||||
let mut terminal = Terminal::new(ratatui::backend::TestBackend::new(80, 12)).unwrap();
|
||||
let mut views = BufferViewports::default();
|
||||
terminal
|
||||
@@ -6171,6 +6154,15 @@ mod tests {
|
||||
.unwrap();
|
||||
let original = screen_text(&terminal);
|
||||
assert_eq!(views.document.geometry.unwrap().1.y, 0);
|
||||
assert_eq!(editor.tab_count(), 1);
|
||||
assert!(!screen_text(&terminal).contains("bat "));
|
||||
assert!(editor.set_battery_charge(Some(27)));
|
||||
terminal
|
||||
.draw(|frame| views.draw(frame, &mut editor))
|
||||
.unwrap();
|
||||
let title = pane_screen(&terminal, Rect::new(0, 0, 80, 1));
|
||||
assert!(title.ends_with("░▒▓ bat 27% "), "{title}");
|
||||
assert_eq!(views.document.geometry.unwrap().1.y, 1);
|
||||
|
||||
editor
|
||||
.set_label("battery".into(), "電池 e\u{301}\t90%".into())
|
||||
@@ -6182,6 +6174,7 @@ mod tests {
|
||||
assert!(title.contains("1 source.txt"), "{title}");
|
||||
assert!(title.contains("電") && title.contains("池"), "{title}");
|
||||
assert!(title.contains("e\u{301}�90%"), "{title}");
|
||||
assert!(!title.contains("bat 27%"), "{title}");
|
||||
let start = 80 - (editor.label("battery").width() + 5) as u16;
|
||||
let buffer = terminal.backend().buffer();
|
||||
for (offset, glyph) in [(0, "░"), (1, "▒"), (2, "▓"), (3, " ")] {
|
||||
@@ -6194,12 +6187,21 @@ mod tests {
|
||||
assert!(terminal.get_cursor_position().unwrap().y >= 1);
|
||||
|
||||
editor.set_label("battery".into(), "live".into()).unwrap();
|
||||
assert!(editor.set_battery_charge(Some(28)));
|
||||
terminal
|
||||
.draw(|frame| views.draw(frame, &mut editor))
|
||||
.unwrap();
|
||||
assert!(pane_screen(&terminal, Rect::new(0, 0, 80, 1)).ends_with("░▒▓ live "));
|
||||
assert!(!screen_text(&terminal).contains("90%"));
|
||||
editor.set_label("battery".into(), String::new()).unwrap();
|
||||
terminal
|
||||
.draw(|frame| views.draw(frame, &mut editor))
|
||||
.unwrap();
|
||||
let title = pane_screen(&terminal, Rect::new(0, 0, 80, 1));
|
||||
assert!(title.ends_with("░▒▓ bat 28% "), "{title}");
|
||||
assert!(!title.contains("live"), "{title}");
|
||||
assert_eq!(views.document.geometry.unwrap().1.y, 1);
|
||||
assert!(editor.set_battery_charge(None));
|
||||
terminal
|
||||
.draw(|frame| views.draw(frame, &mut editor))
|
||||
.unwrap();
|
||||
@@ -6207,6 +6209,52 @@ mod tests {
|
||||
assert_eq!(screen_text(&terminal), original);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn native_battery_renders_at_each_configured_anchor_in_either_bar() {
|
||||
let mut editor = Editor::open(None, vec![]).unwrap();
|
||||
editor.set_battery_charge(Some(27));
|
||||
for at_top in [true, false] {
|
||||
for anchor in 0..3 {
|
||||
configure_chrome(&mut editor, |top, bottom| {
|
||||
for line in [&mut *top, &mut *bottom] {
|
||||
line.left.clear();
|
||||
line.center.clear();
|
||||
line.right.clear();
|
||||
}
|
||||
let line = if at_top { top } else { bottom };
|
||||
[&mut line.left, &mut line.center, &mut line.right][anchor]
|
||||
.push("battery".into());
|
||||
});
|
||||
let mut terminal =
|
||||
Terminal::new(ratatui::backend::TestBackend::new(48, 6)).unwrap();
|
||||
terminal
|
||||
.draw(|frame| {
|
||||
draw_bars(frame, &editor, frame.area(), &mut SyntaxCache::new());
|
||||
})
|
||||
.unwrap();
|
||||
let y = if at_top { 0 } else { 4 };
|
||||
let row = pane_screen(&terminal, Rect::new(0, y, 48, 1));
|
||||
assert_eq!(row.trim(), "░▒▓ bat 27%");
|
||||
let x = [0, 18, 36][anchor];
|
||||
assert_eq!(terminal.backend().buffer()[(x, y)].symbol(), "░");
|
||||
}
|
||||
}
|
||||
configure_chrome(&mut editor, |top, bottom| {
|
||||
top.right.clear();
|
||||
bottom.right.clear();
|
||||
});
|
||||
let mut terminal = Terminal::new(ratatui::backend::TestBackend::new(48, 6)).unwrap();
|
||||
terminal
|
||||
.draw(|frame| {
|
||||
let [workspace, _] =
|
||||
draw_bars(frame, &editor, frame.area(), &mut SyntaxCache::new());
|
||||
assert_eq!(workspace.y, 0);
|
||||
assert_eq!(workspace.height, 5);
|
||||
})
|
||||
.unwrap();
|
||||
assert!(!screen_text(&terminal).contains("bat 27%"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn custom_value_keeps_a_gap_and_yields_to_the_full_active_title() {
|
||||
let directory = Directory::new();
|
||||
@@ -6221,7 +6269,6 @@ mod tests {
|
||||
"edit {}",
|
||||
directory.file("active.txt", "ACTIVE").display()
|
||||
));
|
||||
battery_chrome(&mut editor);
|
||||
editor.set_label("battery".into(), "90%".into()).unwrap();
|
||||
for width in [28, 29, 80] {
|
||||
let mut terminal = Terminal::new(ratatui::backend::TestBackend::new(width, 2)).unwrap();
|
||||
@@ -6267,7 +6314,6 @@ mod tests {
|
||||
let directory = Directory::new();
|
||||
let mut editor =
|
||||
Editor::open(Some(directory.file("source.txt", "DOCUMENT")), vec![]).unwrap();
|
||||
battery_chrome(&mut editor);
|
||||
editor.execute("pane.split_vertical");
|
||||
let mut terminal = Terminal::new(ratatui::backend::TestBackend::new(120, 30)).unwrap();
|
||||
let mut views = BufferViewports::default();
|
||||
@@ -6295,7 +6341,6 @@ mod tests {
|
||||
assert_eq!(pane_screen(&terminal, Rect::new(0, 0, 120, 1)), title);
|
||||
|
||||
let mut editor = readonly_diff_editor(deletion_file());
|
||||
battery_chrome(&mut editor);
|
||||
terminal
|
||||
.draw(|frame| views.draw(frame, &mut editor))
|
||||
.unwrap();
|
||||
|
||||
Reference in New Issue
Block a user