aboutsummaryrefslogtreecommitdiff
path: root/src/tui/handler.rs
diff options
context:
space:
mode:
authorlukeflo2024-11-11 22:13:32 +0100
committerlukeflo2024-11-14 09:35:45 +0100
commit761ce14125f0e4ecffbfaf3bf82b4b406f5aa769 (patch)
treef78f106d93bfb2466f1d7785b3080eb4b0e333d9 /src/tui/handler.rs
parent45d85162e455db37f9263088a7703d614969b373 (diff)
downloadbibiman-761ce14125f0e4ecffbfaf3bf82b4b406f5aa769.tar.gz
bibiman-761ce14125f0e4ecffbfaf3bf82b4b406f5aa769.zip
impl popup for keybindings/messages
Diffstat (limited to 'src/tui/handler.rs')
-rw-r--r--src/tui/handler.rs197
1 files changed, 0 insertions, 197 deletions
diff --git a/src/tui/handler.rs b/src/tui/handler.rs
deleted file mode 100644
index ae2fd4d..0000000
--- a/src/tui/handler.rs
+++ /dev/null
@@ -1,197 +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::bibiman::{Bibiman, CurrentArea};
-use crate::tui::Tui;
-use crate::App;
-use color_eyre::eyre::Result;
-use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
-
-/// 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.bibiman.scroll_info_down();
- }
- KeyCode::PageUp => {
- app.bibiman.scroll_info_up();
- }
- _ => {}
- }
- // Keycodes for specific areas
- match app.bibiman.current_area {
- // Keycodes for the tag area
- CurrentArea::TagArea => match key_event.code {
- KeyCode::Down => {
- app.bibiman.select_next_tag(1);
- }
- KeyCode::Up => {
- app.bibiman.select_previous_tag(1);
- }
- KeyCode::Char('j') => {
- if key_event.modifiers == KeyModifiers::ALT {
- app.bibiman.scroll_info_down();
- } else {
- app.bibiman.select_next_tag(1);
- }
- }
- KeyCode::Char('k') => {
- if key_event.modifiers == KeyModifiers::ALT {
- app.bibiman.scroll_info_up();
- } else {
- app.bibiman.select_previous_tag(1);
- }
- }
- KeyCode::Char('d') => {
- if key_event.modifiers == KeyModifiers::CONTROL {
- app.bibiman.select_next_tag(5)
- }
- }
- KeyCode::Char('u') => {
- if key_event.modifiers == KeyModifiers::CONTROL {
- app.bibiman.select_previous_tag(5)
- }
- }
- KeyCode::Char('g') | KeyCode::Home => {
- app.bibiman.select_first_tag();
- }
- KeyCode::Char('G') | KeyCode::End => {
- app.bibiman.select_last_tag();
- }
- KeyCode::Char('/') => {
- app.bibiman.enter_search_area();
- }
- KeyCode::Char('f') | KeyCode::Char('F') => {
- if key_event.modifiers == KeyModifiers::CONTROL {
- app.bibiman.enter_search_area();
- }
- }
- KeyCode::Tab | KeyCode::BackTab => {
- app.bibiman.toggle_area();
- }
- KeyCode::Esc => {
- app.bibiman.reset_current_list();
- }
- KeyCode::Enter => {
- app.bibiman.filter_for_tags();
- }
- _ => {}
- },
- // Keycodes for the entry area
- CurrentArea::EntryArea => match key_event.code {
- KeyCode::Down => {
- app.bibiman.select_next_entry(1);
- }
- KeyCode::Up => {
- app.bibiman.select_previous_entry(1);
- }
- KeyCode::Char('j') => {
- if key_event.modifiers == KeyModifiers::ALT {
- app.bibiman.scroll_info_down();
- } else {
- app.bibiman.select_next_entry(1);
- }
- }
- KeyCode::Char('k') => {
- if key_event.modifiers == KeyModifiers::ALT {
- app.bibiman.scroll_info_up();
- } else {
- app.bibiman.select_previous_entry(1);
- }
- }
- KeyCode::Char('d') => {
- if key_event.modifiers == KeyModifiers::CONTROL {
- app.bibiman.select_next_entry(5);
- }
- }
- KeyCode::Char('u') => {
- if key_event.modifiers == KeyModifiers::CONTROL {
- app.bibiman.select_previous_entry(5);
- } else {
- app.bibiman.open_doi_url()?;
- }
- }
- KeyCode::Char('g') | KeyCode::Home => {
- app.bibiman.select_first_entry();
- }
- KeyCode::Char('G') | KeyCode::End => {
- app.bibiman.select_last_entry();
- }
- KeyCode::Char('h') => {
- app.bibiman.select_prev_column();
- }
- KeyCode::Char('l') => {
- app.bibiman.select_next_column();
- }
- KeyCode::Char('s') => {
- app.bibiman.entry_table.sort_entry_table(true);
- }
- KeyCode::Char('y') => {
- Bibiman::yank_text(&app.bibiman.get_selected_citekey());
- }
- KeyCode::Char('e') => {
- app.bibiman.run_editor(tui)?;
- }
- KeyCode::Char('o') => {
- app.bibiman.open_connected_file()?;
- }
- KeyCode::Char('/') => {
- app.bibiman.enter_search_area();
- }
- KeyCode::Char('f') | KeyCode::Char('F') => {
- if key_event.modifiers == KeyModifiers::CONTROL {
- app.bibiman.enter_search_area();
- }
- }
- KeyCode::Tab | KeyCode::BackTab => {
- app.bibiman.toggle_area();
- }
- KeyCode::Esc => {
- app.bibiman.reset_current_list();
- }
- _ => {}
- },
- // Keycodes for the search area (rendered in footer)
- CurrentArea::SearchArea => match key_event.code {
- KeyCode::Esc => {
- app.bibiman.break_search();
- }
- KeyCode::Enter => {
- app.bibiman.confirm_search();
- }
- KeyCode::Backspace => {
- app.bibiman.search_pattern_pop();
- }
- KeyCode::Char(search_pattern) => {
- app.bibiman.search_pattern_push(search_pattern);
- }
- _ => {}
- },
- }
- Ok(())
-}