summaryrefslogtreecommitdiff
path: root/src/widgets
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2024-12-07 17:17:22 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2024-12-07 17:17:22 +0100
commitc0598823335cfdc6deb5c48fe1ead8ecea18097e (patch)
tree561b47f9f459b9633c4244c3a0cabe12a44859c1 /src/widgets
parent53a9172bddbb83a1c570cc3fed794e7b73c1f1d7 (diff)
add error type to iobuffer
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/logview.rs40
-rw-r--r--src/widgets/sheetview/mod.rs6
2 files changed, 34 insertions, 12 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;
+ }
}
}
}
diff --git a/src/widgets/sheetview/mod.rs b/src/widgets/sheetview/mod.rs
index 0c5b3d5..32bf138 100644
--- a/src/widgets/sheetview/mod.rs
+++ b/src/widgets/sheetview/mod.rs
@@ -7,7 +7,7 @@ use ratatui::{
use crate::{
config::{keymap::ViewKeyMap, theme::view::bar::SheetViewBarTheme, GlobalConfig},
- lua,
+ lua::{self, iobuffer},
state::{
view::{bar::SheetViewBarState, mode::Mode},
GlobalState,
@@ -37,8 +37,8 @@ impl SheetView {
match mode {
Mode::Command => match event.code {
KeyCode::Enter => {
- if let Err(_error) = lua::get().load(self.bar.input().unwrap_or("")).exec() {
- // TODO: push errors to buffer
+ if let Err(error) = lua::get().load(self.bar.input().unwrap_or("")).exec() {
+ iobuffer::iobuffer().write().unwrap().error(error);
}
GlobalState::get().view.cancel_mode();