style: move leading padding inside first tab

This commit is contained in:
Valdemar Lorenzen
2026-10-12 10:52:45 +02:00
parent 393791ab7e
commit 05d62aa4a5
2 changed files with 6 additions and 7 deletions
+1 -1
View File
@@ -218,7 +218,7 @@ Use `:tab.new` to open the current buffer in a new, focused tab with one pane. E
| `:tab.close` | `config.core.tab.close` | Close the current tab and all its panes, protecting unsaved changes | | `:tab.close` | `config.core.tab.close` | Close the current tab and all its panes, protecting unsaved changes |
| `:tab.force_close` | `config.core.tab.force_close` | Explicitly discard exclusively displayed edits and close the tab | | `:tab.force_close` | `config.core.tab.force_close` | Explicitly discard exclusively displayed edits and close the tab |
Multiple tabs show a single top row with padded numbered filenames and dirty markers. The active tab has an accent-colored background fading into the terminal background through `░▒▓` / `▓▒░`, except the first tab has no left fade; inactive tabs remain unfilled. Narrow terminals omit the fade before clipping the active title. The status bar uses the same fade around its mode and right-aligned caret position, leaving file metadata unfilled. New/close actions have no default keybinding; for example, `config.bind "leader t", config.core.tab.new`. Multiple tabs show a single top row with numbered filenames and dirty markers, with padding inside each tab's styling. The active tab has an accent-colored background fading into the terminal background through `░▒▓` / `▓▒░`, except the first tab has no left fade; inactive tabs remain unfilled. Narrow terminals omit the fade before clipping the active title. The status bar uses the same fade around its mode and right-aligned caret position, leaving file metadata unfilled. New/close actions have no default keybinding; for example, `config.bind "leader t", config.core.tab.new`.
Closing a tab refuses dirty buffers whose final displayed owner would disappear, including a comparison's working and return buffers. Buffers displayed in another tab remain open with their edits, even on force-close. Other hidden buffers remain loaded. Closing the last tab quits only if every open buffer is clean; force-close quits without saving. Closing a tab refuses dirty buffers whose final displayed owner would disappear, including a comparison's working and return buffers. Buffers displayed in another tab remain open with their edits, even on force-close. Other hidden buffers remain loaded. Closing the last tab quits only if every open buffer is clean; force-close quits without saving.
+5 -6
View File
@@ -1028,7 +1028,8 @@ fn draw_tab_bar(frame: &mut Frame, editor: &Editor, area: Rect) -> Rect {
}) })
.unwrap_or(Cow::Borrowed("[No Name]")); .unwrap_or(Cow::Borrowed("[No Name]"));
display_text(&format!( display_text(&format!(
"{} {name}{} ", "{}{} {name}{} ",
if bar.width > 1 { " " } else { "" },
index + 1, index + 1,
if buffer.is_some_and(|buffer| buffer.dirty) { if buffer.is_some_and(|buffer| buffer.dirty) {
" [+]" " [+]"
@@ -1040,17 +1041,15 @@ fn draw_tab_bar(frame: &mut Frame, editor: &Editor, area: Rect) -> Rect {
.collect(); .collect();
let active = editor.tab_index(); let active = editor.tab_index();
let mut first = active; let mut first = active;
let padding = u16::from(bar.width > 1);
let fade_width = if active == 0 { 3 } else { 6 }; let fade_width = if active == 0 { 3 } else { 6 };
let fade = usize::from(bar.width) >= labels[active].width() + usize::from(padding) + fade_width; let fade = usize::from(bar.width) >= labels[active].width() + fade_width;
let mut width = let mut width = labels[active].width() + if fade { fade_width } else { 0 };
labels[active].width() + usize::from(padding) + if fade { fade_width } else { 0 };
while first > 0 && width + labels[first - 1].width() <= usize::from(bar.width) { while first > 0 && width + labels[first - 1].width() <= usize::from(bar.width) {
first -= 1; first -= 1;
width += labels[first].width(); width += labels[first].width();
} }
let inactive = Style::default().fg(Color::Gray); let inactive = Style::default().fg(Color::Gray);
let mut x = bar.x + padding; let mut x = bar.x;
for (index, label) in labels.iter().enumerate().skip(first) { for (index, label) in labels.iter().enumerate().skip(first) {
let decorated = index == active && fade; let decorated = index == active && fade;
let width = (label.width() + if decorated { fade_width } else { 0 }) let width = (label.width() + if decorated { fade_width } else { 0 })