diff options
Diffstat (limited to 'src/widgets/logview.rs')
| -rw-r--r-- | src/widgets/logview.rs | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/src/widgets/logview.rs b/src/widgets/logview.rs index 4b80d7c..df2ebce 100644 --- a/src/widgets/logview.rs +++ b/src/widgets/logview.rs @@ -1,6 +1,8 @@ -use ratatui::{crossterm::event::KeyEvent, text::ToSpan, widgets::Widget}; +use ratatui::{crossterm::event::KeyEvent, style::{Color, Style}, text::ToSpan, widgets::{Widget, Paragraph}}; -use crate::lua::iobuffer::iobuffer; +use crate::lua::iobuffer::{iobuffer, BufferChunk}; +use crate::config::GlobalConfig; +use crate::lua; use super::statusbar::StatusBar; @@ -24,10 +26,12 @@ impl Widget for &mut LogView { where Self: Sized, { + let theme = GlobalConfig::get().theme.view.clone(); + self.bar.render(area, buf); let inner_area = self.bar.area(area); - let lines = { + let chunks = { let buffer = iobuffer().read().unwrap(); buffer.get() }; @@ -36,15 +40,33 @@ impl Widget for &mut LogView { line_area.height = 1; line_area.y = inner_area.y + inner_area.height - 1; - for line in lines.lines().rev() { - let line = line.to_span(); - line.render(line_area, buf); - - line_area.y -= 1; + theme + .background + .get((), lua::get()) + .unwrap_or_default() + .apply(Paragraph::default()) + .render(inner_area, buf); - if !inner_area.contains(line_area.into()) { + for chunk in chunks.into_iter().rev() { + if line_area.y < inner_area.y { break; } + + let (lines, color) = match chunk { + BufferChunk::StdOut(s) => (s, Color::White), + BufferChunk::StdErr(s) => (s, Color::Red), + }; + + for line in lines.lines().rev() { + if line_area.y < inner_area.y { + break; + } + + let line = line.to_span().style(Style::default().fg(color)); + line.render(line_area, buf); + + line_area.y -= 1; + } } } } |