From a3d850acd971937f8c55eafdc225a8084dd359ee Mon Sep 17 00:00:00 2001 From: Shaun Reed Date: Sun, 25 Jan 2026 09:44:37 -0500 Subject: [PATCH] [tui] Clean up logger and editor. Filter some noisy system logs in the Logger by default. Use LLD for linking to silence warning for deprecated gold linker. --- .cargo/config.toml | 3 +++ src/tui/app.rs | 2 +- src/tui/editor.rs | 5 ++--- src/tui/editor_tab.rs | 4 ++-- src/tui/explorer.rs | 7 +++++-- src/tui/logger.rs | 6 ++++-- 6 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..a12f1c0 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,3 @@ + +[build] +rustflags = [ "-C", "link-arg=-fuse-ld=lld", ] diff --git a/src/tui/app.rs b/src/tui/app.rs index 661e6ac..0371a32 100644 --- a/src/tui/app.rs +++ b/src/tui/app.rs @@ -6,7 +6,7 @@ use crate::tui::logger::Logger; use crate::tui::menu_bar::MenuBar; use AppComponent::AppMenuBar; use anyhow::{Context, Result}; -use log::{error, info, trace, warn}; +use log::{error, info, trace}; use ratatui::DefaultTerminal; use ratatui::buffer::Buffer; use ratatui::crossterm::event; diff --git a/src/tui/editor.rs b/src/tui/editor.rs index f927f75..9d1d0d3 100644 --- a/src/tui/editor.rs +++ b/src/tui/editor.rs @@ -24,13 +24,12 @@ impl Editor { "Editor" } - // TODO: You shouldnt be able to construct the editor without a path? - pub fn new() -> Self { + pub fn new(path: &std::path::PathBuf) -> Self { trace!(target:Self::id(), "Building {}", Self::id()); Editor { state: EditorState::default(), event_handler: EditorEventHandler::default(), - file_path: None, + file_path: Some(path.to_owned()), syntax_set: SyntaxSet::load_defaults_nonewlines(), component_state: ComponentState::default().with_help_text(concat!( "CTRL+S: Save file | ALT+(←/h): Previous tab | ALT+(l/→): Next tab |", diff --git a/src/tui/editor_tab.rs b/src/tui/editor_tab.rs index 8cc309a..1864487 100644 --- a/src/tui/editor_tab.rs +++ b/src/tui/editor_tab.rs @@ -27,7 +27,7 @@ impl EditorTab { trace!(target:Self::id(), "Building EditorTab with path {path:?}"); let tab_order = vec![path.to_string_lossy().to_string()]; Self { - editors: HashMap::from([(tab_order.first().unwrap().to_owned(), Editor::new())]), + editors: HashMap::from([(tab_order.first().unwrap().to_owned(), Editor::new(path))]), tab_order, current_editor: 0, } @@ -68,7 +68,7 @@ impl EditorTab { let path_str = path.to_string_lossy().to_string(); self.tab_order.push(path_str.clone()); - let mut editor = Editor::new(); + let mut editor = Editor::new(path); editor.set_contents(path).context("Failed to open tab")?; self.editors.insert(path_str, editor); self.current_editor = self.tab_order.len() - 1; diff --git a/src/tui/explorer.rs b/src/tui/explorer.rs index a1e10c0..63f4e5a 100644 --- a/src/tui/explorer.rs +++ b/src/tui/explorer.rs @@ -32,7 +32,7 @@ impl<'a> Explorer<'a> { tree_state: TreeState::default(), component_state: ComponentState::default().with_help_text(concat!( "(↑/k)/(↓/j): Select item | ←/h: Close folder | →/l: Open folder |", - " Enter: Open editor tab" + " Space: Open / close folder | Enter: Open file in new editor tab" )), }; Ok(explorer) @@ -149,7 +149,7 @@ impl<'a> Component for Explorer<'a> { return Ok(Action::OpenTab); } } - return Ok(Action::Noop); + // Otherwise fall through and handle Enter in the next match case. } let changed = match key.code { @@ -160,6 +160,9 @@ impl<'a> Component for Explorer<'a> { let key = self.tree_state.selected().to_owned(); self.tree_state.close(key.as_ref()) } + KeyCode::Char(' ') | KeyCode::Enter => self + .tree_state + .toggle(self.tree_state.selected().to_owned()), KeyCode::Right | KeyCode::Char('l') => self.tree_state.key_right(), _ => false, }; diff --git a/src/tui/logger.rs b/src/tui/logger.rs index 44ad0f3..f82f9f4 100644 --- a/src/tui/logger.rs +++ b/src/tui/logger.rs @@ -1,5 +1,5 @@ use crate::tui::component::{Action, Component, ComponentState, Focus}; -use log::trace; +use log::{LevelFilter, trace}; use ratatui::buffer::Buffer; use ratatui::crossterm::event::{Event, KeyCode, KeyEvent}; use ratatui::layout::Rect; @@ -24,7 +24,9 @@ impl Logger { let state = TuiWidgetState::new(); state.transition(TuiWidgetEvent::HideKey); Self { - state, + state: state + .set_level_for_target("arboard::platform::linux::x11", LevelFilter::Off) + .set_level_for_target("mio::poll", LevelFilter::Off), component_state: ComponentState::default().with_help_text(concat!( "Space: Hide/show logging target selector panel | (↑/k)/(↓/j): Select target |", " (←/h)/(→/l): Display level | f: Focus target | +/-: Filter level |",