Model

Struct Model 

Source
pub struct Model {
Show 15 fields pub path: String, pub current_directory: PathBuf, pub allowed_types: Vec<String>, pub keymap: FilepickerKeyMap, pub show_permissions: bool, pub show_size: bool, pub show_hidden: bool, pub dir_allowed: bool, pub file_allowed: bool, pub file_selected: String, pub height: usize, pub auto_height: bool, pub cursor: String, pub error: Option<String>, pub styles: Styles, /* private fields */
}
Expand description

The main file picker model containing all state and configuration.

This struct represents the complete state of the file picker, including the current directory, file list, selection state, and styling configuration. It implements the BubbleTeaModel trait for integration with bubbletea-rs applications.

§Examples

use bubbletea_widgets::filepicker::Model;
use bubbletea_rs::Model as BubbleTeaModel;

// Create a new file picker
let mut picker = Model::new();

// Or use the BubbleTeaModel::init() method
let (picker, cmd) = Model::init();

§State Management

The model maintains:

  • Current directory being browsed
  • List of files and directories in the current location
  • Currently selected item index
  • Last selected file path (if any)
  • Styling and key binding configuration
  • Navigation history and viewport state

Fields§

§path: String

Path is the path which the user has selected with the file picker.

§current_directory: PathBuf

The directory currently being browsed. This path is updated when navigating into subdirectories or back to parent directories.

§allowed_types: Vec<String>

AllowedTypes specifies which file types the user may select. If empty the user may select any file.

§keymap: FilepickerKeyMap

Key bindings configuration for navigation and interaction. Can be customized to change keyboard shortcuts.

§show_permissions: bool

Whether to show file permissions in the display.

§show_size: bool

Whether to show file sizes in the display.

§show_hidden: bool

Whether to show hidden files (dotfiles on Unix, Windows FILE_ATTRIBUTE_HIDDEN + dotfiles).

§dir_allowed: bool

Whether directories can be selected.

§file_allowed: bool

Whether files can be selected.

§file_selected: String

The name of the most recently selected file.

§height: usize

Height of the picker.

§auto_height: bool

Whether height should automatically adjust to terminal size.

§cursor: String

The cursor string to display (e.g., “> “).

§error: Option<String>

Error message to display when directory operations fail.

§styles: Styles

Visual styling configuration for different UI elements. Can be customized to change colors and appearance.

Implementations§

Source§

impl Model

Source

pub fn new() -> Self

Creates a new file picker model with default settings.

The file picker starts in the current working directory (“.”) and uses default key bindings and styles. The file list is initially empty and will be populated when the model is initialized or when directories are navigated.

§Returns

A new Model instance with default settings matching the Go implementation.

§Examples
use bubbletea_widgets::filepicker::Model;

let mut picker = Model::new();
assert_eq!(picker.current_directory.as_os_str(), ".");
assert!(picker.path.is_empty());
Source

pub fn set_height(&mut self, height: usize)

Sets the height of the filepicker viewport.

This controls how many file entries are visible at once. The viewport automatically adjusts to show the selected item within the visible range.

§Arguments
  • height - The number of lines to show in the file list
§Examples
use bubbletea_widgets::filepicker::Model;

let mut picker = Model::new();
picker.set_height(10); // Show 10 files at a time
Source

pub fn did_select_file(&self, msg: &Msg) -> (bool, String)

Returns whether a user has selected a file with the given message.

This function checks if the message represents a file selection action and if the selected file is allowed based on the current configuration. It only returns true for files that can actually be selected.

§Arguments
  • msg - The message to check for file selection
§Returns

A tuple containing:

  • bool: Whether a valid file was selected
  • String: The path of the selected file (empty if no selection)
§Examples
use bubbletea_widgets::filepicker::Model;
use bubbletea_rs::Msg;

let picker = Model::new();
// In your application's update loop:
// let (selected, path) = picker.did_select_file(&msg);
// if selected {
//     println!("User selected: {}", path);
// }
Source

pub fn did_select_disabled_file(&self, msg: &Msg) -> (bool, String)

Returns whether a user tried to select a disabled file with the given message.

This function is useful for providing feedback when users attempt to select files that are not allowed based on the current allowed_types configuration. Use this to show warning messages or provide helpful feedback.

§Arguments
  • msg - The message to check for disabled file selection attempts
§Returns

A tuple containing:

  • bool: Whether a disabled file selection was attempted
  • String: The path of the disabled file (empty if no disabled selection)
§Examples
use bubbletea_widgets::filepicker::Model;
use bubbletea_rs::Msg;

let mut picker = Model::new();
picker.allowed_types = vec![".txt".to_string()];

// In your application's update loop:
// let (tried_disabled, path) = picker.did_select_disabled_file(&msg);
// if tried_disabled {
//     eprintln!("Cannot select {}: file type not allowed", path);
// }
Source

pub fn read_dir(&mut self)

Reads the current directory and populates the files list. Clears any existing files and error state before reading.

Source

pub fn read_dir_cmd(&self) -> Cmd

Creates a command to read the current directory.

This method allows external code to trigger a directory read without directly calling the private read_dir method. It’s useful for initializing the filepicker with a specific directory.

§Returns

A command that will trigger a ReadDirMsg when executed

§Examples
use bubbletea_widgets::filepicker::Model;

let mut picker = Model::new();
picker.current_directory = std::path::PathBuf::from("/home/user");
let cmd = picker.read_dir_cmd();
// This command can be returned from init() or update()

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Model

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Model for Model

Source§

fn init() -> (Self, Option<Cmd>)

Initialize the model with its initial state and optional startup command. Read more
Source§

fn update(&mut self, msg: Msg) -> Option<Cmd>

Update the model in response to a received message. Read more
Source§

fn view(&self) -> String

Render the current model state as a string for terminal display. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

Source§

fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
Source§

fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

Source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
Source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

Source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

Source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromAngle<T> for T

Source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
Source§

impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

Source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> IntoAngle<U> for T
where U: FromAngle<T>,

Source§

fn into_angle(self) -> U

Performs a conversion into T.
Source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

Source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
Source§

impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

Source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
Source§

impl<T> IntoStimulus<T> for T

Source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
Source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

Source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more
Source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

Source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
Source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

Source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.