use super::{App, FormatMode};
use std::path::PathBuf;
impl App {
pub fn handle_vim_input(&mut self, c: char) -> bool {
self.vim_buffer.push(c);
if self.vim_buffer == "gg" {
if self.showing_help {
self.scroll_to_top();
} else if self.format_mode == FormatMode::Edit {
self.scroll_to_top();
self.content_cursor_line = 0;
self.content_cursor_col = 0;
} else if !self.relf_entries.is_empty() {
self.selected_entry_index = 0;
} else {
self.scroll_to_top();
self.content_cursor_line = 0;
self.content_cursor_col = 0;
}
self.vim_buffer.clear();
return true;
} else if self.vim_buffer == "g-" {
if !self.showing_help && self.format_mode == FormatMode::Edit {
self.undo();
}
self.vim_buffer.clear();
return true;
} else if self.vim_buffer == "g+" {
if !self.showing_help && self.format_mode == FormatMode::Edit {
self.redo();
}
self.vim_buffer.clear();
return true;
} else if self.vim_buffer.len() >= 2 {
self.vim_buffer.clear();
}
false
}
pub fn execute_command(&mut self) -> bool {
let cmd = self.command_buffer.clone();
let cmd = cmd.trim();
if cmd == "w" {
self.save_file();
} else if cmd == "wq" {
self.save_file();
return true; } else if cmd == "q" {
return true; } else if cmd.starts_with("w ") {
let filename = cmd.strip_prefix("w ").unwrap().trim().to_string();
self.save_file_as(&filename);
} else if cmd.starts_with("wq ") {
let filename = cmd.strip_prefix("wq ").unwrap().trim().to_string();
self.save_file_as(&filename);
return true; } else if cmd == "e" {
self.reload_file();
} else if cmd.starts_with("e ") {
let filename = cmd.strip_prefix("e ").unwrap().trim().to_string();
let path = PathBuf::from(filename);
self.load_file(path);
} else if cmd == "ar" {
self.auto_reload = !self.auto_reload;
let status = if self.auto_reload {
"Auto-reload enabled"
} else {
"Auto-reload disabled"
};
self.set_status(status);
} else if cmd == "ai" {
self.append_inside();
} else if cmd == "ao" {
self.append_outside();
} else if cmd == "o" {
self.order_entries();
} else if cmd == "gi" {
self.jump_to_first_inside();
} else if cmd == "go" {
self.jump_to_first_outside();
} else if cmd == "ci" {
self.copy_inside_data();
} else if cmd == "co" {
self.copy_outside_data();
} else if cmd == "cu" {
self.copy_selected_url();
} else if cmd == "vu" {
self.paste_url_to_selected();
} else if cmd == "vi" {
self.paste_inside_overwrite();
} else if cmd == "vo" {
self.paste_outside_overwrite();
} else if cmd == "va" {
self.paste_append_all();
} else if cmd == "vai" {
self.paste_inside_append();
} else if cmd == "vao" {
self.paste_outside_append();
} else if cmd == "xi" {
self.clear_inside();
} else if cmd == "xo" {
self.clear_outside();
} else if cmd == "dd" {
if self.format_mode == FormatMode::Edit {
self.delete_current_entry();
self.is_modified = true;
} else if !self.relf_entries.is_empty() {
self.delete_selected_entry();
self.is_modified = true;
self.save_file();
}
} else if cmd == "yy" {
self.duplicate_selected_entry();
} else if cmd == "noh" {
self.clear_search_highlight();
} else if cmd == "nof" {
self.clear_filter();
} else if cmd.starts_with("f ") {
if self.format_mode == FormatMode::View {
let pattern = cmd.strip_prefix("f ").unwrap().trim().to_string();
self.apply_filter(pattern);
} else {
self.set_status("Filter only works in View mode");
}
} else if cmd == "h" {
self.toggle_help();
} else if cmd == "c" {
self.copy_to_clipboard();
} else if cmd == "v" {
self.paste_from_clipboard();
} else if cmd == "x" {
self.clear_content();
} else if cmd.starts_with("s/") || cmd.starts_with("%s/") {
self.execute_substitute(cmd);
} else if cmd == "set number" || cmd == "set nu" {
self.show_line_numbers = true;
self.set_status("Line numbers enabled");
} else if cmd == "set nonumber" || cmd == "set nonu" {
self.show_line_numbers = false;
self.set_status("Line numbers disabled");
} else if cmd.starts_with("set card=") {
if let Some(value_str) = cmd.strip_prefix("set card=") {
if let Ok(value) = value_str.trim().parse::<usize>() {
if value >= 1 && value <= 10 {
self.max_visible_cards = value;
self.set_status(&format!("Max visible cards set to {}", value));
} else {
self.set_status("Card value must be between 1 and 10");
}
} else {
self.set_status("Invalid card value");
}
}
} else {
self.set_status(&format!("Unknown command: {}", cmd));
}
false }
}