summaryrefslogtreecommitdiff
path: root/src/widgets/luaeditor/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/luaeditor/mod.rs')
-rw-r--r--src/widgets/luaeditor/mod.rs143
1 files changed, 74 insertions, 69 deletions
diff --git a/src/widgets/luaeditor/mod.rs b/src/widgets/luaeditor/mod.rs
index c777190..620de4c 100644
--- a/src/widgets/luaeditor/mod.rs
+++ b/src/widgets/luaeditor/mod.rs
@@ -7,8 +7,8 @@ use ratatui::{
use tree_sitter_highlight::HighlightConfiguration;
use crate::{
- config::GlobalConfig,
- state::{editor::EditorState, window::Window, GlobalState},
+ config::{theme::editor::bar::EditorBarTheme, GlobalConfig},
+ state::{editor::{bar::EditorBarState, EditorState}, window::Window, GlobalState},
tuicursor::TuiCursor,
};
use crate::{cursor::CursorMove, lua};
@@ -108,90 +108,95 @@ impl Widget for &mut LuaEditor {
where
Self: Sized,
{
- let state = GlobalState::instance();
- let buffer = &state.editor.buffer;
+ {
+ let state = GlobalState::instance();
+ let buffer = &state.editor.buffer;
- let config = GlobalConfig::instance();
- let theme = &config.theme.editor;
+ let config = GlobalConfig::instance();
+ let theme = &config.theme.editor;
- self.bar.render(area, buf);
- let inner_area = self.bar.area(area);
+ let inner_area = self.bar.area(area);
- let text = buffer.as_string();
- let highlights = treesitter::highlighter_split(text.as_bytes(), &self.highlight_config);
+ let text = buffer.as_string();
+ let highlights = treesitter::highlighter_split(text.as_bytes(), &self.highlight_config);
- let nr_width = (buffer.lines().len().to_string().len() + 1).max(4) as u16;
- let mut text_area = inner_area;
- text_area.x += nr_width;
+ let nr_width = (buffer.lines().len().to_string().len() + 1).max(4) as u16;
+ let mut text_area = inner_area;
+ text_area.x += nr_width;
- let mut span_area = text_area;
- let mut current_line = 0;
+ let mut span_area = text_area;
+ let mut current_line = 0;
- theme
- .background
- .get((), &lua::get())
- .unwrap_or_default()
- .apply(Paragraph::default())
- .render(area, buf);
+ theme
+ .background
+ .get((), &lua::get())
+ .unwrap_or_default()
+ .apply(Paragraph::default())
+ .render(area, buf);
- theme
- .cursor_line
- .get((), &lua::get())
- .unwrap_or_default()
- .apply(Paragraph::default())
- .render(
- Rect::new(
- text_area.x,
- text_area.y + buffer.cursor().y() as u16,
- text_area.width,
- 1,
- ),
- buf,
- );
+ theme
+ .cursor_line
+ .get((), &lua::get())
+ .unwrap_or_default()
+ .apply(Paragraph::default())
+ .render(
+ Rect::new(
+ text_area.x,
+ text_area.y + buffer.cursor().y() as u16,
+ text_area.width,
+ 1,
+ ),
+ buf,
+ );
- for (hl, group) in highlights.iter() {
- if *group == "\n" {
- if current_line >= self.scroll {
- span_area.y += 1;
- span_area.x = text_area.x;
- }
+ for (hl, group) in highlights.iter() {
+ if *group == "\n" {
+ if current_line >= self.scroll {
+ span_area.y += 1;
+ span_area.x = text_area.x;
+ }
- current_line += 1;
- } else if current_line >= self.scroll {
- let group = group.replace('\t', " ");
- let span = group.to_span();
+ current_line += 1;
+ } else if current_line >= self.scroll {
+ let group = group.replace('\t', " ");
+ let span = group.to_span();
- if inner_area.contains(span_area.into()) {
- theme.highlight.highlight(*hl, span).render(span_area, buf);
- }
+ if inner_area.contains(span_area.into()) {
+ theme.highlight.highlight(*hl, span).render(span_area, buf);
+ }
- span_area.x += group.len() as u16;
+ span_area.x += group.len() as u16;
+ }
}
- }
- for i in self.scroll..buffer.lines().len() {
- let mut nr_area = span_area;
- nr_area.x = inner_area.x;
- nr_area.width = nr_width;
- nr_area.y = inner_area.y + (i - self.scroll) as u16;
- nr_area.height = 1;
+ for i in self.scroll..buffer.lines().len() {
+ let mut nr_area = span_area;
+ nr_area.x = inner_area.x;
+ nr_area.width = nr_width;
+ nr_area.y = inner_area.y + (i - self.scroll) as u16;
+ nr_area.height = 1;
- if !inner_area.contains(nr_area.into()) {
- break;
- }
+ if !inner_area.contains(nr_area.into()) {
+ break;
+ }
- if buffer.cursor().y() == i {
- theme
- .active_line_number
- .get((), &lua::get())
- .unwrap_or_default()
- } else {
- theme.line_number.get((), &lua::get()).unwrap_or_default()
+ if buffer.cursor().y() == i {
+ theme
+ .active_line_number
+ .get((), &lua::get())
+ .unwrap_or_default()
+ } else {
+ theme.line_number.get((), &lua::get()).unwrap_or_default()
+ }
+ .apply(((i + 1).to_string() + " ").to_line())
+ .right_aligned()
+ .render(nr_area, buf);
}
- .apply(((i + 1).to_string() + " ").to_line())
- .right_aligned()
- .render(nr_area, buf);
}
+
+ EditorBarState::apply(&mut self.bar, (), &lua::get());
+ EditorBarTheme::apply(&mut self.bar, (), &lua::get());
+ self.bar.render(area, buf);
}
}