use crate::buffer::{BufferAPI, BufferManager, EditMode};
use crate::buffer_handler::BufferHandler;
use crate::config::config::Config;
use crate::cursor_manager::CursorManager;
use tracing::info;
pub trait BufferManagementBehavior {
fn buffer_manager(&mut self) -> &mut BufferManager;
fn buffer_handler(&mut self) -> &mut BufferHandler;
fn buffer(&self) -> &dyn BufferAPI;
fn buffer_mut(&mut self) -> &mut dyn BufferAPI;
fn config(&self) -> &Config;
fn cursor_manager(&mut self) -> &mut CursorManager;
fn set_input_text_with_cursor(&mut self, text: String, cursor: usize);
fn new_buffer(&mut self) {
let buffer_count = self.buffer_manager().all_buffers().len();
let mut new_buffer = crate::buffer::Buffer::new(buffer_count + 1);
let config = self.config();
new_buffer.set_compact_mode(config.display.compact_mode);
new_buffer.set_case_insensitive(config.behavior.case_insensitive_default);
new_buffer.set_show_row_numbers(config.display.show_row_numbers);
info!(target: "buffer",
"Creating new buffer with config: compact_mode={}, case_insensitive={}, show_row_numbers={}",
config.display.compact_mode,
config.behavior.case_insensitive_default,
config.display.show_row_numbers);
let index = self.buffer_manager().add_buffer(new_buffer);
self.buffer_mut()
.set_status_message(format!("Created new buffer #{}", index + 1));
}
fn next_buffer(&mut self) -> String;
fn previous_buffer(&mut self) -> String;
fn quick_switch_buffer(&mut self) -> String;
fn close_buffer(&mut self) -> (bool, String);
fn switch_to_buffer(&mut self, index: usize) -> String;
fn yank(&mut self) {
if let Some(buffer) = self.buffer_manager().current_mut() {
buffer.yank();
if buffer.get_edit_mode() == EditMode::SingleLine {
let text = buffer.get_input_text();
let cursor = buffer.get_input_cursor_position();
self.set_input_text_with_cursor(text, cursor);
self.cursor_manager().set_position(cursor);
}
}
}
fn buffer_count(&self) -> usize;
fn current_buffer_index(&self) -> usize;
}