aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/app.rs32
-rw-r--r--src/bibiman.rs6
-rw-r--r--src/cliargs.rs11
-rw-r--r--src/config.rs26
-rw-r--r--src/main.rs13
-rw-r--r--src/tui.rs6
-rw-r--r--src/tui/popup.rs33
-rw-r--r--src/tui/ui.rs266
8 files changed, 202 insertions, 191 deletions
diff --git a/src/app.rs b/src/app.rs
index b3778af..7869304 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -24,7 +24,6 @@ use crate::tui::commands::InputCmdAction;
use crate::tui::popup::PopupKind;
use crate::tui::{self, Tui};
use crate::{bibiman::Bibiman, tui::commands::CmdAction};
-use core::panic;
use std::ffi::OsStr;
use std::path::PathBuf;
use std::process::{Command, Stdio};
@@ -60,14 +59,14 @@ impl App {
})
}
- pub async fn run(&mut self, args: &mut CLIArgs, cfg: &BibiConfig) -> Result<()> {
+ pub async fn run(&mut self, cfg: &BibiConfig) -> Result<()> {
let mut tui = tui::Tui::new()?;
tui.enter()?;
// Start the main loop.
while self.running {
// Render the user interface.
- tui.draw(self, args)?;
+ tui.draw(self, cfg)?;
// Handle events.
match tui.next().await? {
Event::Tick => self.tick(),
@@ -86,10 +85,10 @@ impl App {
} else {
CmdAction::from(key_event)
};
- self.run_command(command, args, cfg, &mut tui)?
+ self.run_command(command, cfg, &mut tui)?
}
Event::Mouse(mouse_event) => {
- self.run_command(CmdAction::from(mouse_event), args, cfg, &mut tui)?
+ self.run_command(CmdAction::from(mouse_event), cfg, &mut tui)?
}
Event::Resize(_, _) => {}
@@ -111,13 +110,7 @@ impl App {
self.running = false;
}
- pub fn run_command(
- &mut self,
- cmd: CmdAction,
- args: &mut CLIArgs,
- cfg: &BibiConfig,
- tui: &mut Tui,
- ) -> Result<()> {
+ pub fn run_command(&mut self, cmd: CmdAction, cfg: &BibiConfig, tui: &mut Tui) -> Result<()> {
match cmd {
CmdAction::Input(cmd) => match cmd {
InputCmdAction::Nothing => {}
@@ -149,7 +142,7 @@ impl App {
|| doi.starts_with("http://doi.org")
|| doi.starts_with("http://dx.doi.org")
{
- self.bibiman.handle_new_entry_submission(args, doi);
+ self.bibiman.handle_new_entry_submission(doi);
} else {
self.bibiman.popup_area.popup_message(
"No valid DOI pattern: ",
@@ -278,7 +271,7 @@ impl App {
self.bibiman.open_connected_res(cfg)?;
} else if let Some(PopupKind::AppendToFile) = self.bibiman.popup_area.popup_kind
{
- self.bibiman.append_entry_to_file(args)?
+ self.bibiman.append_entry_to_file()?
}
}
}
@@ -310,7 +303,7 @@ impl App {
}
CmdAction::EditFile => {
if let CurrentArea::EntryArea = self.bibiman.current_area {
- self.bibiman.run_editor(cfg, args, tui)?;
+ self.bibiman.run_editor(cfg, tui)?;
}
}
CmdAction::Open => {
@@ -419,15 +412,6 @@ pub fn expand_home(path: &PathBuf) -> PathBuf {
}
}
-fn select_opener() -> String {
- match std::env::consts::OS {
- "linux" => String::from("xdg-open"),
- "macos" => String::from("open"),
- "windows" => String::from("start"),
- _ => panic!("Couldn't detect OS for setting correct opener"),
- }
-}
-
#[cfg(test)]
mod test {
use super::*;
diff --git a/src/bibiman.rs b/src/bibiman.rs
index b68b0fa..b8ef2c6 100644
--- a/src/bibiman.rs
+++ b/src/bibiman.rs
@@ -330,7 +330,7 @@ impl Bibiman {
self.entry_table.entry_table_state.select(Some(idx_count));
}
- pub fn run_editor(&mut self, cfg: &BibiConfig, args: &CLIArgs, tui: &mut Tui) -> Result<()> {
+ pub fn run_editor(&mut self, cfg: &BibiConfig, tui: &mut Tui) -> Result<()> {
// get filecontent and citekey for calculating line number
let citekey: &str = &self.entry_table.entry_table_items
[self.entry_table.entry_table_state.selected().unwrap()]
@@ -418,7 +418,7 @@ impl Bibiman {
///the new entry via `append_to_file()` function. If not, show error popup
///
///The method needs two arguments: the CLIArgs struct and the `str` containing the DOI
- pub fn handle_new_entry_submission(&mut self, args: &CLIArgs, doi_string: &str) {
+ pub fn handle_new_entry_submission(&mut self, doi_string: &str) {
let doi_string = if doi_string.starts_with("10.") {
"https://doi.org/".to_string() + doi_string
} else {
@@ -466,7 +466,7 @@ impl Bibiman {
self.popup_area.popup_selection(items);
}
- pub fn append_entry_to_file(&mut self, args: &mut CLIArgs) -> Result<()> {
+ pub fn append_entry_to_file(&mut self) -> Result<()> {
// Index of selected popup field
let popup_idx = self.popup_area.popup_state.selected().unwrap();
diff --git a/src/cliargs.rs b/src/cliargs.rs
index bb3c8d1..3c302f4 100644
--- a/src/cliargs.rs
+++ b/src/cliargs.rs
@@ -24,7 +24,6 @@ use std::path::PathBuf;
use walkdir::WalkDir;
use crate::app;
-use crate::tui::colors::AppColors;
// struct for CLIArgs
#[derive(Debug, Default, Clone)]
@@ -32,11 +31,8 @@ pub struct CLIArgs {
pub helparg: bool,
pub versionarg: bool,
pub pos_args: Vec<PathBuf>,
- // pub files: Vec<PathBuf>,
pub cfg_path: PathBuf,
- // INFO: AppColors struct later should be moved to config/app struct
- // when config file is implemented
- pub colors: AppColors,
+ pub light_theme: bool,
}
impl CLIArgs {
@@ -56,10 +52,7 @@ impl CLIArgs {
Short('h') | Long("help") => args.helparg = true,
Short('v') | Long("version") => args.versionarg = true,
Short('c') | Long("config-file") => args.cfg_path = parser.value()?.parse()?,
- Long("light-terminal") => {
- args.colors.light_colors();
- args.colors.toggle_color_scheme()
- }
+ Long("light-terminal") => args.light_theme = true,
// Value(pos_arg) => parse_files(&mut args, pos_arg),
Value(pos_arg) => args.pos_args.push(pos_arg.into()),
_ => return Err(arg.unexpected()),
diff --git a/src/config.rs b/src/config.rs
index 22873dd..faba5d8 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -72,7 +72,7 @@ impl Default for BibiConfig {
info_color: Some(Color::Indexed(99)),
confirm_color: Some(Color::Indexed(47)),
warn_color: Some(Color::Indexed(124)),
- bar_bg_color: Some(Color::Indexed(234)),
+ bar_bg_color: Some(Color::Indexed(235)),
popup_bg_color: Some(Color::Indexed(234)),
selected_row_bg_color: Some(Color::Indexed(237)),
}),
@@ -138,17 +138,6 @@ impl BibiConfig {
Ok(())
}
- pub fn new(args: &CLIArgs) -> Result<Self> {
- // let mut cfg = config::Config::builder();
- // cfg = cfg.add_source(
- // config::File::from(args.cfg_path.clone())
- // .format(FileFormat::Toml)
- // .required(false),
- // );
- // cfg.build()?.try_deserialize()
- Ok(Self::parse_cfg_file(args)?)
- }
-
fn parse_cfg_file(args: &CLIArgs) -> Result<Self, ConfigError> {
let mut cfg = config::Config::builder();
cfg = cfg.add_source(
@@ -158,6 +147,19 @@ impl BibiConfig {
);
cfg.build()?.try_deserialize()
}
+
+ /// Activates the default color scheme for light background terminals
+ pub fn light_colors(&mut self) {
+ self.colors.as_mut().unwrap().main_text_color = Some(Color::Indexed(235));
+ self.colors.as_mut().unwrap().highlight_text_color = Some(Color::Indexed(232));
+ self.colors.as_mut().unwrap().entry_color = Some(Color::Indexed(23));
+ self.colors.as_mut().unwrap().keyword_color = Some(Color::Indexed(58));
+ self.colors.as_mut().unwrap().info_color = Some(Color::Indexed(57));
+ self.colors.as_mut().unwrap().bar_bg_color = Some(Color::Indexed(144));
+ self.colors.as_mut().unwrap().popup_bg_color = Some(Color::Indexed(187));
+ self.colors.as_mut().unwrap().confirm_color = Some(Color::Indexed(22));
+ self.colors.as_mut().unwrap().selected_row_bg_color = Some(Color::Indexed(107));
+ }
}
fn select_opener() -> String {
diff --git a/src/main.rs b/src/main.rs
index 8ec3b77..3325f80 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -45,12 +45,13 @@ async fn main() -> Result<()> {
std::process::exit(0);
}
- // let mut cfg = if parsed_args.cfg_path.is_file() {
- // BibiConfig::new(&parsed_args)?
- // } else {
- // BibiConfig::default()
- // };
+ // Build default config
let mut cfg = BibiConfig::default();
+
+ if parsed_args.light_theme {
+ cfg.light_colors();
+ }
+ // Merge values from config file if present
cfg.parse_config(&parsed_args)?;
init_error_hooks()?;
@@ -58,6 +59,6 @@ async fn main() -> Result<()> {
// Create an application.
let mut app = App::new(&mut parsed_args, &mut cfg)?;
- app.run(&mut parsed_args, &cfg).await?;
+ app.run(&cfg).await?;
Ok(())
}
diff --git a/src/tui.rs b/src/tui.rs
index b39b5c4..1e3061f 100644
--- a/src/tui.rs
+++ b/src/tui.rs
@@ -20,7 +20,7 @@ pub mod commands;
pub mod popup;
pub mod ui;
-use crate::{cliargs::CLIArgs, App};
+use crate::{config::BibiConfig, App};
use crossterm::{
cursor,
event::{
@@ -195,11 +195,11 @@ impl Tui {
//
// [`Draw`]: ratatui::Terminal::draw
// [`rendering`]: crate::ui::render
- pub fn draw(&mut self, app: &mut App, args: &CLIArgs) -> Result<()> {
+ pub fn draw(&mut self, app: &mut App, cfg: &BibiConfig) -> Result<()> {
// self.terminal.draw(|frame| ui::render(app, frame))?;
self.terminal
// .draw(|frame| frame.render_widget(app, frame.area()))?;
- .draw(|frame| ui::render_ui(app, args, frame))?;
+ .draw(|frame| ui::render_ui(app, cfg, frame))?;
Ok(())
}
diff --git a/src/tui/popup.rs b/src/tui/popup.rs
index 4ef9fc3..6a2e8ff 100644
--- a/src/tui/popup.rs
+++ b/src/tui/popup.rs
@@ -16,12 +16,12 @@
/////
use ratatui::{
- style::{Color, Stylize},
+ style::Stylize,
text::{Line, Span, Text},
widgets::ListState,
};
-use crate::cliargs::CLIArgs;
+use crate::config::BibiConfig;
#[derive(Debug)]
pub enum PopupKind {
@@ -47,7 +47,7 @@ pub struct PopupArea {
}
impl PopupArea {
- pub fn popup_help<'a>(args: &CLIArgs) -> Text<'a> {
+ pub fn popup_help<'a>(cfg: &BibiConfig) -> Text<'a> {
let help = [
("General", "first"),
("TAB: ", "Toggle areas (Entries, Keywords)"),
@@ -89,22 +89,31 @@ impl PopupArea {
for (keys, help) in help {
if help == "first" {
helptext.push(Line::from(
- Span::raw(keys)
- .bold()
- .fg(Color::Indexed(args.colors.main_text_color)),
+ Span::raw(keys).bold().fg(cfg
+ .colors
+ .as_ref()
+ .unwrap()
+ .main_text_color
+ .unwrap()),
))
} else if help == "sub" {
helptext.push(Line::from(""));
helptext.push(Line::from(
- Span::raw(keys)
- .bold()
- .fg(Color::Indexed(args.colors.main_text_color)),
+ Span::raw(keys).bold().fg(cfg
+ .colors
+ .as_ref()
+ .unwrap()
+ .main_text_color
+ .unwrap()),
))
} else {
helptext.push(Line::from(vec![
- Span::raw(keys)
- .bold()
- .fg(Color::Indexed(args.colors.keyword_color)),
+ Span::raw(keys).bold().fg(cfg
+ .colors
+ .as_ref()
+ .unwrap()
+ .main_text_color
+ .unwrap()),
Span::raw(help),
]))
}
diff --git a/src/tui/ui.rs b/src/tui/ui.rs
index 52d2d9a..5fbe283 100644
--- a/src/tui/ui.rs
+++ b/src/tui/ui.rs
@@ -17,11 +17,11 @@
use std::path::PathBuf;
-use super::colors::AppColorScheme;
use super::popup::PopupArea;
use crate::bibiman::entries::EntryTableColumn;
use crate::bibiman::{CurrentArea, FormerArea};
use crate::cliargs::CLIArgs;
+use crate::config::BibiConfig;
use crate::tui::popup::PopupKind;
use crate::App;
use ratatui::layout::{Direction, Position};
@@ -52,8 +52,8 @@ pub fn color_list(
highlight: u8,
max_diff: i32,
) -> Color {
- match args.colors.color_scheme {
- AppColorScheme::Dark => {
+ match args.light_theme {
+ false => {
if list_item == sel_item {
Color::Indexed(highlight)
} else if (list_item - sel_item) > max_diff
@@ -68,7 +68,7 @@ pub fn color_list(
Color::Indexed(highlight - (list_item - sel_item) as u8)
}
}
- AppColorScheme::Light => {
+ true => {
if list_item == sel_item {
Color::Indexed(highlight)
} else if (list_item - sel_item) > max_diff
@@ -103,7 +103,7 @@ fn count_files(files: &[PathBuf]) -> u16 {
count
}
-pub fn render_ui(app: &mut App, args: &CLIArgs, frame: &mut Frame) {
+pub fn render_ui(app: &mut App, cfg: &BibiConfig, frame: &mut Frame) {
let [header_area, main_area, footer_area] = Layout::new(
Direction::Vertical,
[
@@ -128,20 +128,20 @@ pub fn render_ui(app: &mut App, args: &CLIArgs, frame: &mut Frame) {
let [tag_area, info_area] =
Layout::horizontal([Constraint::Max(25), Constraint::Min(35)]).areas(item_area);
- render_header(args, frame, header_area);
+ render_header(cfg, frame, header_area);
if let CurrentArea::SearchArea = app.bibiman.current_area {
- render_footer(app, args, frame, footer_area);
+ render_footer(app, cfg, frame, footer_area);
}
- render_entrytable(app, args, frame, entry_area);
- render_selected_item(app, args, frame, info_area);
- render_taglist(app, args, frame, tag_area);
- render_file_info(app, args, frame, entry_info_area);
+ render_entrytable(app, cfg, frame, entry_area);
+ render_selected_item(app, cfg, frame, info_area);
+ render_taglist(app, cfg, frame, tag_area);
+ render_file_info(app, cfg, frame, entry_info_area);
if app.bibiman.popup_area.is_popup {
- render_popup(app, args, frame);
+ render_popup(app, cfg, frame);
}
}
-pub fn render_popup(app: &mut App, args: &CLIArgs, frame: &mut Frame) {
+pub fn render_popup(app: &mut App, cfg: &BibiConfig, frame: &mut Frame) {
match app.bibiman.popup_area.popup_kind {
Some(PopupKind::Help) => {
let block = Block::bordered()
@@ -150,13 +150,13 @@ pub fn render_popup(app: &mut App, args: &CLIArgs, frame: &mut Frame) {
.title_alignment(Alignment::Center)
.style(
Style::new()
- .fg(Color::Indexed(args.colors.main_text_color))
- .bg(Color::Indexed(args.colors.popup_bg_color)),
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap())
+ .bg(cfg.colors.as_ref().unwrap().popup_bg_color.unwrap()),
)
.border_set(symbols::border::THICK)
- .border_style(Style::new().fg(Color::Indexed(args.colors.entry_color)));
+ .border_style(Style::new().fg(cfg.colors.as_ref().unwrap().entry_color.unwrap()));
- let text: Text = PopupArea::popup_help(args);
+ let text: Text = PopupArea::popup_help(cfg);
// Calculate max scroll position depending on hight of terminal window
// Needed length is number of text lines plus two for borders at bottom and top
@@ -191,23 +191,23 @@ pub fn render_popup(app: &mut App, args: &CLIArgs, frame: &mut Frame) {
.title_alignment(Alignment::Center)
.style(
Style::new()
- .fg(Color::Indexed(args.colors.main_text_color))
- .bg(Color::Indexed(args.colors.popup_bg_color)),
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap())
+ .bg(cfg.colors.as_ref().unwrap().popup_bg_color.unwrap()),
)
.border_set(symbols::border::THICK)
- .border_style(Style::new().fg(Color::Indexed(args.colors.entry_color)));
+ .border_style(Style::new().fg(cfg.colors.as_ref().unwrap().entry_color.unwrap()));
// Prepare the input fields
let content = vec![Line::from(vec![
Span::styled(
"DOI: ",
- Style::new().fg(Color::Indexed(args.colors.entry_color)),
+ Style::new().fg(cfg.colors.as_ref().unwrap().entry_color.unwrap()),
),
Span::raw(app.input.value().to_string().clone()),
])];
let paragraph = Paragraph::new(content)
.block(block.clone())
- .style(Style::new().fg(Color::Indexed(args.colors.main_text_color)))
+ .style(Style::new().fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap()))
.wrap(Wrap { trim: false });
let doi_lines = paragraph.line_count(area.width / 2);
@@ -228,18 +228,18 @@ pub fn render_popup(app: &mut App, args: &CLIArgs, frame: &mut Frame) {
.title_top(
" Message "
.bold()
- .fg(Color::Indexed(args.colors.confirm_color)),
+ .fg(cfg.colors.as_ref().unwrap().confirm_color.unwrap()),
)
- .border_style(Style::new().fg(Color::Indexed(args.colors.confirm_color)))
+ .border_style(Style::new().fg(cfg.colors.as_ref().unwrap().confirm_color.unwrap()))
.style(
Style::new()
- .fg(Color::Indexed(args.colors.main_text_color))
- .bg(Color::Indexed(args.colors.popup_bg_color)),
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap())
+ .bg(cfg.colors.as_ref().unwrap().popup_bg_color.unwrap()),
);
let content = Paragraph::new(app.bibiman.popup_area.popup_message.clone())
.block(block)
- .style(Style::new().fg(Color::Indexed(args.colors.confirm_color)));
+ .style(Style::new().fg(cfg.colors.as_ref().unwrap().confirm_color.unwrap()));
// Calculate popup size. Width is number of string chars plus 2 for border
let popup_area = popup_area(
@@ -259,18 +259,18 @@ pub fn render_popup(app: &mut App, args: &CLIArgs, frame: &mut Frame) {
.title_top(
" Warning "
.bold()
- .fg(Color::Indexed(args.colors.warn_color)),
+ .fg(cfg.colors.as_ref().unwrap().warn_color.unwrap()),
)
.border_style(Style::new().fg(Color::Red))
.style(
Style::new()
- .fg(Color::Indexed(args.colors.main_text_color))
- .bg(Color::Indexed(args.colors.popup_bg_color)),
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap())
+ .bg(cfg.colors.as_ref().unwrap().popup_bg_color.unwrap()),
);
let content = Paragraph::new(app.bibiman.popup_area.popup_message.clone())
.block(block)
- .style(Style::new().fg(Color::Indexed(args.colors.warn_color)));
+ .style(Style::new().fg(cfg.colors.as_ref().unwrap().warn_color.unwrap()));
// Calculate popup size. Width is number of string chars plus 2 for border
let popup_area = popup_area(
@@ -306,15 +306,15 @@ pub fn render_popup(app: &mut App, args: &CLIArgs, frame: &mut Frame) {
.title_alignment(Alignment::Center)
.style(
Style::new()
- .fg(Color::Indexed(args.colors.main_text_color))
- .bg(Color::Indexed(args.colors.popup_bg_color)),
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap())
+ .bg(cfg.colors.as_ref().unwrap().popup_bg_color.unwrap()),
)
.border_set(symbols::border::THICK)
- .border_style(Style::new().fg(Color::Indexed(args.colors.keyword_color)));
+ .border_style(Style::new().fg(cfg.colors.as_ref().unwrap().keyword_color.unwrap()));
let list = List::new(list_items).block(block).highlight_style(
Style::new()
- // .fg(Color::Indexed(args.colors.entry_color))
+ // .fg(cfg.colors.as_ref().unwrap().entry_color.unwrap())
.add_modifier(Modifier::BOLD)
.add_modifier(Modifier::REVERSED),
);
@@ -330,15 +330,15 @@ pub fn render_popup(app: &mut App, args: &CLIArgs, frame: &mut Frame) {
}
}
-pub fn render_header(args: &CLIArgs, frame: &mut Frame, rect: Rect) {
+pub fn render_header(cfg: &BibiConfig, frame: &mut Frame, rect: Rect) {
let main_header = Paragraph::new("BIBIMAN – BibLaTeX manager TUI")
.bold()
- .fg(Color::Indexed(args.colors.entry_color))
+ .fg(cfg.colors.as_ref().unwrap().entry_color.unwrap())
.centered();
frame.render_widget(main_header, rect)
}
-pub fn render_footer(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect: Rect) {
+pub fn render_footer(app: &mut App, cfg: &BibiConfig, frame: &mut Frame, rect: Rect) {
let search_title = {
match app.bibiman.former_area {
Some(FormerArea::EntryArea) => "Search Entries: ".to_string(),
@@ -349,29 +349,36 @@ pub fn render_footer(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect: Rec
let title_lenght: u16 = search_title.chars().count() as u16;
- let block = Block::new()
- .padding(Padding::horizontal(1))
- .bg(Color::Indexed(args.colors.bar_bg_color));
+ let block = Block::new().padding(Padding::horizontal(1)).bg(cfg
+ .colors
+ .as_ref()
+ .unwrap()
+ .bar_bg_color
+ .unwrap());
let search_string = Paragraph::new(Line::from(vec![
Span::styled(
search_title,
if let Some(FormerArea::EntryArea) = app.bibiman.former_area {
Style::new()
- .fg(Color::Indexed(args.colors.entry_color))
+ .fg(cfg.colors.as_ref().unwrap().entry_color.unwrap())
.add_modifier(Modifier::BOLD)
} else if let Some(FormerArea::TagArea) = app.bibiman.former_area {
Style::new()
- .fg(Color::Indexed(args.colors.keyword_color))
+ .fg(cfg.colors.as_ref().unwrap().keyword_color.unwrap())
.add_modifier(Modifier::BOLD)
} else {
Style::new()
- .fg(Color::Indexed(args.colors.highlight_text_color))
+ .fg(cfg.colors.as_ref().unwrap().highlight_text_color.unwrap())
.add_modifier(Modifier::BOLD)
},
),
- Span::raw(app.bibiman.search_struct.search_string.clone())
- .fg(Color::Indexed(args.colors.highlight_text_color)),
+ Span::raw(app.bibiman.search_struct.search_string.clone()).fg(cfg
+ .colors
+ .as_ref()
+ .unwrap()
+ .highlight_text_color
+ .unwrap()),
]))
.block(block);
@@ -383,7 +390,7 @@ pub fn render_footer(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect: Rec
// 1. Basename of the currently loaded file
// 2. Keyword by which the entries are filtered at the moment
// 3. Currently selected entry and total count of entries
-pub fn render_file_info(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect: Rect) {
+pub fn render_file_info(app: &mut App, cfg: &BibiConfig, frame: &mut Frame, rect: Rect) {
let block = Block::new() // can also be Block::new
// Leave Top empty to simulate one large box with borders of entry list
.borders(Borders::LEFT | Borders::RIGHT | Borders::BOTTOM)
@@ -393,10 +400,10 @@ pub fn render_file_info(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect:
symbols::border::PLAIN
})
.border_style(if let CurrentArea::EntryArea = app.bibiman.current_area {
- Style::new().fg(Color::Indexed(args.colors.highlight_text_color))
+ Style::new().fg(cfg.colors.as_ref().unwrap().highlight_text_color.unwrap())
} else {
Style::new()
- .fg(Color::Indexed(args.colors.entry_color))
+ .fg(cfg.colors.as_ref().unwrap().entry_color.unwrap())
.add_modifier(Modifier::BOLD)
});
@@ -415,7 +422,7 @@ pub fn render_file_info(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect:
{
Line::from(vec![
Span::raw("File: ")
- .fg(Color::Indexed(args.colors.main_text_color))
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap())
.bold(),
Span::raw(
app.bibiman.main_bibfiles[0]
@@ -423,28 +430,33 @@ pub fn render_file_info(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect:
.unwrap()
.to_string_lossy(),
)
- .fg(Color::Indexed(args.colors.main_text_color))
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap())
.bold(),
])
- .bg(Color::Indexed(args.colors.bar_bg_color))
+ .bg(cfg.colors.as_ref().unwrap().bar_bg_color.unwrap())
} else {
Line::from(vec![
Span::raw("Multiple files (")
- .fg(Color::Indexed(args.colors.main_text_color))
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap())
.bold(),
Span::raw(count_files(&app.bibiman.main_bibfiles).to_string())
- .fg(Color::Indexed(args.colors.main_text_color))
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap())
.bold(),
Span::raw(")")
- .fg(Color::Indexed(args.colors.main_text_color))
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap())
.bold(),
])
- .bg(Color::Indexed(args.colors.bar_bg_color))
+ .bg(cfg.colors.as_ref().unwrap().bar_bg_color.unwrap())
};
let cur_keywords = Line::from(if !app.bibiman.tag_list.selected_keywords.is_empty() {
vec![
- Span::raw("Selected keywords: ").fg(Color::Indexed(args.colors.main_text_color)),
+ Span::raw("Selected keywords: ").fg(cfg
+ .colors
+ .as_ref()
+ .unwrap()
+ .main_text_color
+ .unwrap()),
// Show all keywords in correct order if list is filtered
// successively by multiple keywords
Span::raw(app.bibiman.tag_list.selected_keywords.join(" → "))
@@ -454,7 +466,7 @@ pub fn render_file_info(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect:
} else {
vec![Span::raw(" ")]
})
- .bg(Color::Indexed(args.colors.bar_bg_color));
+ .bg(cfg.colors.as_ref().unwrap().bar_bg_color.unwrap());
// .render(keyword_area, buf);
let item_count = Line::from(
@@ -490,38 +502,42 @@ pub fn render_file_info(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect:
.to_string()
},
)
- .fg(Color::Indexed(args.colors.main_text_color))
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap())
.bold(),
- Span::raw("/").fg(Color::Indexed(args.colors.main_text_color)),
- Span::raw(app.bibiman.entry_table.entry_table_items.len().to_string())
- .fg(Color::Indexed(args.colors.main_text_color)),
+ Span::raw("/").fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap()),
+ Span::raw(app.bibiman.entry_table.entry_table_items.len().to_string()).fg(cfg
+ .colors
+ .as_ref()
+ .unwrap()
+ .main_text_color
+ .unwrap()),
]
} else {
vec![Span::raw("No entries")]
},
)
.right_aligned()
- .bg(Color::Indexed(args.colors.bar_bg_color));
+ .bg(cfg.colors.as_ref().unwrap().bar_bg_color.unwrap());
frame.render_widget(file_info, file_area);
frame.render_widget(cur_keywords, keyword_area);
frame.render_widget(item_count, count_area);
}
-pub fn render_entrytable(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect: Rect) {
+pub fn render_entrytable(app: &mut App, cfg: &BibiConfig, frame: &mut Frame, rect: Rect) {
let entry_box_selected_border_style: Style =
- Style::new().fg(Color::Indexed(args.colors.highlight_text_color));
+ Style::new().fg(cfg.colors.as_ref().unwrap().highlight_text_color.unwrap());
let entry_box_selected_title_style: Style = Style::new()
- .fg(Color::Indexed(args.colors.entry_color))
+ .fg(cfg.colors.as_ref().unwrap().entry_color.unwrap())
.add_modifier(Modifier::BOLD);
let entry_box_unselected_border_style: Style =
- Style::new().fg(Color::Indexed(args.colors.main_text_color));
+ Style::new().fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap());
let entry_box_unselected_title_style: Style = Style::new()
- .fg(Color::Indexed(args.colors.entry_color))
+ .fg(cfg.colors.as_ref().unwrap().entry_color.unwrap())
.add_modifier(Modifier::BOLD);
let selected_table_col_style: Style = Style::new().add_modifier(Modifier::BOLD);
let selectec_table_cell_style: Style = Style::new().add_modifier(Modifier::REVERSED);
let entry_selected_row_style: Style = Style::new()
- .fg(Color::Indexed(args.colors.entry_color))
+ .fg(cfg.colors.as_ref().unwrap().entry_color.unwrap())
.add_modifier(Modifier::BOLD)
.add_modifier(Modifier::REVERSED);
@@ -551,8 +567,8 @@ pub fn render_entrytable(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect:
let header_style = Style::default()
.bold()
- .fg(Color::Indexed(args.colors.main_text_color))
- .bg(Color::Indexed(args.colors.bar_bg_color));
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap())
+ .bg(cfg.colors.as_ref().unwrap().bar_bg_color.unwrap());
let header = Row::new(vec![
Cell::from(
@@ -576,9 +592,9 @@ pub fn render_entrytable(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect:
if let EntryTableColumn::Authors =
app.bibiman.entry_table.entry_table_selected_column
{
- Color::Indexed(args.colors.selected_row_bg_color)
+ cfg.colors.as_ref().unwrap().selected_row_bg_color.unwrap()
} else {
- Color::Indexed(args.colors.bar_bg_color)
+ cfg.colors.as_ref().unwrap().bar_bg_color.unwrap()
},
),
),
@@ -602,9 +618,9 @@ pub fn render_entrytable(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect:
.bg(
if let EntryTableColumn::Title = app.bibiman.entry_table.entry_table_selected_column
{
- Color::Indexed(args.colors.selected_row_bg_color)
+ cfg.colors.as_ref().unwrap().selected_row_bg_color.unwrap()
} else {
- Color::Indexed(args.colors.bar_bg_color)
+ cfg.colors.as_ref().unwrap().bar_bg_color.unwrap()
},
),
),
@@ -628,9 +644,9 @@ pub fn render_entrytable(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect:
.bg(
if let EntryTableColumn::Year = app.bibiman.entry_table.entry_table_selected_column
{
- Color::Indexed(args.colors.selected_row_bg_color)
+ cfg.colors.as_ref().unwrap().selected_row_bg_color.unwrap()
} else {
- Color::Indexed(args.colors.bar_bg_color)
+ cfg.colors.as_ref().unwrap().bar_bg_color.unwrap()
},
),
),
@@ -655,9 +671,9 @@ pub fn render_entrytable(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect:
if let EntryTableColumn::Pubtype =
app.bibiman.entry_table.entry_table_selected_column
{
- Color::Indexed(args.colors.selected_row_bg_color)
+ cfg.colors.as_ref().unwrap().selected_row_bg_color.unwrap()
} else {
- Color::Indexed(args.colors.bar_bg_color)
+ cfg.colors.as_ref().unwrap().bar_bg_color.unwrap()
},
),
),
@@ -672,23 +688,24 @@ pub fn render_entrytable(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect:
.entry_table_items
.iter_mut()
.enumerate()
- .map(|(i, data)| {
+ .map(|(_i, data)| {
let item = data.ref_vec();
item.into_iter()
.map(|content| Cell::from(Text::from(content.to_string())))
.collect::<Row>()
.style(
- Style::new().fg(color_list(
- args,
- i as i32,
- app.bibiman
- .entry_table
- .entry_table_state
- .selected()
- .unwrap_or(0) as i32,
- args.colors.highlight_text_color,
- 20,
- )),
+ // Style::new().fg(color_list(
+ // args,
+ // i as i32,
+ // app.bibiman
+ // .entry_table
+ // .entry_table_state
+ // .selected()
+ // .unwrap_or(0) as i32,
+ // args.colors.highlight_text_color,
+ // 20,
+ // )),
+ Style::new().fg(cfg.colors.as_ref().unwrap().highlight_text_color.unwrap()),
)
.height(1)
});
@@ -741,11 +758,11 @@ pub fn render_entrytable(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect:
}
}
-pub fn render_selected_item(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect: Rect) {
+pub fn render_selected_item(app: &mut App, cfg: &BibiConfig, frame: &mut Frame, rect: Rect) {
// We get the info depending on the item's state.
let style_value = Style::new()
.bold()
- .fg(Color::Indexed(args.colors.main_text_color));
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap());
let lines = {
if app
.bibiman
@@ -767,7 +784,7 @@ pub fn render_selected_item(app: &mut App, args: &CLIArgs, frame: &mut Frame, re
// Span::styled(cur_entry.authors.clone(), Style::new().green()),
Span::styled(
cur_entry.authors(),
- Style::new().fg(Color::Indexed(args.colors.info_color)),
+ Style::new().fg(cfg.colors.as_ref().unwrap().info_color.unwrap()),
),
]));
if cur_entry.subtitle.is_some() {
@@ -776,19 +793,19 @@ pub fn render_selected_item(app: &mut App, args: &CLIArgs, frame: &mut Frame, re
Span::styled(
cur_entry.title(),
Style::new()
- .fg(Color::Indexed(args.colors.entry_color))
+ .fg(cfg.colors.as_ref().unwrap().entry_color.unwrap())
.add_modifier(Modifier::ITALIC),
),
Span::styled(
": ",
Style::new()
- .fg(Color::Indexed(args.colors.entry_color))
+ .fg(cfg.colors.as_ref().unwrap().entry_color.unwrap())
.add_modifier(Modifier::ITALIC),
),
Span::styled(
cur_entry.subtitle(),
Style::new()
- .fg(Color::Indexed(args.colors.entry_color))
+ .fg(cfg.colors.as_ref().unwrap().entry_color.unwrap())
.add_modifier(Modifier::ITALIC),
),
]));
@@ -798,7 +815,7 @@ pub fn render_selected_item(app: &mut App, args: &CLIArgs, frame: &mut Frame, re
Span::styled(
cur_entry.title(),
Style::new()
- .fg(Color::Indexed(args.colors.entry_color))
+ .fg(cfg.colors.as_ref().unwrap().entry_color.unwrap())
.add_modifier(Modifier::ITALIC),
),
]));
@@ -807,7 +824,7 @@ pub fn render_selected_item(app: &mut App, args: &CLIArgs, frame: &mut Frame, re
Span::styled("Year: ", style_value),
Span::styled(
cur_entry.year(),
- Style::new().fg(Color::Indexed(args.colors.keyword_color)),
+ Style::new().fg(cfg.colors.as_ref().unwrap().keyword_color.unwrap()),
),
]));
// Render keywords in info box in Markdown code style
@@ -821,11 +838,13 @@ pub fn render_selected_item(app: &mut App, args: &CLIArgs, frame: &mut Frame, re
let mut content = vec![Span::styled("Keywords: ", style_value)];
for k in kw {
// Add half block highlighted in bg color to enlarge block
- content.push(Span::raw("▐").fg(Color::Indexed(args.colors.bar_bg_color)));
+ content.push(
+ Span::raw("▐").fg(cfg.colors.as_ref().unwrap().bar_bg_color.unwrap()),
+ );
content.push(Span::styled(
k,
Style::default()
- .bg(Color::Indexed(args.colors.bar_bg_color))
+ .bg(cfg.colors.as_ref().unwrap().bar_bg_color.unwrap())
.fg(
// Highlight selected keyword green
if app
@@ -837,11 +856,13 @@ pub fn render_selected_item(app: &mut App, args: &CLIArgs, frame: &mut Frame, re
{
Color::Green
} else {
- Color::Indexed(args.colors.main_text_color)
+ cfg.colors.as_ref().unwrap().main_text_color.unwrap()
},
),
));
- content.push(Span::raw("▌").fg(Color::Indexed(args.colors.bar_bg_color)));
+ content.push(
+ Span::raw("▌").fg(cfg.colors.as_ref().unwrap().bar_bg_color.unwrap()),
+ );
}
lines.push(Line::from(content))
}
@@ -854,7 +875,7 @@ pub fn render_selected_item(app: &mut App, args: &CLIArgs, frame: &mut Frame, re
Span::styled(
cur_entry.doi_url(),
Style::new()
- .fg(Color::Indexed(args.colors.main_text_color))
+ .fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap())
.underlined(),
),
]));
@@ -864,14 +885,14 @@ pub fn render_selected_item(app: &mut App, args: &CLIArgs, frame: &mut Frame, re
Span::styled("File: ", style_value),
Span::styled(
cur_entry.filepath().to_string_lossy(),
- Style::new().fg(Color::Indexed(args.colors.main_text_color)),
+ Style::new().fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap()),
),
]));
}
lines.push(Line::from(""));
lines.push(Line::from(vec![Span::styled(
cur_entry.abstract_text.clone(),
- Style::new().fg(Color::Indexed(args.colors.main_text_color)),
+ Style::new().fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap()),
)]));
lines
} else {
@@ -888,7 +909,7 @@ pub fn render_selected_item(app: &mut App, args: &CLIArgs, frame: &mut Frame, re
let block = Block::bordered()
.title(Line::raw(" Entry Information ").centered().bold())
.border_set(symbols::border::PLAIN)
- .border_style(Style::new().fg(Color::Indexed(args.colors.main_text_color)))
+ .border_style(Style::new().fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap()))
.padding(Padding::horizontal(1));
// INFO: '.line_count' method only possible with unstable-rendered-line-info feature -> API might change: https://github.com/ratatui/ratatui/issues/293#ref-pullrequest-2027056434
@@ -941,19 +962,19 @@ pub fn render_selected_item(app: &mut App, args: &CLIArgs, frame: &mut Frame, re
frame.render_widget(item_info, rect);
}
-pub fn render_taglist(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect: Rect) {
+pub fn render_taglist(app: &mut App, cfg: &BibiConfig, frame: &mut Frame, rect: Rect) {
let keyword_box_selected_border_style: Style =
- Style::new().fg(Color::Indexed(args.colors.highlight_text_color));
+ Style::new().fg(cfg.colors.as_ref().unwrap().highlight_text_color.unwrap());
let keyword_box_selected_title_style: Style = Style::new()
- .fg(Color::Indexed(args.colors.keyword_color))
+ .fg(cfg.colors.as_ref().unwrap().keyword_color.unwrap())
.add_modifier(Modifier::BOLD);
let keyword_box_unselected_border_style: Style =
- Style::new().fg(Color::Indexed(args.colors.main_text_color));
+ Style::new().fg(cfg.colors.as_ref().unwrap().main_text_color.unwrap());
let keyword_box_unselected_title_style: Style = Style::new()
- .fg(Color::Indexed(args.colors.keyword_color))
+ .fg(cfg.colors.as_ref().unwrap().keyword_color.unwrap())
.add_modifier(Modifier::BOLD);
let keyword_selected_row_style: Style = Style::new()
- .fg(Color::Indexed(args.colors.keyword_color))
+ .fg(cfg.colors.as_ref().unwrap().keyword_color.unwrap())
.add_modifier(Modifier::BOLD)
.add_modifier(Modifier::REVERSED);
@@ -987,18 +1008,19 @@ pub fn render_taglist(app: &mut App, args: &CLIArgs, frame: &mut Frame, rect: Re
.tag_list_items
.iter()
.enumerate()
- .map(|(i, keyword)| {
+ .map(|(_i, keyword)| {
ListItem::from(keyword.to_owned()).style(Style::new().fg(
if app.bibiman.tag_list.tag_list_state.selected().is_some() {
- color_list(
- args,
- i as i32,
- app.bibiman.tag_list.tag_list_state.selected().unwrap() as i32,
- args.colors.highlight_text_color,
- 20,
- )
+ // color_list(
+ // args,
+ // i as i32,
+ // app.bibiman.tag_list.tag_list_state.selected().unwrap() as i32,
+ // args.colors.highlight_text_color,
+ // 20,
+ // )
+ cfg.colors.as_ref().unwrap().highlight_text_color.unwrap()
} else {
- Color::Indexed(args.colors.main_text_color)
+ cfg.colors.as_ref().unwrap().main_text_color.unwrap()
},
)) //.bg(color)
})