diff options
| author | lukeflo | 2024-10-07 16:44:26 +0200 |
|---|---|---|
| committer | lukeflo | 2024-10-12 22:41:38 +0200 |
| commit | e425c7dcdf444de1151ab3f5347e6503cd0452b9 (patch) | |
| tree | 0f153303043db31b40c276d42a5dc823cf8da740 /src | |
| parent | c9e749f811b16f7ec352d2aa8773105af046fad8 (diff) | |
| download | bibiman-e425c7dcdf444de1151ab3f5347e6503cd0452b9.tar.gz bibiman-e425c7dcdf444de1151ab3f5347e6503cd0452b9.zip | |
working func for opening PDFs, needs refinement (MacOS)
Diffstat (limited to 'src')
| -rw-r--r-- | src/frontend/entries.rs | 25 | ||||
| -rw-r--r-- | src/frontend/handler.rs | 3 | ||||
| -rw-r--r-- | src/frontend/ui.rs | 2 |
3 files changed, 27 insertions, 3 deletions
diff --git a/src/frontend/entries.rs b/src/frontend/entries.rs index 8eadfa2..b1312ec 100644 --- a/src/frontend/entries.rs +++ b/src/frontend/entries.rs @@ -18,11 +18,14 @@ use super::app::App; use super::tui::Tui; use crate::backend::search::BibiSearch; -use color_eyre::eyre::Result; +use color_eyre::eyre::{Context, Ok, Result}; use editor_command::EditorBuilder; use itertools::Itertools; use ratatui::widgets::TableState; -use std::process::Command; +use std::{ + io::Stderr, + process::{Command, Stdio}, +}; impl FromIterator<Vec<String>> for EntryTable { fn from_iter<T: IntoIterator<Item = Vec<String>>>(iter: T) -> Self { @@ -214,4 +217,22 @@ impl App { // self.search_struct.filtered_entry_list = filtered_list.clone(); self.entry_table = EntryTable::from_iter(filtered_list) } + + // Open file connected with entry through 'file' or 'pdf' field + pub fn open_connected_file(&mut self) -> Result<()> { + let idx = self.entry_table.entry_table_state.selected().unwrap(); + let filepath = &self.entry_table.entry_table_items[idx].filepath.clone(); + + // Build command to execute pdf-reader. 'xdg-open' is Linux standard + // TODO: need to implement for MacOS ('opener'). Windows, I don't know... + let _ = Command::new("xdg-open") + .arg(&filepath) + // Pipe output produced by opener to /dev/null + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .spawn() + .wrap_err("Opening file not possible"); + + Ok(()) + } } diff --git a/src/frontend/handler.rs b/src/frontend/handler.rs index a718a87..5bb52d5 100644 --- a/src/frontend/handler.rs +++ b/src/frontend/handler.rs @@ -99,6 +99,9 @@ pub fn handle_key_events(key_event: KeyEvent, app: &mut App, tui: &mut Tui) -> R KeyCode::Char('e') => { app.run_editor(tui)?; } + KeyCode::Char('o') => { + app.open_connected_file()?; + } KeyCode::Char('/') => { app.enter_search_area(); } diff --git a/src/frontend/ui.rs b/src/frontend/ui.rs index 4920b81..ed6171e 100644 --- a/src/frontend/ui.rs +++ b/src/frontend/ui.rs @@ -27,7 +27,7 @@ use ratatui::{ }, }; -use crate::{backend::bib::BibiEntry, frontend::app::App, frontend::keywords::TagListItem}; +use crate::{frontend::app::App, frontend::keywords::TagListItem}; use super::app::{CurrentArea, FormerArea}; |
