diff options
Diffstat (limited to 'src/frontend/handler.rs')
| -rw-r--r-- | src/frontend/handler.rs | 210 |
1 files changed, 0 insertions, 210 deletions
diff --git a/src/frontend/handler.rs b/src/frontend/handler.rs deleted file mode 100644 index 39ec7a2..0000000 --- a/src/frontend/handler.rs +++ /dev/null @@ -1,210 +0,0 @@ -// bibiman - a TUI for managing BibLaTeX databases -// Copyright (C) 2024 lukeflo -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <https://www.gnu.org/licenses/>. -///// - -use crate::frontend::app::App; -use crate::frontend::tui::Tui; -use crossterm::event::{KeyCode, KeyEvent, KeyModifiers}; - -use super::app::CurrentArea; -use color_eyre::eyre::Result; - -/// Handles the key events and updates the state of [`App`]. -pub fn handle_key_events(key_event: KeyEvent, app: &mut App, tui: &mut Tui) -> Result<()> { - // Keycodes activated for every area (high priority) - match key_event.code { - // Exit application on `ESC` or `q` - KeyCode::Char('Q') | KeyCode::Char('q') => { - app.quit(); - } - // Exit application on `Ctrl-C` - KeyCode::Char('c') | KeyCode::Char('C') => { - if key_event.modifiers == KeyModifiers::CONTROL { - app.quit(); - } - } - KeyCode::PageDown => { - app.scroll_info_down(); - } - KeyCode::PageUp => { - app.scroll_info_up(); - } - _ => {} - } - // Keycodes for specific areas - match app.current_area { - // Keycodes for the tag area - CurrentArea::TagArea => match key_event.code { - KeyCode::Down => { - app.select_next_tag(1); - } - KeyCode::Up => { - app.select_previous_tag(1); - } - KeyCode::Char('j') => { - if key_event.modifiers == KeyModifiers::ALT { - app.scroll_info_down(); - } else { - app.select_next_tag(1); - } - } - KeyCode::Char('k') => { - if key_event.modifiers == KeyModifiers::ALT { - app.scroll_info_up(); - } else { - app.select_previous_tag(1); - } - } - KeyCode::Char('d') => { - if key_event.modifiers == KeyModifiers::CONTROL { - app.select_next_tag(5) - } - } - KeyCode::Char('u') => { - if key_event.modifiers == KeyModifiers::CONTROL { - app.select_previous_tag(5) - } - } - KeyCode::Char('g') | KeyCode::Home => { - app.select_first_tag(); - } - KeyCode::Char('G') | KeyCode::End => { - app.select_last_tag(); - } - KeyCode::Char('/') => { - app.enter_search_area(); - } - KeyCode::Char('f') | KeyCode::Char('F') => { - if key_event.modifiers == KeyModifiers::CONTROL { - app.enter_search_area(); - } - } - KeyCode::Tab | KeyCode::BackTab => { - app.toggle_area(); - } - KeyCode::Esc => { - app.reset_current_list(); - } - KeyCode::Enter => { - app.filter_for_tags(); - } - _ => {} - }, - // Keycodes for the entry area - CurrentArea::EntryArea => match key_event.code { - KeyCode::Down => { - app.select_next_entry(1); - } - KeyCode::Up => { - app.select_previous_entry(1); - } - KeyCode::Char('j') => { - if key_event.modifiers == KeyModifiers::ALT { - app.scroll_info_down(); - } else { - app.select_next_entry(1); - } - } - KeyCode::Char('k') => { - if key_event.modifiers == KeyModifiers::ALT { - app.scroll_info_up(); - } else { - app.select_previous_entry(1); - } - } - KeyCode::Char('d') => { - if key_event.modifiers == KeyModifiers::CONTROL { - app.select_next_entry(5); - } - } - KeyCode::Char('u') => { - if key_event.modifiers == KeyModifiers::CONTROL { - app.select_previous_entry(5); - } else { - app.open_doi_url()?; - } - } - KeyCode::Char('g') | KeyCode::Home => { - app.select_first_entry(); - } - KeyCode::Char('G') | KeyCode::End => { - app.select_last_entry(); - } - KeyCode::Char('h') => { - app.select_prev_column(); - } - KeyCode::Char('l') => { - app.select_next_column(); - } - KeyCode::Char('s') => { - app.entry_table.sort_entry_table(true); - } - KeyCode::Char('y') => { - App::yank_text(&app.get_selected_citekey()); - } - KeyCode::Char('e') => { - app.run_editor(tui)?; - } - KeyCode::Char('o') => { - app.open_connected_file()?; - } - KeyCode::Char('/') => { - app.enter_search_area(); - } - KeyCode::Char('f') | KeyCode::Char('F') => { - if key_event.modifiers == KeyModifiers::CONTROL { - app.enter_search_area(); - } - } - KeyCode::Tab | KeyCode::BackTab => { - app.toggle_area(); - } - KeyCode::Esc => { - app.reset_current_list(); - } - _ => {} - }, - // Keycodes for the search area (rendered in footer) - CurrentArea::SearchArea => match key_event.code { - KeyCode::Esc => { - app.break_search(); - } - KeyCode::Enter => { - app.confirm_search(); - } - KeyCode::Backspace => { - app.search_pattern_pop(); - } - KeyCode::Char(search_pattern) => { - app.search_pattern_push(search_pattern); - } - _ => {} - }, - // Keycodes for the help area (popup) - CurrentArea::HelpArea => match key_event.code { - KeyCode::Char('q') => { - app.quit(); - } - KeyCode::Esc => { - app.toggle_area(); - app.former_area = None; - } - _ => {} - }, - CurrentArea::InfoArea => {} - } - Ok(()) -} |
