ui: enlarge floating explorer modestly and remove redundant mode label

This commit is contained in:
2026-10-09 19:29:52 +02:00
parent 18dc8cc155
commit de6b4d47f3
2 changed files with 6 additions and 4 deletions
+2
View File
@@ -127,6 +127,8 @@ Switching from Insert commits its pending undo group and parks that buffer in No
Space o opens a floating **Tree** explorer directly in **INSERT/filter** mode, ready for typing; Space e opens or focuses the docked **Tree**, starting in **NORMAL/navigation** mode when new. Both use one catalog and instance. Invoking the other action applies that presentation's configured default while retaining query, selection identities, and surviving folder expansion. Floating Tree invocation enters filtering if not already filtering. These actions are available as `config.core.file_picker` and `config.core.file_explorer` in Normal/Visual and in the command palette. Space o opens a floating **Tree** explorer directly in **INSERT/filter** mode, ready for typing; Space e opens or focuses the docked **Tree**, starting in **NORMAL/navigation** mode when new. Both use one catalog and instance. Invoking the other action applies that presentation's configured default while retaining query, selection identities, and surviving folder expansion. Floating Tree invocation enters filtering if not already filtering. These actions are available as `config.core.file_picker` and `config.core.file_explorer` in Normal/Visual and in the command palette.
The floating explorer is centered, capped at 100 columns by 24 rows, and shrinks to fit smaller terminals. The tree mode appears in the title; the help row does not repeat it.
The dock defaults to the right of the editor workspace. Set `config.file_explorer_side = "left"` (or `"right"`, `"top"`, `"bottom"`) to choose another side. Status and command/search prompts remain full-width; editor text, gutter, highlights, and cursors use the remaining rectangle. Focused panes prioritize their query on tiny terminals; unfocused docks shrink or hide to preserve editing space. The dock defaults to the right of the editor workspace. Set `config.file_explorer_side = "left"` (or `"right"`, `"top"`, `"bottom"`) to choose another side. Status and command/search prompts remain full-width; editor text, gutter, highlights, and cursors use the remaining rectangle. Focused panes prioritize their query on tiny terminals; unfocused docks shrink or hide to preserve editing space.
Both view preferences default to `"tree"`: `config.file_picker_view` and `config.file_explorer_view` independently accept `"list"` or `"tree"`. Set the floating preference to `"list"` to retain the old flat picker. Ctrl+t toggles the current focused instance without rescanning. List retains searchable full relative paths. Tree shows folders first, two-cell indentation, and basename-only files. Folder names end in `/` and use cyan text; files use the normal foreground color. Fold-state arrows are omitted. Maximal single-child directory chains share one row, such as `src/client/http/`; a directory containing one file still gets its own row. Both view preferences default to `"tree"`: `config.file_picker_view` and `config.file_explorer_view` independently accept `"list"` or `"tree"`. Set the floating preference to `"list"` to retain the old flat picker. Ctrl+t toggles the current focused instance without rescanning. List retains searchable full relative paths. Tree shows folders first, two-cell indentation, and basename-only files. Folder names end in `/` and use cyan text; files use the normal foreground color. Fold-state arrows are omitted. Maximal single-child directory chains share one row, such as `src/client/http/`; a directory containing one file still gets its own row.
+4 -4
View File
@@ -607,13 +607,13 @@ fn draw(
if picker.presentation == FilePresentation::Floating { if picker.presentation == FilePresentation::Floating {
let [_, column, _] = Layout::horizontal([ let [_, column, _] = Layout::horizontal([
Constraint::Fill(1), Constraint::Fill(1),
Constraint::Length(area.width.min(84)), Constraint::Length(area.width.min(100)),
Constraint::Fill(1), Constraint::Fill(1),
]) ])
.areas(area); .areas(area);
let [_, panel, _] = Layout::vertical([ let [_, panel, _] = Layout::vertical([
Constraint::Fill(1), Constraint::Fill(1),
Constraint::Length(area.height.min(18)), Constraint::Length(area.height.min(24)),
Constraint::Fill(1), Constraint::Fill(1),
]) ])
.areas(column); .areas(column);
@@ -777,7 +777,7 @@ fn draw_file_list(frame: &mut Frame, picker: &FilePicker, panel: Rect, navigatio
]) ])
.areas(content); .areas(content);
let query = if browsing && picker.query.is_empty() { let query = if browsing && picker.query.is_empty() {
"NORMAL · i filter · ^U clear · ^T view".into() "i filter · ^U clear · ^T view".into()
} else if browsing { } else if browsing {
format!("filter: {} · ^U clear", display_text(&picker.query)) format!("filter: {} · ^U clear", display_text(&picker.query))
} else { } else {
@@ -2770,7 +2770,7 @@ end
terminal terminal
.draw(|frame| draw(frame, &editor, &mut top, &mut left, &mut syntax)) .draw(|frame| draw(frame, &editor, &mut top, &mut left, &mut syntax))
.unwrap(); .unwrap();
let panel = Rect::new(area.x + 13, area.y + 4, 84, 18); let panel = Rect::new(area.x + 5, area.y + 1, 100, 24);
assert_eq!((top, left), before); assert_eq!((top, left), before);
assert_eq!( assert_eq!(
terminal.get_cursor_position().unwrap(), terminal.get_cursor_position().unwrap(),