This PR adds the ability for icon themes to provide their own file
associations.
The old `file_types.json` that was previously used to make these
associations has been removed in favor of storing them on the default
theme.
Icon themes have two new fields on them:
- `file_stems`: A mapping of file stems to icon keys.
- `file_suffixes`: A mapping of file suffixes to icon keys.
These mappings produce icon keys which can then be used in `file_icons`
to associate them to a particular icon:
```json
{
"file_stems": {
"Makefile": "make"
},
"file_suffixes": {
"idr": "idris"
},
"file_icons": {
"idris": { "path": "./icons/idris.svg" },
"make": { "path": "./icons/make.svg" }
}
}
```
When loading an icon theme, the `file_stems` and `file_icons` fields
will be merged with the ones from the base icon theme, with the values
from the icon theme being loaded overriding ones in the base theme.
Release Notes:
- Added the ability for icon themes to provide their own file
associations.
49 lines
1.3 KiB
Rust
49 lines
1.3 KiB
Rust
#![allow(missing_docs)]
|
|
|
|
use gpui::SharedString;
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
use std::collections::HashMap;
|
|
|
|
use crate::AppearanceContent;
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
|
|
pub struct IconThemeFamilyContent {
|
|
pub name: String,
|
|
pub author: String,
|
|
pub themes: Vec<IconThemeContent>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
|
|
pub struct IconThemeContent {
|
|
pub name: String,
|
|
pub appearance: AppearanceContent,
|
|
#[serde(default)]
|
|
pub directory_icons: DirectoryIconsContent,
|
|
#[serde(default)]
|
|
pub chevron_icons: ChevronIconsContent,
|
|
#[serde(default)]
|
|
pub file_stems: HashMap<String, String>,
|
|
#[serde(default)]
|
|
pub file_suffixes: HashMap<String, String>,
|
|
#[serde(default)]
|
|
pub file_icons: HashMap<String, IconDefinitionContent>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
|
|
pub struct DirectoryIconsContent {
|
|
pub collapsed: Option<SharedString>,
|
|
pub expanded: Option<SharedString>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
|
|
pub struct ChevronIconsContent {
|
|
pub collapsed: Option<SharedString>,
|
|
pub expanded: Option<SharedString>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
|
|
pub struct IconDefinitionContent {
|
|
pub path: SharedString,
|
|
}
|