project_panel: Add sort mode (#40160)
Closes #4533 (partly at least) Release Notes: - Added `project_panel.sort_mode` option to control explorer file sort (directories first, mixed, files first) ## Summary Adds three sorting modes for the project panel to give users more control over how files and directories are displayed: - **`directories_first`** (default): Current behaviour - directories grouped before files - **`mixed`**: Files and directories sorted together alphabetically - **`files_first`**: filed grouped before directories ## Motivation Users coming from different editors and file managers have different expectations for file sorting. Some prefer directories grouped at the top (traditional), while others prefer the macOS Finder-style mixed sorting where "Apple1/", "apple2.tsx" and "Apple3/" appear alphabetically mixed together. ### Screenshots New sort options in settings: <img width="515" height="160" alt="image" src="https://github.com/user-attachments/assets/8f4e6668-6989-4881-a9bd-ed1f4f0beb40" /> Directories first | Mixed | Files first -------------|-----|----- <img width="328" height="888" alt="image" src="https://github.com/user-attachments/assets/308e5c7a-6e6a-46ba-813d-6e268222925c" /> | <img width="327" height="891" alt="image" src="https://github.com/user-attachments/assets/8274d8ca-b60f-456e-be36-e35a3259483c" /> | <img width="328" height="890" alt="image" src="https://github.com/user-attachments/assets/3c3b1332-cf08-4eaf-9bed-527c00b41529" /> ### Agent usage Copilot-cli/claude-code/codex-cli helped out a lot. I'm not from a rust background, but really wanted this solved, and it gave me a chance to play with some of the coding agents I'm not permitted to use for work stuff --------- Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
This commit is contained in:
co-authored by
Smit Barmase
parent
175162af4f
commit
a2d3e3baf9
@@ -609,6 +609,10 @@ pub struct ProjectPanelSettingsContent {
|
||||
pub drag_and_drop: Option<bool>,
|
||||
/// Settings for automatically opening files.
|
||||
pub auto_open: Option<ProjectPanelAutoOpenSettings>,
|
||||
/// How to order sibling entries in the project panel.
|
||||
///
|
||||
/// Default: directories_first
|
||||
pub sort_mode: Option<ProjectPanelSortMode>,
|
||||
}
|
||||
|
||||
#[derive(
|
||||
@@ -634,6 +638,31 @@ pub enum ProjectPanelEntrySpacing {
|
||||
Standard,
|
||||
}
|
||||
|
||||
#[derive(
|
||||
Copy,
|
||||
Clone,
|
||||
Debug,
|
||||
Default,
|
||||
Serialize,
|
||||
Deserialize,
|
||||
JsonSchema,
|
||||
MergeFrom,
|
||||
PartialEq,
|
||||
Eq,
|
||||
strum::VariantArray,
|
||||
strum::VariantNames,
|
||||
)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum ProjectPanelSortMode {
|
||||
/// Show directories first, then files
|
||||
#[default]
|
||||
DirectoriesFirst,
|
||||
/// Mix directories and files together
|
||||
Mixed,
|
||||
/// Show files first, then directories
|
||||
FilesFirst,
|
||||
}
|
||||
|
||||
#[skip_serializing_none]
|
||||
#[derive(
|
||||
Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, MergeFrom, PartialEq, Eq, Default,
|
||||
|
||||
@@ -668,6 +668,7 @@ impl VsCodeSettings {
|
||||
show_diagnostics: self
|
||||
.read_bool("problems.decorations.enabled")
|
||||
.and_then(|b| if b { Some(ShowDiagnostics::Off) } else { None }),
|
||||
sort_mode: None,
|
||||
starts_open: None,
|
||||
sticky_scroll: None,
|
||||
auto_open: None,
|
||||
|
||||
Reference in New Issue
Block a user