diff options
| author | Aram Drevekenin <aram@poor.dev> | 2024-03-26 16:37:42 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-26 16:37:42 +0100 |
| commit | 631ffd9bc46e9b4f79794525793e0cd2b76a10fa (patch) | |
| tree | 831e987e3dfbc28a3097f5b5ebae93ef64ab67f1 /default-plugins/session-manager/src/ui | |
| parent | docs(changelog): binding ctrl space (diff) | |
| download | sl0ppij-631ffd9bc46e9b4f79794525793e0cd2b76a10fa.tar.gz sl0ppij-631ffd9bc46e9b4f79794525793e0cd2b76a10fa.tar.xz sl0ppij-631ffd9bc46e9b4f79794525793e0cd2b76a10fa.zip | |
fix(ui): session manager UI fixes (#3226)
* fix(ui): display new session folder prompt always
* fix(ui): truncate session name and error on too long a name
* fix(ui): scrolling layout list in welcome screen
* style(fmt): rustfmt
Diffstat (limited to 'default-plugins/session-manager/src/ui')
| -rw-r--r-- | default-plugins/session-manager/src/ui/components.rs | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/default-plugins/session-manager/src/ui/components.rs b/default-plugins/session-manager/src/ui/components.rs index d44fddf4..5c265f54 100644 --- a/default-plugins/session-manager/src/ui/components.rs +++ b/default-plugins/session-manager/src/ui/components.rs @@ -709,6 +709,23 @@ pub fn render_new_session_block( long_instruction, ); } else { + let space_for_new_session_name = + max_cols_of_new_session_block.saturating_sub(prompt.width() + 18); + let new_session_name = if new_session_name.width() > space_for_new_session_name { + let mut truncated = String::new(); + for character in new_session_name.chars().rev() { + if truncated.width() + character.width().unwrap_or(0) + < space_for_new_session_name + { + truncated.push(character); + } else { + break; + } + } + format!("...{}", truncated.chars().rev().collect::<String>()) + } else { + new_session_name.to_owned() + }; println!( "\u{1b}[m{}{} {}_ {}", format!("\u{1b}[{};{}H", y + 1, x + 1), @@ -747,18 +764,23 @@ pub fn render_new_session_block( } render_layout_selection_list( new_session_info, - colors, - max_rows_of_new_session_block.saturating_sub(1), + max_rows_of_new_session_block.saturating_sub(8), max_cols_of_new_session_block, x, y + 1, ); } + render_new_session_folder_prompt( + new_session_info, + colors, + x, + (y + max_rows_of_new_session_block).saturating_sub(3), + max_cols_of_new_session_block, + ); } pub fn render_layout_selection_list( new_session_info: &NewSessionInfo, - colors: Colors, max_rows_of_new_session_block: usize, max_cols_of_new_session_block: usize, x: usize, @@ -786,8 +808,10 @@ pub fn render_layout_selection_list( print_text_with_coordinates(layout_indication_line, x, y + 1, None, None); println!(); let mut table = Table::new(); - for (i, (layout_info, indices, is_selected)) in - new_session_info.layouts_to_render().into_iter().enumerate() + for (i, (layout_info, indices, is_selected)) in new_session_info + .layouts_to_render(max_rows_of_new_session_block) + .into_iter() + .enumerate() { let layout_name = layout_info.name(); let layout_name_len = layout_name.width(); @@ -818,13 +842,6 @@ pub fn render_layout_selection_list( } let table_y = y + 3; print_table_with_coordinates(table, x, table_y, None, None); - render_new_session_folder_prompt( - new_session_info, - colors, - x, - (y + max_rows_of_new_session_block).saturating_sub(3), - max_cols_of_new_session_block, - ); } pub fn render_error(error_text: &str, rows: usize, columns: usize, x: usize, y: usize) { |
