Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 14 additions & 10 deletions crates/vite_select/src/interactive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,8 @@ pub struct RenderParams<'a> {
/// Number of selectable items beyond the visible range.
pub hidden_count: usize,
pub header: Option<&'a str>,
/// Prompt line text, rendered when `query` is `Some` (interactive only).
pub prompt: &'a str,
/// Current search text. `Some` enables the prompt line (interactive only).
pub query: Option<&'a str>,
/// Whether to render group header lines. When `false`, items are still
Expand Down Expand Up @@ -265,6 +267,7 @@ pub fn render_items(writer: &mut impl Write, params: &RenderParams<'_>) -> anyho
visible_row_range,
hidden_count,
header,
prompt,
query,
show_group_headers,
line_ending,
Expand All @@ -286,15 +289,9 @@ pub fn render_items(writer: &mut impl Write, params: &RenderParams<'_>) -> anyho
// Print ": " separator before query only when query is non-empty,
// to avoid a trailing space that Windows ConPTY would strip.
if q.is_empty() {
write!(
writer,
"Select a task (\u{2191}/\u{2193}, Enter to run, type to search):{line_ending}",
)?;
write!(writer, "{prompt}{line_ending}")?;
} else {
write!(
writer,
"Select a task (\u{2191}/\u{2193}, Enter to run, type to search): {q}{line_ending}",
)?;
write!(writer, "{prompt} {q}{line_ending}")?;
}
write!(writer, "{line_ending}")?;
lines += 2;
Expand Down Expand Up @@ -446,6 +443,7 @@ fn render(
stdout: &mut impl Write,
state: &mut State<'_>,
header: Option<&str>,
prompt: &str,
) -> anyhow::Result<()> {
// Move cursor up to clear previous render
if state.rendered_lines > 0 {
Expand All @@ -471,6 +469,7 @@ fn render(
visible_row_range: state.visible_display_rows(),
hidden_count: state.hidden_item_count(),
header,
prompt,
query: Some(&state.query),
show_group_headers: true,
line_ending: "\r\n",
Expand All @@ -487,6 +486,7 @@ pub fn run(
initial_query: Option<&str>,
selected_index: &mut usize,
header: Option<&str>,
prompt: &str,
page_size: usize,
mut after_render: impl FnMut(&RenderState<'_>),
) -> anyhow::Result<super::SelectResult> {
Expand All @@ -502,7 +502,7 @@ pub fn run(
let mut state = State::new(items, initial_query, page_size);

// Initial render
render(&mut out, &mut state, header)?;
render(&mut out, &mut state, header, prompt)?;
after_render(&RenderState { query: &state.query, selected_index: state.selected });

loop {
Expand Down Expand Up @@ -545,7 +545,7 @@ pub fn run(
_ => continue,
}

render(&mut out, &mut state, header)?;
render(&mut out, &mut state, header, prompt)?;
after_render(&RenderState { query: &state.query, selected_index: state.selected });
}
}
Expand All @@ -569,6 +569,8 @@ fn cleanup(stdout: &mut impl Write, state: &State<'_>) -> anyhow::Result<()> {

#[cfg(test)]
mod tests {
const TASK_PROMPT: &str = "Select a task (\u{2191}/\u{2193}, Enter to run, type to search):";

use super::*;

fn make_items(items: &[(&str, &str)]) -> Vec<SelectItem> {
Expand Down Expand Up @@ -630,6 +632,7 @@ mod tests {
visible_row_range: 0..len,
hidden_count: 0,
header: None,
prompt: TASK_PROMPT,
query: None,
show_group_headers: false,
line_ending: "\n",
Expand Down Expand Up @@ -658,6 +661,7 @@ mod tests {
visible_row_range: 0..len,
hidden_count: 0,
header: None,
prompt: TASK_PROMPT,
query: Some(query),
show_group_headers: true,
line_ending: "\n",
Expand Down
4 changes: 4 additions & 0 deletions crates/vite_select/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ pub struct SelectParams<'a> {
pub query: Option<&'a str>,
/// Header line rendered above the list (e.g. an error message).
pub header: Option<&'a str>,
/// Prompt line rendered above the list in interactive mode.
pub prompt: &'a str,
/// Max visible rows (interactive only).
pub page_size: usize,
}
Expand Down Expand Up @@ -86,6 +88,7 @@ pub fn select_list(
params.query,
selected_index,
params.header,
params.prompt,
params.page_size,
after_render,
),
Expand Down Expand Up @@ -126,6 +129,7 @@ fn non_interactive(
visible_row_range: 0..row_count,
hidden_count: 0,
header,
prompt: "",
query: None,
show_group_headers: false,
line_ending: "\n",
Expand Down
1 change: 1 addition & 0 deletions crates/vite_task/src/session/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -530,6 +530,7 @@ impl<'a> Session<'a> {
items: &select_items,
query: not_found_name,
header: header.as_deref(),
prompt: "Select a task (\u{2191}/\u{2193}, Enter to run, type to search):",
page_size: 12,
};

Expand Down
Loading